Merge branch 'jk/cherry-pick-root-with-resolve' into maint
* jk/cherry-pick-root-with-resolve: t3503: test cherry picking and reverting root commits revert: allow reverting a root commit cherry-pick: handle root commits with external strategies
This commit is contained in:
commit
0e66f8722c
@ -599,6 +599,14 @@ static void write_tree_trivial(unsigned char *sha1)
|
||||
die(_("git write-tree failed to write a tree"));
|
||||
}
|
||||
|
||||
static const char *merge_argument(struct commit *commit)
|
||||
{
|
||||
if (commit)
|
||||
return sha1_to_hex(commit->object.sha1);
|
||||
else
|
||||
return EMPTY_TREE_SHA1_HEX;
|
||||
}
|
||||
|
||||
int try_merge_command(const char *strategy, size_t xopts_nr,
|
||||
const char **xopts, struct commit_list *common,
|
||||
const char *head_arg, struct commit_list *remotes)
|
||||
@ -619,11 +627,11 @@ int try_merge_command(const char *strategy, size_t xopts_nr,
|
||||
args[i++] = s;
|
||||
}
|
||||
for (j = common; j; j = j->next)
|
||||
args[i++] = xstrdup(sha1_to_hex(j->item->object.sha1));
|
||||
args[i++] = xstrdup(merge_argument(j->item));
|
||||
args[i++] = "--";
|
||||
args[i++] = head_arg;
|
||||
for (j = remotes; j; j = j->next)
|
||||
args[i++] = xstrdup(sha1_to_hex(j->item->object.sha1));
|
||||
args[i++] = xstrdup(merge_argument(j->item));
|
||||
args[i] = NULL;
|
||||
ret = run_command_v_opt(args, RUN_GIT_CMD);
|
||||
strbuf_release(&buf);
|
||||
|
@ -408,8 +408,6 @@ static int do_pick_commit(void)
|
||||
discard_cache();
|
||||
|
||||
if (!commit->parents) {
|
||||
if (action == REVERT)
|
||||
die (_("Cannot revert a root commit"));
|
||||
parent = NULL;
|
||||
}
|
||||
else if (commit->parents->next) {
|
||||
@ -467,7 +465,7 @@ static int do_pick_commit(void)
|
||||
strbuf_addstr(&msgbuf, "\"\n\nThis reverts commit ");
|
||||
strbuf_addstr(&msgbuf, sha1_to_hex(commit->object.sha1));
|
||||
|
||||
if (commit->parents->next) {
|
||||
if (commit->parents && commit->parents->next) {
|
||||
strbuf_addstr(&msgbuf, ", reversing\nchanges made to ");
|
||||
strbuf_addstr(&msgbuf, sha1_to_hex(parent->object.sha1));
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='test cherry-picking a root commit'
|
||||
test_description='test cherry-picking (and reverting) a root commit'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
@ -23,7 +23,30 @@ test_expect_success setup '
|
||||
test_expect_success 'cherry-pick a root commit' '
|
||||
|
||||
git cherry-pick master &&
|
||||
test first = $(cat file1)
|
||||
echo first >expect &&
|
||||
test_cmp expect file1
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'revert a root commit' '
|
||||
|
||||
git revert master &&
|
||||
test_path_is_missing file1
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'cherry-pick a root commit with an external strategy' '
|
||||
|
||||
git cherry-pick --strategy=resolve master &&
|
||||
echo first >expect &&
|
||||
test_cmp expect file1
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'revert a root commit with an external strategy' '
|
||||
|
||||
git revert --strategy=resolve master &&
|
||||
test_path_is_missing file1
|
||||
|
||||
'
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user