X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=builtin-revert.c;h=27881e94937dd79b9a0524eb2d9770427ec4f4fb;hb=847d10f56d7853cd0e139a7c2e6ad0ad2de5c464;hp=2b57525d7234086bdf2022d13fa405e5007627fb;hpb=182fb4df9120257c2e6b041dd58eef3de5b530d2;p=git.git diff --git a/builtin-revert.c b/builtin-revert.c index 2b57525d7..27881e949 100644 --- a/builtin-revert.c +++ b/builtin-revert.c @@ -24,12 +24,12 @@ */ static const char * const revert_usage[] = { - "git-revert [options] ", + "git revert [options] ", NULL }; static const char * const cherry_pick_usage[] = { - "git-cherry-pick [options] ", + "git cherry-pick [options] ", NULL }; @@ -180,7 +180,7 @@ static void set_author_ident_env(const char *message) email++; timestamp = strchr(email, '>'); if (!timestamp) - die ("Could not extract author email from %s", + die ("Could not extract author time from %s", sha1_to_hex(commit->object.sha1)); *timestamp = '\0'; for (timestamp++; *timestamp && isspace(*timestamp); @@ -206,6 +206,7 @@ static int merge_recursive(const char *base_sha1, { char buffer[256]; const char *argv[6]; + int i = 0; sprintf(buffer, "GITHEAD_%s", head_sha1); setenv(buffer, head_name, 1); @@ -218,12 +219,13 @@ static int merge_recursive(const char *base_sha1, * and $prev on top of us (when reverting), or the change between * $prev and $commit on top of us (when cherry-picking or replaying). */ - argv[0] = "merge-recursive"; - argv[1] = base_sha1; - argv[2] = "--"; - argv[3] = head_sha1; - argv[4] = next_sha1; - argv[5] = NULL; + argv[i++] = "merge-recursive"; + if (base_sha1) + argv[i++] = base_sha1; + argv[i++] = "--"; + argv[i++] = head_sha1; + argv[i++] = next_sha1; + argv[i++] = NULL; return run_command_v_opt(argv, RUN_COMMAND_NO_STDIN | RUN_GIT_CMD); } @@ -269,7 +271,7 @@ static int revert_or_cherry_pick(int argc, const char **argv) const char *message, *encoding; const char *defmsg = xstrdup(git_path("MERGE_MSG")); - git_config(git_default_config); + git_config(git_default_config, NULL); me = action == REVERT ? "revert" : "cherry-pick"; setenv(GIT_REFLOG_ACTION, me, 0); parse_args(argc, argv); @@ -297,9 +299,12 @@ static int revert_or_cherry_pick(int argc, const char **argv) discard_cache(); } - if (!commit->parents) - die ("Cannot %s a root commit", me); - if (commit->parents->next) { + if (!commit->parents) { + if (action == REVERT) + die ("Cannot revert a root commit"); + parent = NULL; + } + else if (commit->parents->next) { /* Reverting or cherry-picking a merge commit */ int cnt; struct commit_list *p; @@ -368,7 +373,8 @@ static int revert_or_cherry_pick(int argc, const char **argv) } } - if (merge_recursive(sha1_to_hex(base->object.sha1), + if (merge_recursive(base == NULL ? + NULL : sha1_to_hex(base->object.sha1), sha1_to_hex(head), "HEAD", sha1_to_hex(next->object.sha1), oneline) || write_cache_as_tree(head, 0, NULL)) {