const char *next_sha1, const char *next_name)
{
char buffer[256];
+ const char *argv[6];
sprintf(buffer, "GITHEAD_%s", head_sha1);
setenv(buffer, head_name, 1);
* and $prev on top of us (when reverting), or the change between
* $prev and $commit on top of us (when cherry-picking or replaying).
*/
-
- return run_command_opt(RUN_COMMAND_NO_STDIN | RUN_GIT_CMD,
- "merge-recursive", base_sha1, "--",
- head_sha1, next_sha1, NULL);
+ argv[0] = "merge-recursive";
+ argv[1] = base_sha1;
+ argv[2] = "--";
+ argv[3] = head_sha1;
+ argv[4] = next_sha1;
+ argv[5] = NULL;
+
+ return run_command_v_opt(argv, RUN_COMMAND_NO_STDIN | RUN_GIT_CMD);
}
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;
git_config(git_default_config);
me = action == REVERT ? "revert" : "cherry-pick";
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 {
next = commit;
set_author_ident_env(message);
add_message_to_msg(message);
- if (replay) {
- add_to_msg("\n(cherry picked from commit ");
+ if (!replay) {
+ add_to_msg("(cherry picked from commit ");
add_to_msg(sha1_to_hex(commit->object.sha1));
add_to_msg(")\n");
}
if (merge_recursive(sha1_to_hex(base->object.sha1),
sha1_to_hex(head), "HEAD",
- sha1_to_hex(next->object.sha1), oneline))
- exit(1);
- if (write_tree(head, 0, NULL)) {
+ 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();
"mark the corrected paths with 'git-add <paths>'\n"
"and commit the result.\n", me);
if (action == CHERRY_PICK) {
- fprintf(stderr, "You may choose to use the following "
- "when making the commit:\n"
- "GIT_AUTHOR_NAME=\"%s\"\n",
- getenv("GIT_AUTHOR_NAME"));
- fprintf(stderr, "GIT_AUTHOR_EMAIL=\"%s\"\n",
- getenv("GIT_AUTHOR_EMAIL"));
- fprintf(stderr, "GIT_AUTHOR_DATE=\"%s\"\n"
- "export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL "
- "GIT_AUTHOR_DATE\n",
- getenv("GIT_AUTHOR_DATE"));
+ fprintf(stderr, "When commiting, use the option "
+ "'-c %s' to retain authorship and message.\n",
+ find_unique_abbrev(commit->object.sha1,
+ DEFAULT_ABBREV));
}
exit(1);
}