Nguyen Thai Ngoc Duy <pclouds@xxxxxxxxx> wrote: > > __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. Youch. > Maybe something like this? Yea, this looks reasonable. ACK from me, though the bigger change is to builtin-merge and not the completion. Miklos? Dscho? > 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)" -- Shawn. -- 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