git-commit: squelch needless message during an empty merge
authorJunio C Hamano <gitster@pobox.com>
Thu, 13 Dec 2007 03:09:16 +0000 (19:09 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 13 Dec 2007 04:50:33 +0000 (20:50 -0800)
When recording a merge that conflicted and ends up in no changes after
manual resolution, commit callchain looked like this:

cmd_commit() ->
            prepare_log_message() ->
                run_status() ->
    wt_status_print()

This invocation of run_status() is asked to find out if there is a
committable change, but it unconditionally gave instructions such as
"use git-add" at the same time.  When in merge, we do allow an empty
change to be recorded, so after showing this message the code still went
ahead and made a commit.

This introduces "nowarn" parameter to run_status() to avoid these
useless messages.  If we are not allowed to create an empty commit, we
already call run_status() again in the original codepath, and the
message will be shown from that call anyway.

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

index 9cb7589ac68172591ae458a20031e7dedd65adee..ad9f9211b39af6cc7d1f319b6a8da7c514a33f12 100644 (file)
@@ -280,7 +280,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix)
        return false_lock.filename;
 }
 
-static int run_status(FILE *fp, const char *index_file, const char *prefix)
+static int run_status(FILE *fp, const char *index_file, const char *prefix, int nowarn)
 {
        struct wt_status s;
 
@@ -296,6 +296,7 @@ static int run_status(FILE *fp, const char *index_file, const char *prefix)
        s.untracked = untracked_files;
        s.index_file = index_file;
        s.fp = fp;
+       s.nowarn = nowarn;
 
        wt_status_print(&s);
 
@@ -412,7 +413,7 @@ static int prepare_log_message(const char *index_file, const char *prefix)
 
        saved_color_setting = wt_status_use_color;
        wt_status_use_color = 0;
-       commitable = run_status(fp, index_file, prefix);
+       commitable = run_status(fp, index_file, prefix, 1);
        wt_status_use_color = saved_color_setting;
 
        fclose(fp);
@@ -606,7 +607,7 @@ int cmd_status(int argc, const char **argv, const char *prefix)
 
        index_file = prepare_index(argc, argv, prefix);
 
-       commitable = run_status(stdout, index_file, prefix);
+       commitable = run_status(stdout, index_file, prefix, 0);
 
        rollback_index_files();
 
@@ -717,7 +718,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
 
        if (!prepare_log_message(index_file, prefix) && !in_merge &&
            !allow_empty && !(amend && is_a_merge(head_sha1))) {
-               run_status(stdout, index_file, prefix);
+               run_status(stdout, index_file, prefix, 0);
                rollback_index_files();
                unlink(commit_editmsg);
                return 1;
index 51c18796915c0a9e052806eadd460b0f9afa7fee..c0c247243b562a7579ff780b80dffef4774b60a9 100644 (file)
@@ -381,6 +381,8 @@ void wt_status_print(struct wt_status *s)
        if (!s->commitable) {
                if (s->amend)
                        fprintf(s->fp, "# No changes\n");
+               else if (s->nowarn)
+                       ; /* nothing */
                else if (s->workdir_dirty)
                        printf("no changes added to commit (use \"git add\" and/or \"git commit -a\")\n");
                else if (s->workdir_untracked)
index 63d50f2871f51d4363afa2f7bbb21c81186b9f44..02afaa60eee74018e074a4dcb3bec97c2e0ce9dc 100644 (file)
@@ -17,6 +17,7 @@ struct wt_status {
        int verbose;
        int amend;
        int untracked;
+       int nowarn;
        /* These are computed during processing of the individual sections */
        int commitable;
        int workdir_dirty;