summaryrefslogtreecommitdiff
path: root/main.py
diff options
context:
space:
mode:
authorMike Frysinger <vapier@google.com>2020-02-18 21:37:00 -0500
committerMike Frysinger <vapier@google.com>2020-02-20 00:53:46 +0000
commit949bc34267245d35b066ebbc9e5ae8be081db86f (patch)
tree5cf3d4e49fd971863b8084cd0f97e11d0478442a /main.py
parentf841ca48c150e8a62728c5875fb01dcf7c5756a7 (diff)
downloadgit-repo-949bc34267245d35b066ebbc9e5ae8be081db86f.tar.gz
git-repo-949bc34267245d35b066ebbc9e5ae8be081db86f.zip
main/repo: add support for subcommand aliases
This supports [alias] sections with repo subcommands just like git. Change-Id: Ie9235b5d4449414e6a745814f0110bd6af74ea93 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/255833 Reviewed-by: David Pursehouse <dpursehouse@collab.net> Tested-by: Mike Frysinger <vapier@google.com>
Diffstat (limited to 'main.py')
-rwxr-xr-xmain.py27
1 files changed, 26 insertions, 1 deletions
diff --git a/main.py b/main.py
index 2422e8be3..06cd11088 100755
--- a/main.py
+++ b/main.py
@@ -26,6 +26,7 @@ import getpass
import netrc
import optparse
import os
+import shlex
import sys
import textwrap
import time
@@ -48,7 +49,7 @@ from color import SetDefaultColoring
import event_log
from repo_trace import SetTrace
from git_command import user_agent
-from git_config import init_ssh, close_ssh
+from git_config import init_ssh, close_ssh, RepoConfig
from command import InteractiveCommand
from command import MirrorSafeCommand
from command import GitcAvailableCommand, GitcClientCommand
@@ -155,6 +156,9 @@ class _Repo(object):
argv = []
gopts, _gargs = global_options.parse_args(glob)
+ name, alias_args = self._ExpandAlias(name)
+ argv = alias_args + argv
+
if gopts.help:
global_options.print_help()
commands = ' '.join(sorted(self.commands))
@@ -165,6 +169,27 @@ class _Repo(object):
return (name, gopts, argv)
+ def _ExpandAlias(self, name):
+ """Look up user registered aliases."""
+ # We don't resolve aliases for existing subcommands. This matches git.
+ if name in self.commands:
+ return name, []
+
+ key = 'alias.%s' % (name,)
+ alias = RepoConfig.ForRepository(self.repodir).GetString(key)
+ if alias is None:
+ alias = RepoConfig.ForUser().GetString(key)
+ if alias is None:
+ return name, []
+
+ args = alias.strip().split(' ', 1)
+ name = args[0]
+ if len(args) == 2:
+ args = shlex.split(args[1])
+ else:
+ args = []
+ return name, args
+
def _Run(self, name, gopts, argv):
"""Execute the requested subcommand."""
result = 0