Code

notes: refactor display notes default handling
authorJeff King <peff@peff.net>
Tue, 29 Mar 2011 20:57:27 +0000 (16:57 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 29 Mar 2011 21:31:59 +0000 (14:31 -0700)
This is in preparation for more notes-related revision
command-line options.

The "suppress_default_notes" option is renamed to
"use_default_notes", and is now a tri-state with values less
than one indicating "not set".  If the value is "not set",
then we show default refs if and only if no other refs were
given.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
notes.c
notes.h
revision.c

diff --git a/notes.c b/notes.c
index 2ec604c1db4d897eba31debb613d5f965b83ed90..f6ce8489d31e48d30dfbc6aef4edf6dbb8314234 100644 (file)
--- a/notes.c
+++ b/notes.c
@@ -1053,7 +1053,8 @@ void init_display_notes(struct display_notes_opt *opt)
 
        assert(!display_notes_trees);
 
-       if (!opt || !opt->suppress_default_notes) {
+       if (!opt || opt->use_default_notes > 0 ||
+           (opt->use_default_notes == -1 && !opt->extra_notes_refs.nr)) {
                string_list_append(&display_notes_refs, default_notes_ref());
                display_ref_env = getenv(GIT_NOTES_DISPLAY_REF_ENVIRONMENT);
                if (display_ref_env) {
diff --git a/notes.h b/notes.h
index 7ae3eefe060c511bbe7cf7628256a7407c12f1ca..c716694b9e2ec89a59b98d1828fd78f59471e2c4 100644 (file)
--- a/notes.h
+++ b/notes.h
@@ -258,7 +258,7 @@ void format_note(struct notes_tree *t, const unsigned char *object_sha1,
 struct string_list;
 
 struct display_notes_opt {
-       unsigned int suppress_default_notes:1;
+       int use_default_notes;
        struct string_list extra_notes_refs;
 };
 
index 24b89ebfdc17df98292a9299a3dabfac2aa05f02..315a7f43190c307a5271cb1627ec96ff82609882 100644 (file)
@@ -955,6 +955,8 @@ void init_revisions(struct rev_info *revs, const char *prefix)
                revs->diffopt.prefix = prefix;
                revs->diffopt.prefix_length = strlen(prefix);
        }
+
+       revs->notes_opt.use_default_notes = -1;
 }
 
 static void add_pending_commit_list(struct rev_info *revs,
@@ -1368,10 +1370,13 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
        } else if (!strcmp(arg, "--show-notes")) {
                revs->show_notes = 1;
                revs->show_notes_given = 1;
+               revs->notes_opt.use_default_notes = 1;
        } else if (!prefixcmp(arg, "--show-notes=")) {
                struct strbuf buf = STRBUF_INIT;
                revs->show_notes = 1;
                revs->show_notes_given = 1;
+               if (revs->notes_opt.use_default_notes < 0)
+                       revs->notes_opt.use_default_notes = 1;
                strbuf_addstr(&buf, arg+13);
                expand_notes_ref(&buf);
                string_list_append(&revs->notes_opt.extra_notes_refs,
@@ -1381,9 +1386,9 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
                revs->show_notes_given = 1;
        } else if (!strcmp(arg, "--standard-notes")) {
                revs->show_notes_given = 1;
-               revs->notes_opt.suppress_default_notes = 0;
+               revs->notes_opt.use_default_notes = 1;
        } else if (!strcmp(arg, "--no-standard-notes")) {
-               revs->notes_opt.suppress_default_notes = 1;
+               revs->notes_opt.use_default_notes = 0;
        } else if (!strcmp(arg, "--oneline")) {
                revs->verbose_header = 1;
                get_commit_format("oneline", revs);