diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-05-26 09:37:41 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-05-26 09:37:41 -0700 |
commit | 0e66f8722c18194665084e85180bd9f3276f3960 (patch) | |
tree | 8891513fc81ecf6bb5bb1f99e38fb6a621c30853 /builtin | |
parent | 93446aa760041a5a6f55605d94cdfad7bcd5a2f1 (diff) | |
parent | e9fe74cba4ed4577dcc02f61094c611a1c216fee (diff) | |
download | git-0e66f8722c18194665084e85180bd9f3276f3960.tar.gz |
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
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/merge.c | 12 | ||||
-rw-r--r-- | builtin/revert.c | 4 |
2 files changed, 11 insertions, 5 deletions
diff --git a/builtin/merge.c b/builtin/merge.c index 0f03dff116..a437ecba29 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -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); diff --git a/builtin/revert.c b/builtin/revert.c index f697e66953..1f27c63343 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -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)); } |