Bash completion needs to know what strategies git supports. Maybe other similar tools have the same demand. So add "git merge--show-strategies" Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- On Tue, Aug 19, 2008 at 07:27:39PM +0700, Nguyen Thai Ngoc Duy wrote: > Probably missed since git-merge builtin effort: > > __git_merge_strategies () > { > if [ -n "$__git_merge_strategylist" ]; then > echo "$__git_merge_strategylist" > return > fi > sed -n "/^all_strategies='/{ > s/^all_strategies='// > s/'// > p > q > }" "$(git --exec-path)/git-merge" > } > > It takes several seconds to finish that function. Maybe something like this? Documentation/git-merge.txt | 4 ++++ builtin-merge.c | 7 +++++++ contrib/completion/git-completion.bash | 7 +------ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt index 17a15ac..f3fe1c9 100644 --- a/Documentation/git-merge.txt +++ b/Documentation/git-merge.txt @@ -12,6 +12,7 @@ SYNOPSIS 'git merge' [-n] [--stat] [--no-commit] [--squash] [-s <strategy>]... [-m <msg>] <remote> <remote>... 'git merge' <msg> HEAD <remote>... +'git merge' --show-strategies DESCRIPTION ----------- @@ -37,6 +38,9 @@ include::merge-options.txt[] least one <remote>. Specifying more than one <remote> obviously means you are trying an Octopus. +--show-strategies:: + Show all available strategies. For internal use only. + include::merge-strategies.txt[] diff --git a/builtin-merge.c b/builtin-merge.c index de025ac..613c96a 100644 --- a/builtin-merge.c +++ b/builtin-merge.c @@ -802,6 +802,13 @@ int cmd_merge(int argc, const char **argv, const char *prefix) const char *best_strategy = NULL, *wt_strategy = NULL; struct commit_list **remotes = &remoteheads; + /* needed for git bash completion and similar tools */ + if (argc == 2 && !strcmp(argv[1], "--show-strategies")) { + for (i = 0; i < ARRAY_SIZE(all_strategy); i++) + printf("%s\n", all_strategy[i].name); + return 0; + } + setup_work_tree(); if (unmerged_cache()) die("You are in the middle of a conflicted merge."); diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 158b912..1eea49a 100755 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -271,12 +271,7 @@ __git_merge_strategies () echo "$__git_merge_strategylist" return fi - sed -n "/^all_strategies='/{ - s/^all_strategies='// - s/'// - p - q - }" "$(git --exec-path)/git-merge" + $(git --exec-path)/git-merge --show-strategies } __git_merge_strategylist= __git_merge_strategylist="$(__git_merge_strategies 2>/dev/null)" -- 1.6.0.96.g2fad1.dirty -- 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