diff options
author | Junio C Hamano <gitster@pobox.com> | 2013-10-23 13:21:35 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-10-23 13:21:35 -0700 |
commit | f2c1b01c24b6c1df962a6526661cf3a58f3c6a56 (patch) | |
tree | d77d3cf65e96930095dbc40f76cb356287696258 | |
parent | Merge branch 'mg/more-textconv' (diff) | |
parent | cherry-pick: handle "-" after parsing options (diff) | |
download | tgif-f2c1b01c24b6c1df962a6526661cf3a58f3c6a56.tar.xz |
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.c | 4 | ||||
-rwxr-xr-x | t/t3501-revert-cherry-pick.sh | 12 |
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 |