From 03bb5789cd97de989897e1c9de71a2831ada0544 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Tue, 29 Mar 2011 16:55:32 -0400 Subject: notes: make expand_notes_ref globally accessible This function is useful for other commands besides "git notes" which want to let users refer to notes by their shorthand name. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- notes.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'notes.c') diff --git a/notes.c b/notes.c index a013c1bc63..f6b9b6a72a 100644 --- a/notes.c +++ b/notes.c @@ -1285,3 +1285,13 @@ int copy_note(struct notes_tree *t, return 0; } + +void expand_notes_ref(struct strbuf *sb) +{ + if (!prefixcmp(sb->buf, "refs/notes/")) + return; /* we're happy */ + else if (!prefixcmp(sb->buf, "notes/")) + strbuf_insert(sb, 0, "refs/", 5); + else + strbuf_insert(sb, 0, "refs/notes/", 11); +} -- cgit v1.2.3 From 304cc11c6566cf22e811aa791988c61b6d291973 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Tue, 29 Mar 2011 16:56:53 -0400 Subject: notes: refactor display notes extra refs field There's no need to use an extra pointer, which just ends up leaking memory. The fact that the list is empty tells us the same thing. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- notes.c | 4 ++-- notes.h | 4 +++- revision.c | 4 +--- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'notes.c') diff --git a/notes.c b/notes.c index f6b9b6a72a..2ec604c1db 100644 --- a/notes.c +++ b/notes.c @@ -1066,9 +1066,9 @@ void init_display_notes(struct display_notes_opt *opt) git_config(notes_display_config, &load_config_refs); - if (opt && opt->extra_notes_refs) { + if (opt) { struct string_list_item *item; - for_each_string_list_item(item, opt->extra_notes_refs) + for_each_string_list_item(item, &opt->extra_notes_refs) string_list_add_refs_by_glob(&display_notes_refs, item->string); } diff --git a/notes.h b/notes.h index 60bdf289a3..7ae3eefe06 100644 --- a/notes.h +++ b/notes.h @@ -1,6 +1,8 @@ #ifndef NOTES_H #define NOTES_H +#include "string-list.h" + /* * Function type for combining two notes annotating the same object. * @@ -257,7 +259,7 @@ struct string_list; struct display_notes_opt { unsigned int suppress_default_notes:1; - struct string_list *extra_notes_refs; + struct string_list extra_notes_refs; }; /* diff --git a/revision.c b/revision.c index 5826e5d599..24b89ebfdc 100644 --- a/revision.c +++ b/revision.c @@ -1372,11 +1372,9 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg struct strbuf buf = STRBUF_INIT; revs->show_notes = 1; revs->show_notes_given = 1; - if (!revs->notes_opt.extra_notes_refs) - revs->notes_opt.extra_notes_refs = xcalloc(1, sizeof(struct string_list)); strbuf_addstr(&buf, arg+13); expand_notes_ref(&buf); - string_list_append(revs->notes_opt.extra_notes_refs, + string_list_append(&revs->notes_opt.extra_notes_refs, strbuf_detach(&buf, NULL)); } else if (!strcmp(arg, "--no-notes")) { revs->show_notes = 0; -- cgit v1.2.3 From 3a03cf6b1d1cf5d05edec1781446a26782eaff09 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Tue, 29 Mar 2011 16:57:27 -0400 Subject: notes: refactor display notes default handling 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 Signed-off-by: Junio C Hamano --- notes.c | 3 ++- notes.h | 2 +- revision.c | 9 +++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) (limited to 'notes.c') diff --git a/notes.c b/notes.c index 2ec604c1db..f6ce8489d3 100644 --- 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 7ae3eefe06..c716694b9e 100644 --- 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; }; diff --git a/revision.c b/revision.c index 24b89ebfdc..315a7f4319 100644 --- a/revision.c +++ b/revision.c @@ -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); -- cgit v1.2.3