From cdaf0be1f4ceb802bfc62f4ed86825aa17395dc4 Mon Sep 17 00:00:00 2001 From: Ng Zhi An Date: Wed, 27 May 2020 20:57:28 +0000 Subject: [PATCH] Add git completion helper to cl upload This is similar in spirit to the helper flags in git subcommands, e.g. try `git branch --git-completion-helper`. It provides a list of long flags that the subcommands support, without repeating it manually in the completion script. Note that this special flag is not returned in help, so there is no noise. To see the result, source the script, then `git cl upload --`. Change-Id: I82e280ceac5178b0e5fa52611b9a4125e6943337 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/2209926 Reviewed-by: Edward Lesmes Commit-Queue: Zhi An Ng --- git_cl.py | 7 +++++++ git_cl_completion.sh | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/git_cl.py b/git_cl.py index 01b5d5775..4d999ed28 100755 --- a/git_cl.py +++ b/git_cl.py @@ -4048,10 +4048,17 @@ def CMDupload(parser, args): help='Modify description before upload. Cannot be used ' 'with --force. It is a noop when --no-squash is set ' 'or a new commit is created.') + parser.add_option('--git-completion-helper', action="store_true", + help=optparse.SUPPRESS_HELP) orig_args = args (options, args) = parser.parse_args(args) + if options.git_completion_helper: + print(' '.join(opt.get_opt_string() for opt in parser.option_list + if opt.help != optparse.SUPPRESS_HELP)) + return + if git_common.is_dirty_git_tree('upload'): return 1 diff --git a/git_cl_completion.sh b/git_cl_completion.sh index 8feb66aff..74687eb30 100755 --- a/git_cl_completion.sh +++ b/git_cl_completion.sh @@ -30,5 +30,19 @@ __git_cl_compute_all_commands () { _git_cl () { __git_cl_compute_all_commands - __gitcomp_nl "${__git_cl_all_commands}" + local subcommands=$(echo "$__git_cl_all_commands" | xargs) + local subcommand=$(__git_find_on_cmdline "$subcommands") + if [[ -z "$subcommand" ]]; then + __gitcomp "$subcommands" + return + fi + + case "$subcommand,$cur" in + upload,--*) + __gitcomp_builtin cl_upload + ;; + "",*) + __gitcomp_nl "${__git_cl_all_commands}" + ;; + esac }