From 949bc34267245d35b066ebbc9e5ae8be081db86f Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Tue, 18 Feb 2020 21:37:00 -0500 Subject: 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 Tested-by: Mike Frysinger --- main.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'main.py') diff --git a/main.py b/main.py index 2422e8be..06cd1108 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 -- cgit v1.2.3-54-g00ecf