Fix commit-msg hook to allow editing
authorJunio C Hamano <gitster@pobox.com>
Sun, 9 Dec 2007 07:23:20 +0000 (23:23 -0800)
committerJunio C Hamano <gitster@pobox.com>
Sun, 9 Dec 2007 08:55:55 +0000 (00:55 -0800)
The old git-commit.sh script allowed the commit-msg hook to not only
prevent a commit from proceding, but also to edit the commit message
on the fly and allow it to proceed. So here we teach builtin-commit
to do the same.

This is based on Wincent's patch, but redone with a clarified logic.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-commit.c
builtin-tag.c

index 2032ca3..30a9deb 100644 (file)
@@ -787,16 +787,17 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
                char index[PATH_MAX];
                const char *env[2] = { index, NULL };
                snprintf(index, sizeof(index), "GIT_INDEX_FILE=%s", index_file);
-               launch_editor(git_path(commit_editmsg), &sb, env);
-       } else if (strbuf_read_file(&sb, git_path(commit_editmsg), 0) < 0) {
-               rollback_index_files();
-               die("could not read commit message");
+               launch_editor(git_path(commit_editmsg), NULL, env);
        }
        if (!no_verify &&
            run_hook(index_file, "commit-msg", git_path(commit_editmsg))) {
                rollback_index_files();
                exit(1);
        }
+       if (strbuf_read_file(&sb, git_path(commit_editmsg), 0) < 0) {
+               rollback_index_files();
+               die("could not read commit message");
+       }
 
        /* Truncate the message just before the diff, if any. */
        p = strstr(sb.buf, "\ndiff --git a/");
index 729389b..9f966fc 100644 (file)
@@ -53,6 +53,8 @@ void launch_editor(const char *path, struct strbuf *buffer, const char *const *e
                        die("There was a problem with the editor %s.", editor);
        }
 
+       if (!buffer)
+               return;
        if (strbuf_read_file(buffer, path, 0) < 0)
                die("could not read message file '%s': %s",
                    path, strerror(errno));