X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=builtin-revert.c;h=8f02ed7bd1b7d4aecb8611ac1c0ebf3978b34ca5;hb=48dd1da8e190c435de692c0cfff5a8f6eacedbe5;hp=652eece5ad71fbfc19c7132d9fe256c0b5218036;hpb=36db2399e023c1526fac0b142524229554b88419;p=git.git diff --git a/builtin-revert.c b/builtin-revert.c index 652eece5a..8f02ed7bd 100644 --- a/builtin-revert.c +++ b/builtin-revert.c @@ -45,8 +45,10 @@ static void parse_options(int argc, const char **argv) if (argc < 2) usage(usage_str); - for (i = 1; i < argc - 1; i++) { + for (i = 1; i < argc; i++) { arg = argv[i]; + if (arg[0] != '-') + break; if (!strcmp(arg, "-n") || !strcmp(arg, "--no-commit")) no_commit = 1; else if (!strcmp(arg, "-e") || !strcmp(arg, "--edit")) @@ -59,7 +61,8 @@ static void parse_options(int argc, const char **argv) else if (strcmp(arg, "-r")) usage(usage_str); } - + if (i != argc - 1) + usage(usage_str); arg = argv[argc - 1]; if (get_sha1(arg, sha1)) die ("Cannot find '%s'", arg); @@ -104,7 +107,7 @@ static char *get_oneline(const char *message) return result; } -char *get_encoding(const char *message) +static char *get_encoding(const char *message) { const char *p = message, *eol; @@ -133,7 +136,7 @@ static void add_to_msg(const char *string) { int len = strlen(string); if (write_in_full(msg_fd, string, len) < 0) - die ("Could not write to .msg"); + die ("Could not write to MERGE_MSG"); } static void add_message_to_msg(const char *message) @@ -235,8 +238,9 @@ static int revert_or_cherry_pick(int argc, const char **argv) unsigned char head[20]; struct commit *base, *next; int i; - char *oneline, *encoding, *reencoded_message = NULL; - const char *message; + char *oneline, *reencoded_message = NULL; + const char *message, *encoding; + const char *defmsg = xstrdup(git_path("MERGE_MSG")); git_config(git_default_config); me = action == REVERT ? "revert" : "cherry-pick"; @@ -280,7 +284,7 @@ static int revert_or_cherry_pick(int argc, const char **argv) * reverse of it if we are revert. */ - msg_fd = hold_lock_file_for_update(&msg_file, ".msg", 1); + msg_fd = hold_lock_file_for_update(&msg_file, defmsg, 1); encoding = get_encoding(message); if (!encoding) @@ -294,13 +298,13 @@ static int revert_or_cherry_pick(int argc, const char **argv) oneline = get_oneline(message); if (action == REVERT) { + char *oneline_body = strchr(oneline, ' '); + base = commit; next = commit->parents->item; - add_to_msg("Revert "); - add_to_msg(find_unique_abbrev(commit->object.sha1, - DEFAULT_ABBREV)); - add_to_msg(oneline); - add_to_msg("\nThis reverts commit "); + add_to_msg("Revert \""); + add_to_msg(oneline_body + 1); + add_to_msg("\"\n\nThis reverts commit "); add_to_msg(sha1_to_hex(commit->object.sha1)); add_to_msg(".\n"); } else { @@ -330,7 +334,6 @@ static int revert_or_cherry_pick(int argc, const char **argv) sha1_to_hex(head), "HEAD", sha1_to_hex(next->object.sha1), oneline) || write_tree(head, 0, NULL)) { - const char *target = git_path("MERGE_MSG"); add_to_msg("\nConflicts:\n\n"); read_cache(); for (i = 0; i < active_nr;) { @@ -345,10 +348,7 @@ static int revert_or_cherry_pick(int argc, const char **argv) } } if (close(msg_fd) || commit_lock_file(&msg_file) < 0) - die ("Error wrapping up .msg"); - unlink(target); - if (rename(".msg", target)) - die ("Could not move .msg to %s", target); + die ("Error wrapping up %s", defmsg); fprintf(stderr, "Automatic %s failed. " "After resolving the conflicts,\n" "mark the corrected paths with 'git-add '\n" @@ -362,7 +362,7 @@ static int revert_or_cherry_pick(int argc, const char **argv) exit(1); } if (close(msg_fd) || commit_lock_file(&msg_file) < 0) - die ("Error wrapping up .msg"); + die ("Error wrapping up %s", defmsg); fprintf(stderr, "Finished one %s.\n", me); /* @@ -376,11 +376,9 @@ static int revert_or_cherry_pick(int argc, const char **argv) if (!no_commit) { if (edit) - return execl_git_cmd("commit", "-n", "-F", ".msg", - "-e", NULL); + return execl_git_cmd("commit", "-n", NULL); else - return execl_git_cmd("commit", "-n", "-F", ".msg", - NULL); + return execl_git_cmd("commit", "-n", "-F", defmsg, NULL); } if (reencoded_message) free(reencoded_message);