Skip to content

Commit d943887

Browse files
szedergitster
authored andcommitted
completion: deduplicate configuration sections
The number of configuration variables listed by the completion script grew quite when we started to auto-generate it from the documentation [1], so we now complete them in two steps: first we list only the section names, then the rest [2]. To get the section names we simply strip everything following the first dot in each variable name, resulting in a lot of repeated section names, because most sections contain more than one configuration variable. This is not a correctness issue in practice, because Bash's completion facilities remove all repetitions anyway, but these repetitions make testing a bit harder. Replace the small 'sed' script removing subsections and variable names with an 'awk' script that does the same, and in addition removes any repeated configuration sections as well (by first creating and filling an associative array indexed by all encountered configuration sections, and then iterating over this array and printing the indices, i.e. the unique section names). This change makes the failing 'git config - section' test in 't9902-completion.sh' pass. Note that this changes the order of section names in the output, and makes it downright undeterministic, but this is not an issue, because Bash sorts them before presenting them to the user, and our completion tests sort them as well before comparing with the expected output. Yeah, it would be simpler and shorter to just append '| sort -u' to that command, but that would incur the overhead of one more external process and pipeline stage every time a user completes configuration sections. [1] e17ca92 (completion: drop the hard coded list of config vars, 2018-05-26) [2] f22f682 (completion: complete general config vars in two steps, 2018-05-27) Signed-off-by: SZEDER Gábor <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 7a09a8f commit d943887

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

contrib/completion/git-completion.bash

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2398,7 +2398,15 @@ _git_config ()
23982398
;;
23992399
*)
24002400
__git_compute_config_vars
2401-
__gitcomp "$(echo "$__git_config_vars" | sed 's/\.[^ ]*/./g')"
2401+
__gitcomp "$(echo "$__git_config_vars" |
2402+
awk -F . '{
2403+
sections[$1] = 1
2404+
}
2405+
END {
2406+
for (s in sections)
2407+
print s "."
2408+
}
2409+
')"
24022410
esac
24032411
}
24042412

t/t9902-completion.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1698,7 +1698,7 @@ do
16981698
'
16991699
done
17001700

1701-
test_expect_failure 'git config - section' '
1701+
test_expect_success 'git config - section' '
17021702
test_completion "git config br" <<-\EOF
17031703
branch.Z
17041704
browser.Z

0 commit comments

Comments
 (0)