[PATCH] Speedup bash completion loading
- From
Kirill Smelkov <kirr@mns.spb.ru>
- Date
- Oct 5, 2009, 10:03 UTC
- Message-ID
- <1254737039-10404-1-git-send-email-kirr@mns.spb.ru>
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.060sI'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.020sSigned-off-by: Kirill Smelkov <kirr@mns.spb.ru> --- 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