On my slow laptop (P3 700MHz), system-wide bash completions take too much time to load (> 1s), and significant fraction of this time is spent loading git-completion.bash: $ time bash -c '. git-completion.bash' # before this patch real 0m0.317s user 0m0.250s sys 0m0.060s I've tracked down that the most time is spent warming up merge_strategy, all_command & porcelain_command caches. Since git is not used in each and every interactive xterm, I think it would be perfectly ok to load completion support with cold caches, and then load needed thing lazily. As __git_merge_stratiegies(), __git_all_commands() & __git_porcelain_command() already cache their results, we can safely remove associated cache initialization code and be done with it: $ time bash -c '. git-completion.bash' # after this patch real 0m0.069s user 0m0.050s sys 0m0.020s Signed-off-by: Kirill Smelkov <kirr@xxxxxxxxxx> --- contrib/completion/git-completion.bash | 3 --- 1 files changed, 0 insertions(+), 3 deletions(-) diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 2c2a0d4..4c09d41 100755 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -340,7 +340,6 @@ __git_merge_strategies () }' } __git_merge_strategylist= -__git_merge_strategylist=$(__git_merge_strategies 2>/dev/null) __git_complete_file () { @@ -505,7 +504,6 @@ __git_all_commands () done } __git_all_commandlist= -__git_all_commandlist="$(__git_all_commands 2>/dev/null)" __git_porcelain_commands () { @@ -596,7 +594,6 @@ __git_porcelain_commands () done } __git_porcelain_commandlist= -__git_porcelain_commandlist="$(__git_porcelain_commands 2>/dev/null)" __git_aliases () { -- 1.6.5.rc2.17.gdbc1b -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html