aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--builtin/log.c7
-rw-r--r--notes.c43
-rw-r--r--notes.h19
-rw-r--r--revision.c6
-rw-r--r--revision.h2
5 files changed, 45 insertions, 32 deletions
diff --git a/builtin/log.c b/builtin/log.c
index 4225615e7f..b6d43a4a47 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -868,7 +868,12 @@ static int git_format_config(const char *var, const char *value, void *cb)
}
if (!strcmp(var, "format.notes")) {
int b = git_parse_maybe_bool(value);
- show_notes = set_display_notes(&notes_opt, b, b < 0 ? value : NULL);
+ if (b < 0)
+ enable_ref_display_notes(&notes_opt, &show_notes, value);
+ else if (b)
+ enable_default_display_notes(&notes_opt, &show_notes);
+ else
+ disable_display_notes(&notes_opt, &show_notes);
return 0;
}
diff --git a/notes.c b/notes.c
index c93feff4ab..3133bb181f 100644
--- a/notes.c
+++ b/notes.c
@@ -1045,28 +1045,31 @@ void init_display_notes(struct display_notes_opt *opt)
opt->use_default_notes = -1;
}
-int set_display_notes(struct display_notes_opt *opt, int show_notes, const char *opt_ref)
+void enable_default_display_notes(struct display_notes_opt *opt, int *show_notes)
{
- if (show_notes) {
- if (opt_ref) {
- struct strbuf buf = STRBUF_INIT;
- strbuf_addstr(&buf, opt_ref);
- expand_notes_ref(&buf);
- string_list_append(&opt->extra_notes_refs,
- strbuf_detach(&buf, NULL));
- } else {
- opt->use_default_notes = 1;
- }
- } else {
- opt->use_default_notes = -1;
- /* we have been strdup'ing ourselves, so trick
- * string_list into free()ing strings */
- opt->extra_notes_refs.strdup_strings = 1;
- string_list_clear(&opt->extra_notes_refs, 0);
- opt->extra_notes_refs.strdup_strings = 0;
- }
+ opt->use_default_notes = 1;
+ *show_notes = 1;
+}
- return !!show_notes;
+void enable_ref_display_notes(struct display_notes_opt *opt, int *show_notes,
+ const char *ref) {
+ struct strbuf buf = STRBUF_INIT;
+ strbuf_addstr(&buf, ref);
+ expand_notes_ref(&buf);
+ string_list_append(&opt->extra_notes_refs,
+ strbuf_detach(&buf, NULL));
+ *show_notes = 1;
+}
+
+void disable_display_notes(struct display_notes_opt *opt, int *show_notes)
+{
+ opt->use_default_notes = -1;
+ /* we have been strdup'ing ourselves, so trick
+ * string_list into free()ing strings */
+ opt->extra_notes_refs.strdup_strings = 1;
+ string_list_clear(&opt->extra_notes_refs, 0);
+ opt->extra_notes_refs.strdup_strings = 0;
+ *show_notes = 0;
}
void load_display_notes(struct display_notes_opt *opt)
diff --git a/notes.h b/notes.h
index a476bfa066..3e78448181 100644
--- a/notes.h
+++ b/notes.h
@@ -266,14 +266,19 @@ struct display_notes_opt {
void init_display_notes(struct display_notes_opt *opt);
/*
- * Set a display_notes_opt to a given state. 'show_notes' is a boolean
- * representing whether or not to show notes. 'opt_ref' points to a
- * string for the notes ref, or is NULL if the default notes should be
- * used.
- *
- * Return 'show_notes' normalized to 1 or 0.
+ * This family of functions enables or disables the display of notes. In
+ * particular, 'enable_default_display_notes' will display the default notes,
+ * 'enable_default_display_notes' will display the notes ref 'ref' and
+ * 'disable_display_notes' will disable notes, including those added by previous
+ * invocations of the 'enable_*_display_notes' functions.
+ *
+ * 'show_notes' is a points to a boolean which will be set to 1 if notes are
+ * displayed, else 0. It must not be NULL.
*/
-int set_display_notes(struct display_notes_opt *opt, int show_notes, const char *opt_ref);
+void enable_default_display_notes(struct display_notes_opt *opt, int *show_notes);
+void enable_ref_display_notes(struct display_notes_opt *opt, int *show_notes,
+ const char *ref);
+void disable_display_notes(struct display_notes_opt *opt, int *show_notes);
/*
* Load the notes machinery for displaying several notes trees.
diff --git a/revision.c b/revision.c
index c2d8d24939..1b12ed742b 100644
--- a/revision.c
+++ b/revision.c
@@ -2172,7 +2172,7 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
die("'%s': not a non-negative integer", arg);
revs->expand_tabs_in_log = val;
} else if (!strcmp(arg, "--show-notes") || !strcmp(arg, "--notes")) {
- revs->show_notes = set_display_notes(&revs->notes_opt, 1, NULL);
+ enable_default_display_notes(&revs->notes_opt, &revs->show_notes);
revs->show_notes_given = 1;
} else if (!strcmp(arg, "--show-signature")) {
revs->show_signature = 1;
@@ -2191,10 +2191,10 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
if (starts_with(arg, "--show-notes=") &&
revs->notes_opt.use_default_notes < 0)
revs->notes_opt.use_default_notes = 1;
- revs->show_notes = set_display_notes(&revs->notes_opt, 1, optarg);
+ enable_ref_display_notes(&revs->notes_opt, &revs->show_notes, optarg);
revs->show_notes_given = 1;
} else if (!strcmp(arg, "--no-notes")) {
- revs->show_notes = set_display_notes(&revs->notes_opt, 0, NULL);
+ disable_display_notes(&revs->notes_opt, &revs->show_notes);
revs->show_notes_given = 1;
} else if (!strcmp(arg, "--standard-notes")) {
revs->show_notes_given = 1;
diff --git a/revision.h b/revision.h
index 4134dc6029..72520780f4 100644
--- a/revision.h
+++ b/revision.h
@@ -177,10 +177,10 @@ struct rev_info {
always_show_header:1;
/* Format info */
+ int show_notes;
unsigned int shown_one:1,
shown_dashes:1,
show_merge:1,
- show_notes:1,
show_notes_given:1,
show_signature:1,
pretty_given:1,