Use .git/MERGE_MSG in cherry-pick/revert
PATCH 1/1 Use .git/MERGE_MSG in cherry-pick/revert
Rather than storing the temporary commit message data in .msg (in the working tree) we now store the message data in .git/MERGE_MSG.
By storing the message in the .git/ directory we are sure we will never have a collision with a user file, should a project actually have a ".msg" file in their top level tree. We also don't need to worry about leaving this stale file behind during a reset --hard and have it show up in the output of status.
We are using .git/MERGE_MSG here to store the temporary message as it is an already established convention between git-merge, git-am and git-rebase that git-commit will default the user's edit buffer to the contents of .git/MERGE_MSG. If the user is going to need to resolve this commit or wants to edit the message on their own prepping that file with the desired message "just works".
---
Resend of earlier patch, but with proper commit message. ;-)
builtin-revert.c | 17 ++++++----------- 1 files changed, 6 insertions(+), 11 deletions(-)
builtin-revert.c +6 -11
@@ -237,6 +237,7 @@ static int revert_or_cherry_pick(int argc, const char **argv)int i;char *oneline, *reencoded_message =NULL ;const char *message, *encoding; +const char *defmsg =git_path ("MERGE_MSG" );git_config (git_default_config); me = action ==REVERT ?"revert" :"cherry-pick" ;
@@ -280,7 +281,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)
@@ -330,7 +331,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 +345,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 <paths>'\n"
@@ -362,7 +359,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 +373,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);
Signature · 1 line
1.5.2.rc2.716.gba45c
Quoted 2 lines · Shawn O. Pearce
Rather than storing the temporary commit message data in .msg (in the working tree) we now store the message data in .git/MERGE_MSG.
Hi, there's one more error message referring to '.msg':
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");
}
Thanks, Gerrit.