help / completion: make "git help" do the hard work
The "help" builtin has been able to emit configuration variables sincee17ca92637(completion: drop the hard coded list of config vars, 2018-05-26), but it hasn't produced exactly the format the completion script wanted. Let's do that. We got partway there in2675ea1cc0(completion: use 'sort -u' to deduplicate config variable names, 2019-08-13) andd9438873c4(completion: deduplicate configuration sections, 2019-08-13), but after both we still needed some sorting, de-duplicating and awk post-processing of the list. We can instead simply do the relevant parsing ourselves (we were doing most of it already), and call string_list_remove_duplicates() after already sorting the list, so the caller doesn't need to invoke "sort -u". The "--config-for-completion" output is the same as before after being passed through "sort -u". Then add a new "--config-sections-for-completion" option. Under that output we'll emit config sections like "alias" (instead of "alias." in the --config-for-completion output). We need to be careful to leave the "--config-for-completion" option compatible with users git, but are still running a shell with an older git-completion.bash. If we e.g. changed the option name they'd see messages about git-completion.bash being unable to find the "--config-for-completion" option. Such backwards compatibility isn't something we should bend over backwards for, it's only helping users who: * Upgrade git * Are in an old shell * The git-completion.bash in that shell hasn't cached the old "--config-for-completion" output already. But since it's easy in this case to retain compatibility, let's do it, the older versions of git-completion.bash won't care that the input they get doesn't change after a "sort -u". While we're at it let's make "--config-for-completion" die if there's anything left over in "argc", and do the same in the new "--config-sections-for-completion" option. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
5a5f04d86b
commit
a9bacccae5
@ -2503,7 +2503,14 @@ __git_config_vars=
|
||||
__git_compute_config_vars ()
|
||||
{
|
||||
test -n "$__git_config_vars" ||
|
||||
__git_config_vars="$(git help --config-for-completion | sort -u)"
|
||||
__git_config_vars="$(git help --config-for-completion)"
|
||||
}
|
||||
|
||||
__git_config_sections=
|
||||
__git_compute_config_sections ()
|
||||
{
|
||||
test -n "$__git_config_sections" ||
|
||||
__git_config_sections="$(git help --config-sections-for-completion)"
|
||||
}
|
||||
|
||||
# Completes possible values of various configuration variables.
|
||||
@ -2717,16 +2724,8 @@ __git_complete_config_variable_name ()
|
||||
__gitcomp "$__git_config_vars" "" "$cur_" "$sfx"
|
||||
;;
|
||||
*)
|
||||
__git_compute_config_vars
|
||||
__gitcomp "$(echo "$__git_config_vars" |
|
||||
awk -F . '{
|
||||
sections[$1] = 1
|
||||
}
|
||||
END {
|
||||
for (s in sections)
|
||||
print s "."
|
||||
}
|
||||
')" "" "$cur_"
|
||||
__git_compute_config_sections
|
||||
__gitcomp "$__git_config_sections" "" "$cur_" "."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user