Message ID | a2e792c911e1b9fa77d27ec327f6a9dfe06d4de4.1706534882.git.gitgitgadget@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | completion: remove hardcoded config variable names | expand |
On Mon, Jan 29, 2024 at 01:28:01PM +0000, Philippe Blain via GitGitGadget wrote: > From: Philippe Blain <levraiphilippeblain@gmail.com> [snip] > diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash > index 2934ceb7637..0e8fd63bfdb 100644 > --- a/contrib/completion/git-completion.bash > +++ b/contrib/completion/git-completion.bash > @@ -2605,6 +2612,15 @@ __git_compute_first_level_config_vars_for_section () > printf -v "__git_first_level_config_vars_for_section_${section}" %s "$(echo "$__git_config_vars" | grep -E "^${section}\.[a-z]" | awk -F. '{print $2}')" > } > > +__git_compute_second_level_config_vars_for_section () > +{ > + section="$1" This should be `local section`, as well. > + __git_compute_config_vars_all > + local this_section="__git_second_level_config_vars_for_section_${section}" > + test -n "${!this_section}" || > + printf -v "__git_second_level_config_vars_for_section_${section}" %s "$(echo "$__git_config_vars_all" | grep -E "^${section}\.<" | awk -F. '{print $3}')" > +} > + > __git_config_sections= > __git_compute_config_sections () > { > @@ -2749,10 +2765,13 @@ __git_complete_config_variable_name () > done > > case "$cur_" in > - branch.*.*) > + branch.*.*|guitool.*.*|difftool.*.*|man.*.*|mergetool.*.*|remote.*.*|submodule.*.*|url.*.*) > local pfx="${cur_%.*}." > cur_="${cur_##*.}" > - __gitcomp "remote pushRemote merge mergeOptions rebase" "$pfx" "$cur_" "$sfx" > + local section="${pfx%.*.}" > + __git_compute_second_level_config_vars_for_section "${section}" > + local this_section="__git_second_level_config_vars_for_section_${section}" > + __gitcomp "${!this_section}" "$pfx" "$cur_" "$sfx" > return > ;; Nice. [snip] > diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh > index f28d8f531b7..24ff786b273 100755 > --- a/t/t9902-completion.sh > +++ b/t/t9902-completion.sh > @@ -2593,6 +2593,16 @@ test_expect_success 'git config - variable name - __git_compute_first_level_conf > submodule.recurse Z > EOF > ' Missing a newline. > +test_expect_success 'git config - variable name - __git_compute_second_level_config_vars_for_section' ' > + test_completion "git config branch.main." <<-\EOF > + branch.main.description Z > + branch.main.remote Z > + branch.main.pushRemote Z > + branch.main.merge Z > + branch.main.mergeOptions Z > + branch.main.rebase Z > + EOF > +' Patrick
Le 2024-02-08 à 02:42, Patrick Steinhardt a écrit : > On Mon, Jan 29, 2024 at 01:28:01PM +0000, Philippe Blain via GitGitGadget wrote: >> From: Philippe Blain <levraiphilippeblain@gmail.com> > [snip] >> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash >> index 2934ceb7637..0e8fd63bfdb 100644 >> --- a/contrib/completion/git-completion.bash >> +++ b/contrib/completion/git-completion.bash >> @@ -2605,6 +2612,15 @@ __git_compute_first_level_config_vars_for_section () >> printf -v "__git_first_level_config_vars_for_section_${section}" %s "$(echo "$__git_config_vars" | grep -E "^${section}\.[a-z]" | awk -F. '{print $2}')" >> } >> >> +__git_compute_second_level_config_vars_for_section () >> +{ >> + section="$1" > > This should be `local section`, as well. Thanks, fixed. > [snip] >> diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh >> index f28d8f531b7..24ff786b273 100755 >> --- a/t/t9902-completion.sh >> +++ b/t/t9902-completion.sh >> @@ -2593,6 +2593,16 @@ test_expect_success 'git config - variable name - __git_compute_first_level_conf >> submodule.recurse Z >> EOF >> ' > > Missing a newline. Fixed. Thank you again for your review Patrick, much appreciated. Philippe.
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 2934ceb7637..0e8fd63bfdb 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -2596,6 +2596,13 @@ __git_compute_config_vars () __git_config_vars="$(git help --config-for-completion)" } +__git_config_vars_all= +__git_compute_config_vars_all () +{ + test -n "$__git_config_vars_all" || + __git_config_vars_all="$(git help --config-all-for-completion)" +} + __git_compute_first_level_config_vars_for_section () { section="$1" @@ -2605,6 +2612,15 @@ __git_compute_first_level_config_vars_for_section () printf -v "__git_first_level_config_vars_for_section_${section}" %s "$(echo "$__git_config_vars" | grep -E "^${section}\.[a-z]" | awk -F. '{print $2}')" } +__git_compute_second_level_config_vars_for_section () +{ + section="$1" + __git_compute_config_vars_all + local this_section="__git_second_level_config_vars_for_section_${section}" + test -n "${!this_section}" || + printf -v "__git_second_level_config_vars_for_section_${section}" %s "$(echo "$__git_config_vars_all" | grep -E "^${section}\.<" | awk -F. '{print $3}')" +} + __git_config_sections= __git_compute_config_sections () { @@ -2749,10 +2765,13 @@ __git_complete_config_variable_name () done case "$cur_" in - branch.*.*) + branch.*.*|guitool.*.*|difftool.*.*|man.*.*|mergetool.*.*|remote.*.*|submodule.*.*|url.*.*) local pfx="${cur_%.*}." cur_="${cur_##*.}" - __gitcomp "remote pushRemote merge mergeOptions rebase" "$pfx" "$cur_" "$sfx" + local section="${pfx%.*.}" + __git_compute_second_level_config_vars_for_section "${section}" + local this_section="__git_second_level_config_vars_for_section_${section}" + __gitcomp "${!this_section}" "$pfx" "$cur_" "$sfx" return ;; branch.*) @@ -2765,33 +2784,6 @@ __git_complete_config_variable_name () __gitcomp_nl_append "${!this_section}" "$pfx" "$cur_" "${sfx:- }" return ;; - guitool.*.*) - local pfx="${cur_%.*}." - cur_="${cur_##*.}" - __gitcomp " - argPrompt cmd confirm needsFile noConsole noRescan - prompt revPrompt revUnmerged title - " "$pfx" "$cur_" "$sfx" - return - ;; - difftool.*.*) - local pfx="${cur_%.*}." - cur_="${cur_##*.}" - __gitcomp "cmd path" "$pfx" "$cur_" "$sfx" - return - ;; - man.*.*) - local pfx="${cur_%.*}." - cur_="${cur_##*.}" - __gitcomp "cmd path" "$pfx" "$cur_" "$sfx" - return - ;; - mergetool.*.*) - local pfx="${cur_%.*}." - cur_="${cur_##*.}" - __gitcomp "cmd path trustExitCode" "$pfx" "$cur_" "$sfx" - return - ;; pager.*) local pfx="${cur_%.*}." cur_="${cur_#*.}" @@ -2799,15 +2791,6 @@ __git_complete_config_variable_name () __gitcomp_nl "$__git_all_commands" "$pfx" "$cur_" "${sfx:- }" return ;; - remote.*.*) - local pfx="${cur_%.*}." - cur_="${cur_##*.}" - __gitcomp " - url proxy fetch push mirror skipDefaultUpdate - receivepack uploadpack tagOpt pushurl - " "$pfx" "$cur_" "$sfx" - return - ;; remote.*) local pfx="${cur_%.*}." cur_="${cur_#*.}" @@ -2818,12 +2801,6 @@ __git_complete_config_variable_name () __gitcomp_nl_append "${!this_section}" "$pfx" "$cur_" "${sfx:- }" return ;; - submodule.*.*) - local pfx="${cur_%.*}." - cur_="${cur_##*.}" - __gitcomp "url update branch fetchRecurseSubmodules ignore active" "$pfx" "$cur_" "$sfx" - return - ;; submodule.*) local pfx="${cur_%.*}." cur_="${cur_#*.}" @@ -2834,12 +2811,6 @@ __git_complete_config_variable_name () __gitcomp_nl_append "${!this_section}" "$pfx" "$cur_" "${sfx:- }" return ;; - url.*.*) - local pfx="${cur_%.*}." - cur_="${cur_##*.}" - __gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur_" "$sfx" - return - ;; *.*) __git_compute_config_vars __gitcomp "$__git_config_vars" "" "$cur_" "$sfx" diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index f28d8f531b7..24ff786b273 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -2593,6 +2593,16 @@ test_expect_success 'git config - variable name - __git_compute_first_level_conf submodule.recurse Z EOF ' +test_expect_success 'git config - variable name - __git_compute_second_level_config_vars_for_section' ' + test_completion "git config branch.main." <<-\EOF + branch.main.description Z + branch.main.remote Z + branch.main.pushRemote Z + branch.main.merge Z + branch.main.mergeOptions Z + branch.main.rebase Z + EOF +' test_expect_success 'git config - value' ' test_completion "git config color.pager " <<-\EOF