summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2013-10-23 13:21:35 -0700
committerJunio C Hamano <gitster@pobox.com>2013-10-23 13:21:35 -0700
commitf2c1b01c24b6c1df962a6526661cf3a58f3c6a56 (patch)
treed77d3cf65e96930095dbc40f76cb356287696258
parent4197361e39a304df30cc492122dbdfe90ae8af0e (diff)
parentd644c5502fc576904a07fab35f43540fa9f2e7c2 (diff)
downloadgit-f2c1b01c24b6c1df962a6526661cf3a58f3c6a56.tar.gz
Merge branch 'hu/cherry-pick-previous-branch'
"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
-rw-r--r--builtin/revert.c4
-rwxr-xr-xt/t3501-revert-cherry-pick.sh12
2 files changed, 14 insertions, 2 deletions
diff --git a/builtin/revert.c b/builtin/revert.c
index 52c35e75d9..87659c9fdb 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -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)
diff --git a/t/t3501-revert-cherry-pick.sh b/t/t3501-revert-cherry-pick.sh
index bff6ffe088..51f3bbb8af 100755
--- a/t/t3501-revert-cherry-pick.sh
+++ b/t/t3501-revert-cherry-pick.sh
@@ -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