Like when it is already specified through -C, -F or -m to git-commit. Signed-off-by: Alex Riesen <raa.lkml@xxxxxxxxx> --- Alex Riesen, Tue, Nov 27, 2007 19:18:56 +0100: > On 27/11/2007, Junio C Hamano <gitster@xxxxxxxxx> wrote: > > ... When no_edit is in effect, I think these two places can > > be replaced with an equivalent of "diff-index --cached HEAD --" (which > > should not hit the work tree at all) to see if there is anything to be > > committed. For initial commit the check would obviously be "is the > > index empty?" instead. > > This is of course very useful optimization, and will speed up things > everywhere (and especially here). Could not stop myself. Hopefully didn't beat anyone to it :) Almost all code shamelessly stolen from builtin-diff-index.c. Builds, runs, passes all the tests. That !active_nr is micro-optimization, but a nice one: clearly don't reread. Preprocessor trickery in DIFF_OPT_* macros is disgusting, it breaks Vim word completion and trying to use many flags in one expression looks just ugly. What was wrong is inline functions? builtin-commit.c | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-) diff --git a/builtin-commit.c b/builtin-commit.c index a35881e..8167ce4 100644 --- a/builtin-commit.c +++ b/builtin-commit.c @@ -367,6 +367,30 @@ static int prepare_log_message(const char *index_file, const char *prefix) strbuf_release(&sb); + if (no_edit) { + static const char *argv[] = { NULL, "HEAD", NULL }; + struct rev_info rev; + unsigned char sha1[40]; + int is_initial; + + fclose(fp); + + if (!active_nr && read_cache() < 0) + die("Cannot read index"); + + if (get_sha1("HEAD", sha1) != 0) + return !!active_nr; + + init_revisions(&rev, ""); + rev.abbrev = 0; + (void)setup_revisions(2, argv, &rev, NULL); + DIFF_OPT_SET(&rev.diffopt, QUIET); + DIFF_OPT_SET(&rev.diffopt, EXIT_WITH_STATUS); + (void)run_diff_index(&rev, 1 /* cached */); + + return !!DIFF_OPT_TST(&rev.diffopt, HAS_CHANGES); + } + if (in_merge && !no_edit) fprintf(fp, "#\n" -- 1.5.3.6.1006.g08f2 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html