Merge branch 'hu/cherry-pick-previous-branch'
authorJunio C Hamano <gitster@pobox.com>
Wed, 23 Oct 2013 20:21:35 +0000 (13:21 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 23 Oct 2013 20:21:35 +0000 (13:21 -0700)
"git cherry-pick" without further options would segfault.

Could use a follow-up to handle '-' after argv[1] better.

* hu/cherry-pick-previous-branch:
cherry-pick: handle "-" after parsing options

builtin/revert.c
t/t3501-revert-cherry-pick.sh
index 52c35e75d90dc07f6a80362f200212e314a14ec8..87659c9fdb749bf8cbf33ce71391fdfe284edd6d 100644 (file)
@@ -168,6 +168,8 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts)
                opts->revs->no_walk = REVISION_WALK_NO_WALK_UNSORTED;
                if (argc < 2)
                        usage_with_options(usage_str, options);
+               if (!strcmp(argv[1], "-"))
+                       argv[1] = "@{-1}";
                memset(&s_r_opt, 0, sizeof(s_r_opt));
                s_r_opt.assume_dashdash = 1;
                argc = setup_revisions(argc, argv, opts->revs, &s_r_opt);
@@ -202,8 +204,6 @@ int cmd_cherry_pick(int argc, const char **argv, const char *prefix)
        memset(&opts, 0, sizeof(opts));
        opts.action = REPLAY_PICK;
        git_config(git_default_config, NULL);
-       if (!strcmp(argv[1], "-"))
-               argv[1] = "@{-1}";
        parse_args(argc, argv, &opts);
        res = sequencer_pick_revisions(&opts);
        if (res < 0)
index bff6ffe08817ed0c057909aa1d3f93140cf6a3e0..51f3bbb8af446dd24a835a8593475b59a73f6d1f 100755 (executable)
@@ -129,4 +129,16 @@ test_expect_success 'cherry-pick "-" is meaningless without checkout' '
        )
 '
 
+test_expect_success 'cherry-pick "-" works with arguments' '
+       git checkout -b side-branch &&
+       test_commit change actual change &&
+       git checkout master &&
+       git cherry-pick -s - &&
+       echo "Signed-off-by: C O Mitter <committer@example.com>" >expect &&
+       git cat-file commit HEAD | grep ^Signed-off-by: >signoff &&
+       test_cmp expect signoff &&
+       echo change >expect &&
+       test_cmp expect actual
+'
+
 test_done