This is a __gitcomp wrapper that will execute
git ... --git-completion-helper
to get the list of completable options. The call will be made only
once and cached to avoid performance issues, especially on Windows.
Signed-off-by: Nguyễn Thái Ngọc Duy <[email protected]>
---
contrib/completion/git-completion.bash | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/contrib/completion/git-completion.bash
b/contrib/completion/git-completion.bash
index 3683c772c5..2d8d3434c6 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -280,6 +280,30 @@ __gitcomp ()
esac
}
+# This function is equivalent to
+#
+# __gitcomp "$(git xxx --git-completion-helper) ..."
+#
+# except that the value from $(git) is cached
+__gitcomp_builtin ()
+{
+ # spaces must be replaced with underscore for multi-word
+ # commands, e.g. "git remote add" becomes remote_add.
+ local cmd="$1"
+ shift
+
+ local var=__gitcomp_builtin_"${cmd/-/_}"
+ local options
+ eval "options=\$$var"
+
+ if [ -z "$options" ]; then
+ declare -g "$var=$(__git ${cmd/_/ } --git-completion-helper)"
+ eval "options=\$$var"
+ fi
+
+ __gitcomp "$options $*"
+}
+
# Variation of __gitcomp_nl () that appends to the existing list of
# completion candidates, COMPREPLY.
__gitcomp_nl_append ()
--
2.16.1.205.g271f633410