Re: [PATCH] bash-completion: fix getting strategy list
- From
Shawn O. Pearce <spearce@spearce.org>
- Date
- Aug 19, 2008, 14:18 UTC
- Message-ID
- <20080819141832.GA20947@spearce.org>
- In-Reply-To
- <20080819132803.GA26201@laptop>
Nguyen Thai Ngoc Duy <pclouds@gmail.com> wrote:
Show 15 quoted lines
> > __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?
Show 36 quoted lines
> 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.