Merge branch 'en/rebase-i-microfixes'
authorJunio C Hamano <gitster@pobox.com>
Wed, 18 Jul 2018 19:20:33 +0000 (12:20 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 18 Jul 2018 19:20:33 +0000 (12:20 -0700)
* en/rebase-i-microfixes:
git-rebase--merge: modernize "git-$cmd" to "git $cmd"
Fix use of strategy options with interactive rebases
t3418: add testcase showing problems with rebase -i and strategy options

git-rebase--merge.sh
git-rebase.sh
sequencer.c
t/t3418-rebase-continue.sh
index cf4c0422148935906ad939c5351652a1531e5f0d..aa2f2f08728edbbfd4beb28a882b744170b426ba 100644 (file)
@@ -71,7 +71,7 @@ call_merge () {
        test -z "$strategy" && strategy=recursive
        # If cmt doesn't have a parent, don't include it as a base
        base=$(git rev-parse --verify --quiet $cmt^)
-       eval 'git-merge-$strategy' $strategy_opts $base ' -- "$hd" "$cmt"'
+       eval 'git merge-$strategy' $strategy_opts $base ' -- "$hd" "$cmt"'
        rv=$?
        case "$rv" in
        0)
@@ -88,7 +88,7 @@ call_merge () {
                ;;
        *)
                die "Unknown exit code ($rv) from command:" \
-                       "git-merge-$strategy $cmt^ -- HEAD $cmt"
+                       "git merge-$strategy $cmt^ -- HEAD $cmt"
                ;;
        esac
 }
index 19bdebb48025e236c596d554768012951d348632..f3b10c7f62d1aaed445bf2b08ff926f253a49925 100755 (executable)
@@ -328,7 +328,7 @@ do
                do_merge=t
                ;;
        --strategy-option=*)
-               strategy_opts="$strategy_opts $(git rev-parse --sq-quote "--${1#--strategy-option=}")"
+               strategy_opts="$strategy_opts $(git rev-parse --sq-quote "--${1#--strategy-option=}" | sed -e s/^.//)"
                do_merge=t
                test -z "$strategy" && strategy=recursive
                ;;
index 39363a950f841afff28032e619a1c10e294bd857..03c47405fbf2c1896d4a1d38ef9f204518d7e92d 100644 (file)
@@ -2207,6 +2207,7 @@ static int populate_opts_cb(const char *key, const char *value, void *data)
 static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
 {
        int i;
+       char *strategy_opts_string;
 
        strbuf_reset(buf);
        if (!read_oneliner(buf, rebase_path_strategy(), 0))
@@ -2215,7 +2216,11 @@ static void read_strategy_opts(struct replay_opts *opts, struct strbuf *buf)
        if (!read_oneliner(buf, rebase_path_strategy_opts(), 0))
                return;
 
-       opts->xopts_nr = split_cmdline(buf->buf, (const char ***)&opts->xopts);
+       strategy_opts_string = buf->buf;
+       if (*strategy_opts_string == ' ')
+               strategy_opts_string++;
+       opts->xopts_nr = split_cmdline(strategy_opts_string,
+                                      (const char ***)&opts->xopts);
        for (i = 0; i < opts->xopts_nr; i++) {
                const char *arg = opts->xopts[i];
 
index 03bf1b8a3b3df2e44ed0f70dc176c25af9ac244a..c145dbac38bb549ab7e9030b4134a50eac468383 100755 (executable)
@@ -74,6 +74,38 @@ test_expect_success 'rebase --continue remembers merge strategy and options' '
        test -f funny.was.run
 '
 
+test_expect_success 'rebase -i --continue handles merge strategy and options' '
+       rm -fr .git/rebase-* &&
+       git reset --hard commit-new-file-F2-on-topic-branch &&
+       test_commit "commit-new-file-F3-on-topic-branch-for-dash-i" F3 32 &&
+       test_when_finished "rm -fr test-bin funny.was.run funny.args" &&
+       mkdir test-bin &&
+       cat >test-bin/git-merge-funny <<-EOF &&
+       #!$SHELL_PATH
+       echo "\$@" >>funny.args
+       case "\$1" in --opt) ;; *) exit 2 ;; esac
+       case "\$2" in --foo) ;; *) exit 2 ;; esac
+       case "\$4" in --) ;; *) exit 2 ;; esac
+       shift 2 &&
+       >funny.was.run &&
+       exec git merge-recursive "\$@"
+       EOF
+       chmod +x test-bin/git-merge-funny &&
+       (
+               PATH=./test-bin:$PATH &&
+               test_must_fail git rebase -i -s funny -Xopt -Xfoo master topic
+       ) &&
+       test -f funny.was.run &&
+       rm funny.was.run &&
+       echo "Resolved" >F2 &&
+       git add F2 &&
+       (
+               PATH=./test-bin:$PATH &&
+               git rebase --continue
+       ) &&
+       test -f funny.was.run
+'
+
 test_expect_success 'rebase passes merge strategy options correctly' '
        rm -fr .git/rebase-* &&
        git reset --hard commit-new-file-F3-on-topic-branch &&