git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH] revision.c: introduce --notes-ref= to use one notes ref only
@ 2011-03-29 10:05 Michael J Gruber
  2011-03-29 12:39 ` Johan Herland
  2011-03-29 14:35 ` [PATCH] revision.c: introduce --notes-ref= to use one notes ref only Jeff King
  0 siblings, 2 replies; 23+ messages in thread
From: Michael J Gruber @ 2011-03-29 10:05 UTC (permalink / raw
  To: git; +Cc: Junio C Hamano, Johan Herland

As notes become increasingly popular, it's often interesting to show
notes from a particular notes ref only. Introduce '--notes-ref=<ref>'
as a convenience shortcut for '--no-standard-notes --show-notes=<ref>'.

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
---
The idea is to use the same name as in "git notes --ref=<ref>" but make
it clear for the rev-list option to be about notes, thus "--notes-ref=<ref>".

 Documentation/git-log.txt        |    3 ++-
 Documentation/pretty-options.txt |    4 ++++
 revision.c                       |   15 +++++++++++----
 t/t3301-notes.sh                 |    5 +++++
 4 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt
index 2c84028..56ffccd 100644
--- a/Documentation/git-log.txt
+++ b/Documentation/git-log.txt
@@ -179,7 +179,8 @@ multiple times.  A warning will be issued for refs that do not exist,
 but a glob that does not match any refs is silently ignored.
 +
 This setting can be disabled by the `--no-standard-notes` option,
-overridden by the 'GIT_NOTES_DISPLAY_REF' environment variable,
+overridden by the 'GIT_NOTES_DISPLAY_REF' environment variable
+or the `--notes-ref` option,
 and supplemented by the `--show-notes` option.
 
 GIT
diff --git a/Documentation/pretty-options.txt b/Documentation/pretty-options.txt
index 50923e2..ef5eed4 100644
--- a/Documentation/pretty-options.txt
+++ b/Documentation/pretty-options.txt
@@ -46,3 +46,7 @@ is taken to be in `refs/notes/` if it is not qualified.
 	'core.notesRef' and 'notes.displayRef' variables (or
 	corresponding environment overrides).  Enabled by default.
 	See linkgit:git-config[1].
+
+--notes-ref[=<ref>]::
+	This is the same as `--no-standard-notes --show-notes=<ref>`,
+	i.e. it shows only the notes from the notes tree at `<ref>`.
diff --git a/revision.c b/revision.c
index 0f38364..d620926 100644
--- a/revision.c
+++ b/revision.c
@@ -1368,19 +1368,26 @@ 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;
-	} else if (!prefixcmp(arg, "--show-notes=")) {
+	} else if (!prefixcmp(arg, "--show-notes=") || !prefixcmp(arg, "--notes-ref=")) {
 		struct strbuf buf = STRBUF_INIT;
+		int offset = strlen("--show-notes=");
 		revs->show_notes = 1;
 		revs->show_notes_given = 1;
+		if (!prefixcmp(arg, "--notes-ref=")) {
+			offset = strlen("--notes-ref=");
+			if (revs->notes_opt.extra_notes_refs)
+				string_list_clear(revs->notes_opt.extra_notes_refs, 0);
+			revs->notes_opt.suppress_default_notes = 1;
+		}
 		if (!revs->notes_opt.extra_notes_refs)
 			revs->notes_opt.extra_notes_refs = xcalloc(1, sizeof(struct string_list));
-		if (!prefixcmp(arg+13, "refs/"))
+		if (!prefixcmp(arg+offset, "refs/"))
 			/* happy */;
-		else if (!prefixcmp(arg+13, "notes/"))
+		else if (!prefixcmp(arg+offset, "notes/"))
 			strbuf_addstr(&buf, "refs/");
 		else
 			strbuf_addstr(&buf, "refs/notes/");
-		strbuf_addstr(&buf, arg+13);
+		strbuf_addstr(&buf, arg+offset);
 		string_list_append(revs->notes_opt.extra_notes_refs,
 				   strbuf_detach(&buf, NULL));
 	} else if (!strcmp(arg, "--no-notes")) {
diff --git a/t/t3301-notes.sh b/t/t3301-notes.sh
index 1921ca3..3fcfdc7 100755
--- a/t/t3301-notes.sh
+++ b/t/t3301-notes.sh
@@ -625,6 +625,11 @@ test_expect_success '--show-notes=ref accumulates' '
 	test_cmp expect-both-reversed output
 '
 
+test_expect_success '--notes-ref=' '
+	git log --notes-ref=other -1 > output &&
+	test_cmp expect-other output
+'
+
 test_expect_success 'Allow notes on non-commits (trees, blobs, tags)' '
 	git config core.notesRef refs/notes/other &&
 	echo "Note on a tree" > expect &&
-- 
1.7.4.1.607.g888da

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH] revision.c: introduce --notes-ref= to use one notes ref only
  2011-03-29 10:05 [PATCH] revision.c: introduce --notes-ref= to use one notes ref only Michael J Gruber
@ 2011-03-29 12:39 ` Johan Herland
  2011-03-29 14:33   ` Jeff King
  2011-03-29 14:35 ` [PATCH] revision.c: introduce --notes-ref= to use one notes ref only Jeff King
  1 sibling, 1 reply; 23+ messages in thread
From: Johan Herland @ 2011-03-29 12:39 UTC (permalink / raw
  To: Michael J Gruber; +Cc: git, Junio C Hamano

On Tuesday 29 March 2011, Michael J Gruber wrote:
> As notes become increasingly popular, it's often interesting to show
> notes from a particular notes ref only. Introduce '--notes-ref=<ref>'
> as a convenience shortcut for '--no-standard-notes
> --show-notes=<ref>'.
>
> Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
> ---
> The idea is to use the same name as in "git notes --ref=<ref>" but
> make it clear for the rev-list option to be about notes, thus
> "--notes-ref=<ref>".

The idea and implementation look good to me. Not sure I like the 
option "bloat" (somehow feels it should be possible to express the same 
behavior using fewer options), but if there's not a better way to 
reorganize the options, then you can consider it Acked-by me.


Thanks! :)

...Johan

-- 
Johan Herland, <johan@herland.net>
www.herland.net

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH] revision.c: introduce --notes-ref= to use one notes ref only
  2011-03-29 12:39 ` Johan Herland
@ 2011-03-29 14:33   ` Jeff King
  2011-03-29 15:16     ` Michael J Gruber
  2011-03-29 18:32     ` Junio C Hamano
  0 siblings, 2 replies; 23+ messages in thread
From: Jeff King @ 2011-03-29 14:33 UTC (permalink / raw
  To: Johan Herland; +Cc: Michael J Gruber, git, Junio C Hamano

On Tue, Mar 29, 2011 at 02:39:17PM +0200, Johan Herland wrote:

> On Tuesday 29 March 2011, Michael J Gruber wrote:
> > As notes become increasingly popular, it's often interesting to show
> > notes from a particular notes ref only. Introduce '--notes-ref=<ref>'
> > as a convenience shortcut for '--no-standard-notes
> > --show-notes=<ref>'.
> >
> > Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
> > ---
> > The idea is to use the same name as in "git notes --ref=<ref>" but
> > make it clear for the rev-list option to be about notes, thus
> > "--notes-ref=<ref>".
> 
> The idea and implementation look good to me. Not sure I like the 
> option "bloat" (somehow feels it should be possible to express the same 
> behavior using fewer options), but if there's not a better way to 
> reorganize the options, then you can consider it Acked-by me.

I feel this would be more consistent with most other options that take
an optional argument:

  1. "--show-notes" uses default refs

  2. "--show-notes=<ref>" shows _just_ <ref>, no defaults

  3. "--show-notes=<ref1> --show-notes=<ref2>" shows <ref1> and <ref2>

  4. (Probably) "--show-notes --show-notes=<ref>" should show default
     refs and <ref>. This is the one I'm least sure of, as it leaves no
     way to override what came earlier on the command line (which is
     useful if, for example, we end up with Michael's proposed ui.log).
     Perhaps "--no-notes" would reset, so:

       --show-notes --no-notes --show-notes=<ref>

     would be equivalent to:

       --show-notes=<ref>

Of course a total behavior change of what --show-notes currently does.

Speaking of which, it is kind of weird that --show-notes is negated by
--no-notes. So maybe it makes sense to introduce "--notes[=<ref>]" to do
what I wrote above, and deprecate --show-notes.

-Peff

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH] revision.c: introduce --notes-ref= to use one notes ref only
  2011-03-29 10:05 [PATCH] revision.c: introduce --notes-ref= to use one notes ref only Michael J Gruber
  2011-03-29 12:39 ` Johan Herland
@ 2011-03-29 14:35 ` Jeff King
  2011-03-29 19:01   ` Jeff King
  1 sibling, 1 reply; 23+ messages in thread
From: Jeff King @ 2011-03-29 14:35 UTC (permalink / raw
  To: Michael J Gruber; +Cc: git, Junio C Hamano, Johan Herland

On Tue, Mar 29, 2011 at 12:05:09PM +0200, Michael J Gruber wrote:

> -		if (!prefixcmp(arg+13, "refs/"))
> +		if (!prefixcmp(arg+offset, "refs/"))
>  			/* happy */;
> -		else if (!prefixcmp(arg+13, "notes/"))
> +		else if (!prefixcmp(arg+offset, "notes/"))
>  			strbuf_addstr(&buf, "refs/");
>  		else
>  			strbuf_addstr(&buf, "refs/notes/");
> -		strbuf_addstr(&buf, arg+13);
> +		strbuf_addstr(&buf, arg+offset);
>  		string_list_append(revs->notes_opt.extra_notes_refs,
>  				   strbuf_detach(&buf, NULL));

This issue is not introduced by your patch, but maybe it is a good
opportunity to refactor this to use expand_notes_ref from notes.c?

-Peff

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH] revision.c: introduce --notes-ref= to use one notes ref only
  2011-03-29 14:33   ` Jeff King
@ 2011-03-29 15:16     ` Michael J Gruber
  2011-03-29 18:32     ` Junio C Hamano
  1 sibling, 0 replies; 23+ messages in thread
From: Michael J Gruber @ 2011-03-29 15:16 UTC (permalink / raw
  To: Jeff King; +Cc: Johan Herland, git, Junio C Hamano

Jeff King venit, vidit, dixit 29.03.2011 16:33:
> On Tue, Mar 29, 2011 at 02:39:17PM +0200, Johan Herland wrote:
> 
>> On Tuesday 29 March 2011, Michael J Gruber wrote:
>>> As notes become increasingly popular, it's often interesting to show
>>> notes from a particular notes ref only. Introduce '--notes-ref=<ref>'
>>> as a convenience shortcut for '--no-standard-notes
>>> --show-notes=<ref>'.
>>>
>>> Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
>>> ---
>>> The idea is to use the same name as in "git notes --ref=<ref>" but
>>> make it clear for the rev-list option to be about notes, thus
>>> "--notes-ref=<ref>".
>>
>> The idea and implementation look good to me. Not sure I like the 
>> option "bloat" (somehow feels it should be possible to express the same 
>> behavior using fewer options), but if there's not a better way to 
>> reorganize the options, then you can consider it Acked-by me.
> 
> I feel this would be more consistent with most other options that take
> an optional argument:
> 
>   1. "--show-notes" uses default refs
> 
>   2. "--show-notes=<ref>" shows _just_ <ref>, no defaults
> 
>   3. "--show-notes=<ref1> --show-notes=<ref2>" shows <ref1> and <ref2>
> 
>   4. (Probably) "--show-notes --show-notes=<ref>" should show default
>      refs and <ref>. This is the one I'm least sure of, as it leaves no
>      way to override what came earlier on the command line (which is
>      useful if, for example, we end up with Michael's proposed ui.log).

My "git log" shows notes from ref/notes/commits by default without alias
or config, and that is what I want to override per command (to show
Thomas' notes, e.g.).

>      Perhaps "--no-notes" would reset, so:
> 
>        --show-notes --no-notes --show-notes=<ref>
> 
>      would be equivalent to:
> 
>        --show-notes=<ref>
> 
> Of course a total behavior change of what --show-notes currently does.

I somehow stopped proposing behavior changes. Guess why? (I know I have
my occasional relapse, but still...)

> 
> Speaking of which, it is kind of weird that --show-notes is negated by
> --no-notes. So maybe it makes sense to introduce "--notes[=<ref>]" to do
> what I wrote above, and deprecate --show-notes.

Also, "git notes" has "--ref". Maybe this (which may be what you
proposed above):

--notes: show standard notes
--notes=<ref>: show notes from <ref> only
--notes --notes=<ref>: show standard notes + those from <ref>
(i.e., if any notes argument was given they accumulate; a single
argument does not add to, but replaces the default)
--no-notes: you guess it

One could deprecate --[no-]stand-notes as well, then.

Changing status "PATCH" back to "PATCH/RFC"...

Michael

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH] revision.c: introduce --notes-ref= to use one notes ref only
  2011-03-29 14:33   ` Jeff King
  2011-03-29 15:16     ` Michael J Gruber
@ 2011-03-29 18:32     ` Junio C Hamano
  2011-03-29 20:53       ` Jeff King
  1 sibling, 1 reply; 23+ messages in thread
From: Junio C Hamano @ 2011-03-29 18:32 UTC (permalink / raw
  To: Jeff King; +Cc: Johan Herland, Michael J Gruber, git, Junio C Hamano

Jeff King <peff@peff.net> writes:

> Speaking of which, it is kind of weird that --show-notes is negated by
> --no-notes. So maybe it makes sense to introduce "--notes[=<ref>]" to do
> what I wrote above, and deprecate --show-notes.

I think that is sensible.

I personally think that "notes" are way too premature to be used seriously
by normal people yet, and if we want to fix UI and semantics warts (it is
understandable if we had plenty of them, simply because we didn't know
enough about possible use cases during the period we prototyped the notes
feature), the time to do so is now.

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH] revision.c: introduce --notes-ref= to use one notes ref only
  2011-03-29 14:35 ` [PATCH] revision.c: introduce --notes-ref= to use one notes ref only Jeff King
@ 2011-03-29 19:01   ` Jeff King
  2011-03-29 19:48     ` Michael J Gruber
  0 siblings, 1 reply; 23+ messages in thread
From: Jeff King @ 2011-03-29 19:01 UTC (permalink / raw
  To: Michael J Gruber; +Cc: git, Junio C Hamano, Johan Herland

On Tue, Mar 29, 2011 at 10:35:47AM -0400, Jeff King wrote:

> On Tue, Mar 29, 2011 at 12:05:09PM +0200, Michael J Gruber wrote:
> 
> > -		if (!prefixcmp(arg+13, "refs/"))
> > +		if (!prefixcmp(arg+offset, "refs/"))
> >  			/* happy */;
> > -		else if (!prefixcmp(arg+13, "notes/"))
> > +		else if (!prefixcmp(arg+offset, "notes/"))
> >  			strbuf_addstr(&buf, "refs/");
> >  		else
> >  			strbuf_addstr(&buf, "refs/notes/");
> > -		strbuf_addstr(&buf, arg+13);
> > +		strbuf_addstr(&buf, arg+offset);
> >  		string_list_append(revs->notes_opt.extra_notes_refs,
> >  				   strbuf_detach(&buf, NULL));
> 
> This issue is not introduced by your patch, but maybe it is a good
> opportunity to refactor this to use expand_notes_ref from notes.c?

Oops, I just realized this is in builtin/notes.c in master. I had
already written a patch for another topic that made it globally
accessible. :)

-Peff

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH] revision.c: introduce --notes-ref= to use one notes ref only
  2011-03-29 19:01   ` Jeff King
@ 2011-03-29 19:48     ` Michael J Gruber
  2011-03-29 20:23       ` Jeff King
  0 siblings, 1 reply; 23+ messages in thread
From: Michael J Gruber @ 2011-03-29 19:48 UTC (permalink / raw
  To: Jeff King; +Cc: git, Junio C Hamano, Johan Herland

Jeff King venit, vidit, dixit 29.03.2011 21:01:
> On Tue, Mar 29, 2011 at 10:35:47AM -0400, Jeff King wrote:
> 
>> On Tue, Mar 29, 2011 at 12:05:09PM +0200, Michael J Gruber wrote:
>>
>>> -		if (!prefixcmp(arg+13, "refs/"))
>>> +		if (!prefixcmp(arg+offset, "refs/"))
>>>  			/* happy */;
>>> -		else if (!prefixcmp(arg+13, "notes/"))
>>> +		else if (!prefixcmp(arg+offset, "notes/"))
>>>  			strbuf_addstr(&buf, "refs/");
>>>  		else
>>>  			strbuf_addstr(&buf, "refs/notes/");
>>> -		strbuf_addstr(&buf, arg+13);
>>> +		strbuf_addstr(&buf, arg+offset);
>>>  		string_list_append(revs->notes_opt.extra_notes_refs,
>>>  				   strbuf_detach(&buf, NULL));
>>
>> This issue is not introduced by your patch, but maybe it is a good
>> opportunity to refactor this to use expand_notes_ref from notes.c?
> 
> Oops, I just realized this is in builtin/notes.c in master. I had
> already written a patch for another topic that made it globally
> accessible. :)

Yeah, I (figured and) factored it out myself meanwhile, and rebased. I'm
wondering though where we are going. Junio seems to be in a mood for
major changes to the notes ui, so maybe I should hold on until we
decided about a ui restructuring.

I think, though, that any notes ui revamp is correlated with our
(stalled?) discussions about the layout of refs/. It affects not only
the default notes ref ("commits" for all notes?) but also the question
what a standard notes ref is, and where to store (and how to specify)
upstream notes refs.

Michael

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH] revision.c: introduce --notes-ref= to use one notes ref only
  2011-03-29 19:48     ` Michael J Gruber
@ 2011-03-29 20:23       ` Jeff King
  0 siblings, 0 replies; 23+ messages in thread
From: Jeff King @ 2011-03-29 20:23 UTC (permalink / raw
  To: Michael J Gruber; +Cc: git, Junio C Hamano, Johan Herland

On Tue, Mar 29, 2011 at 09:48:34PM +0200, Michael J Gruber wrote:

> >> This issue is not introduced by your patch, but maybe it is a good
> >> opportunity to refactor this to use expand_notes_ref from notes.c?
> > 
> > Oops, I just realized this is in builtin/notes.c in master. I had
> > already written a patch for another topic that made it globally
> > accessible. :)
> 
> Yeah, I (figured and) factored it out myself meanwhile, and rebased. I'm
> wondering though where we are going. Junio seems to be in a mood for
> major changes to the notes ui, so maybe I should hold on until we
> decided about a ui restructuring.

I have a series I'll send in a few minutes. It _would_ be a lot cleaner
if we just dropped --show-notes and company entirely, but I think that
is perhaps too aggressive, even for such a young feature.

> I think, though, that any notes ui revamp is correlated with our
> (stalled?) discussions about the layout of refs/. It affects not only
> the default notes ref ("commits" for all notes?) but also the question
> what a standard notes ref is, and where to store (and how to specify)
> upstream notes refs.

Yeah, I think those are open questions. But we can probably get away
with at least this option refactoring without having to answer them.

-Peff

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH] revision.c: introduce --notes-ref= to use one notes ref only
  2011-03-29 18:32     ` Junio C Hamano
@ 2011-03-29 20:53       ` Jeff King
  2011-03-29 20:55         ` [PATCH 1/6] notes: make expand_notes_ref globally accessible Jeff King
                           ` (6 more replies)
  0 siblings, 7 replies; 23+ messages in thread
From: Jeff King @ 2011-03-29 20:53 UTC (permalink / raw
  To: Junio C Hamano; +Cc: Johan Herland, Michael J Gruber, git

On Tue, Mar 29, 2011 at 11:32:24AM -0700, Junio C Hamano wrote:

> Jeff King <peff@peff.net> writes:
> 
> > Speaking of which, it is kind of weird that --show-notes is negated by
> > --no-notes. So maybe it makes sense to introduce "--notes[=<ref>]" to do
> > what I wrote above, and deprecate --show-notes.
> 
> I think that is sensible.
> 
> I personally think that "notes" are way too premature to be used seriously
> by normal people yet, and if we want to fix UI and semantics warts (it is
> understandable if we had plenty of them, simply because we didn't know
> enough about possible use cases during the period we prototyped the notes
> feature), the time to do so is now.

It is tempting to kill off --show-notes and --standard-notes, as it
would clean up this code a bit. But even though they are probably not
being seriously used by normal people, they have been in several
released versions.

Here's the series I ended up with. Getting the refactoring just right
turned out to be non-trivial, but between several attempts and some
tests, I think the end result is correct. Hopefully the breakdown of the
changes into small patches helps make it easy to review.

  [1/6]: notes: make expand_notes_ref globally accessible
  [2/6]: revision.c: refactor notes ref expansion
  [3/6]: notes: refactor display notes extra refs field
  [4/6]: notes: refactor display notes default handling
  [5/6]: revision.c: support --notes command-line option
  [6/6]: revision.c: make --no-notes reset --notes list

-Peff

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [PATCH 1/6] notes: make expand_notes_ref globally accessible
  2011-03-29 20:53       ` Jeff King
@ 2011-03-29 20:55         ` Jeff King
  2011-03-29 20:56         ` [PATCH 2/6] revision.c: refactor notes ref expansion Jeff King
                           ` (5 subsequent siblings)
  6 siblings, 0 replies; 23+ messages in thread
From: Jeff King @ 2011-03-29 20:55 UTC (permalink / raw
  To: Junio C Hamano; +Cc: Johan Herland, Michael J Gruber, git

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 <peff@peff.net>
---
 builtin/notes.c |   10 ----------
 notes.c         |   10 ++++++++++
 notes.h         |    3 +++
 3 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/builtin/notes.c b/builtin/notes.c
index a0f310b..6227607 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -100,16 +100,6 @@ struct msg_arg {
 	struct strbuf buf;
 };
 
-static 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);
-}
-
 static int list_each_note(const unsigned char *object_sha1,
 		const unsigned char *note_sha1, char *note_path,
 		void *cb_data)
diff --git a/notes.c b/notes.c
index a013c1b..f6b9b6a 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);
+}
diff --git a/notes.h b/notes.h
index 83bd6e0..60bdf28 100644
--- a/notes.h
+++ b/notes.h
@@ -307,4 +307,7 @@ void string_list_add_refs_by_glob(struct string_list *list, const char *glob);
 void string_list_add_refs_from_colon_sep(struct string_list *list,
 					 const char *globs);
 
+/* Expand inplace a note ref like "foo" or "notes/foo" into "refs/notes/foo" */
+void expand_notes_ref(struct strbuf *sb);
+
 #endif
-- 
1.7.4.2.7.g9407

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 2/6] revision.c: refactor notes ref expansion
  2011-03-29 20:53       ` Jeff King
  2011-03-29 20:55         ` [PATCH 1/6] notes: make expand_notes_ref globally accessible Jeff King
@ 2011-03-29 20:56         ` Jeff King
  2011-03-29 20:56         ` [PATCH 3/6] notes: refactor display notes extra refs field Jeff King
                           ` (4 subsequent siblings)
  6 siblings, 0 replies; 23+ messages in thread
From: Jeff King @ 2011-03-29 20:56 UTC (permalink / raw
  To: Junio C Hamano; +Cc: Johan Herland, Michael J Gruber, git

No need to do it ourselves when there is a library function.

Signed-off-by: Jeff King <peff@peff.net>
---
 revision.c |    7 +------
 1 files changed, 1 insertions(+), 6 deletions(-)

diff --git a/revision.c b/revision.c
index 0f38364..5826e5d 100644
--- a/revision.c
+++ b/revision.c
@@ -1374,13 +1374,8 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
 		revs->show_notes_given = 1;
 		if (!revs->notes_opt.extra_notes_refs)
 			revs->notes_opt.extra_notes_refs = xcalloc(1, sizeof(struct string_list));
-		if (!prefixcmp(arg+13, "refs/"))
-			/* happy */;
-		else if (!prefixcmp(arg+13, "notes/"))
-			strbuf_addstr(&buf, "refs/");
-		else
-			strbuf_addstr(&buf, "refs/notes/");
 		strbuf_addstr(&buf, arg+13);
+		expand_notes_ref(&buf);
 		string_list_append(revs->notes_opt.extra_notes_refs,
 				   strbuf_detach(&buf, NULL));
 	} else if (!strcmp(arg, "--no-notes")) {
-- 
1.7.4.2.7.g9407

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 3/6] notes: refactor display notes extra refs field
  2011-03-29 20:53       ` Jeff King
  2011-03-29 20:55         ` [PATCH 1/6] notes: make expand_notes_ref globally accessible Jeff King
  2011-03-29 20:56         ` [PATCH 2/6] revision.c: refactor notes ref expansion Jeff King
@ 2011-03-29 20:56         ` Jeff King
  2011-03-29 20:57         ` [PATCH 4/6] notes: refactor display notes default handling Jeff King
                           ` (3 subsequent siblings)
  6 siblings, 0 replies; 23+ messages in thread
From: Jeff King @ 2011-03-29 20:56 UTC (permalink / raw
  To: Junio C Hamano; +Cc: Johan Herland, Michael J Gruber, git

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 <peff@peff.net>
---
 notes.c    |    4 ++--
 notes.h    |    4 +++-
 revision.c |    4 +---
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/notes.c b/notes.c
index f6b9b6a..2ec604c 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 60bdf28..7ae3eef 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 5826e5d..24b89eb 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;
-- 
1.7.4.2.7.g9407

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 4/6] notes: refactor display notes default handling
  2011-03-29 20:53       ` Jeff King
                           ` (2 preceding siblings ...)
  2011-03-29 20:56         ` [PATCH 3/6] notes: refactor display notes extra refs field Jeff King
@ 2011-03-29 20:57         ` Jeff King
  2011-03-29 22:02           ` Junio C Hamano
  2011-03-29 20:57         ` [PATCH 5/6] revision.c: support --notes command-line option Jeff King
                           ` (2 subsequent siblings)
  6 siblings, 1 reply; 23+ messages in thread
From: Jeff King @ 2011-03-29 20:57 UTC (permalink / raw
  To: Junio C Hamano; +Cc: Johan Herland, Michael J Gruber, git

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>
---
 notes.c    |    3 ++-
 notes.h    |    2 +-
 revision.c |    9 +++++++--
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/notes.c b/notes.c
index 2ec604c..f6ce848 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 7ae3eef..c716694 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 24b89eb..315a7f4 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);
-- 
1.7.4.2.7.g9407

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 5/6] revision.c: support --notes command-line option
  2011-03-29 20:53       ` Jeff King
                           ` (3 preceding siblings ...)
  2011-03-29 20:57         ` [PATCH 4/6] notes: refactor display notes default handling Jeff King
@ 2011-03-29 20:57         ` Jeff King
  2011-03-29 20:59         ` [PATCH 6/6] revision.c: make --no-notes reset --notes list Jeff King
  2011-03-29 21:44         ` [PATCH] revision.c: introduce --notes-ref= to use one notes ref only Johan Herland
  6 siblings, 0 replies; 23+ messages in thread
From: Jeff King @ 2011-03-29 20:57 UTC (permalink / raw
  To: Junio C Hamano; +Cc: Johan Herland, Michael J Gruber, git

We already have --show-notes, but it has a few shortcomings:

  1. Using --show-notes=<ref> implies that we should also
     show the default notes. Which means you also need to
     use --no-standard-notes if you want to suppress them.

  2. It is negated by --no-notes, which doesn't match.

  3. It's too long to type. :)

This patch introduces --notes, which behaves exactly like
--show-notes, except that using "--notes=<ref>" does not
imply showing the default notes.

Signed-off-by: Jeff King <peff@peff.net>
---
 revision.c       |   15 ++++++++++-----
 t/t3301-notes.sh |   22 ++++++++++++++++++++++
 2 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/revision.c b/revision.c
index 315a7f4..c4ffee4 100644
--- a/revision.c
+++ b/revision.c
@@ -1367,17 +1367,22 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
 		revs->verbose_header = 1;
 		revs->pretty_given = 1;
 		get_commit_format(arg+9, revs);
-	} else if (!strcmp(arg, "--show-notes")) {
+	} else if (!strcmp(arg, "--show-notes") || !strcmp(arg, "--notes")) {
 		revs->show_notes = 1;
 		revs->show_notes_given = 1;
 		revs->notes_opt.use_default_notes = 1;
-	} else if (!prefixcmp(arg, "--show-notes=")) {
+	} else if (!prefixcmp(arg, "--show-notes=") ||
+		   !prefixcmp(arg, "--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);
+		if (!prefixcmp(arg, "--show-notes")) {
+			if (revs->notes_opt.use_default_notes < 0)
+				revs->notes_opt.use_default_notes = 1;
+			strbuf_addstr(&buf, arg+13);
+		}
+		else
+			strbuf_addstr(&buf, arg+8);
 		expand_notes_ref(&buf);
 		string_list_append(&revs->notes_opt.extra_notes_refs,
 				   strbuf_detach(&buf, NULL));
diff --git a/t/t3301-notes.sh b/t/t3301-notes.sh
index 1921ca3..f0e7a58 100755
--- a/t/t3301-notes.sh
+++ b/t/t3301-notes.sh
@@ -247,6 +247,28 @@ do
 	'
 done
 
+test_expect_success 'setup alternate notes ref' '
+	git notes --ref=alternate add -m alternate
+'
+
+test_expect_success 'git log --notes shows default notes' '
+	git log -1 --notes >output &&
+	grep xyzzy output &&
+	! grep alternate output
+'
+
+test_expect_success 'git log --notes=X shows only X' '
+	git log -1 --notes=alternate >output &&
+	! grep xyzzy output &&
+	grep alternate output
+'
+
+test_expect_success 'git log --notes --notes=X shows both' '
+	git log -1 --notes --notes=alternate >output &&
+	grep xyzzy output &&
+	grep alternate output
+'
+
 test_expect_success 'create -m notes (setup)' '
 	: > a5 &&
 	git add a5 &&
-- 
1.7.4.2.7.g9407

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* [PATCH 6/6] revision.c: make --no-notes reset --notes list
  2011-03-29 20:53       ` Jeff King
                           ` (4 preceding siblings ...)
  2011-03-29 20:57         ` [PATCH 5/6] revision.c: support --notes command-line option Jeff King
@ 2011-03-29 20:59         ` Jeff King
  2011-03-29 22:04           ` Junio C Hamano
  2011-03-29 21:44         ` [PATCH] revision.c: introduce --notes-ref= to use one notes ref only Johan Herland
  6 siblings, 1 reply; 23+ messages in thread
From: Jeff King @ 2011-03-29 20:59 UTC (permalink / raw
  To: Junio C Hamano; +Cc: Johan Herland, Michael J Gruber, git

With most command line options, later instances of an option
override earlier ones. With cumulative options like
"--notes", however, there is no way to say "forget the
--notes I gave you before".

Let's have --no-notes trigger this forgetting, so that:

  git log --notes=foo --no-notes --notes=bar

will show only the "bar" notes.

Signed-off-by: Jeff King <peff@peff.net>
---
Technically this is a regression for:

  git log --show-notes=foo --no-notes --show-notes=bar

which used to show both. But I consider that behavior useless and crazy,
and since the --no-notes actually did nothing there, why would anyone
have been using it?

 revision.c       |    6 ++++++
 t/t3301-notes.sh |   16 ++++++++++++++++
 2 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/revision.c b/revision.c
index c4ffee4..541f09e 100644
--- a/revision.c
+++ b/revision.c
@@ -1389,6 +1389,12 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
 	} else if (!strcmp(arg, "--no-notes")) {
 		revs->show_notes = 0;
 		revs->show_notes_given = 1;
+		revs->notes_opt.use_default_notes = -1;
+		/* we have been strdup'ing ourselves, so trick
+		 * string_list into free()ing strings */
+		revs->notes_opt.extra_notes_refs.strdup_strings = 1;
+		string_list_clear(&revs->notes_opt.extra_notes_refs, 0);
+		revs->notes_opt.extra_notes_refs.strdup_strings = 0;
 	} else if (!strcmp(arg, "--standard-notes")) {
 		revs->show_notes_given = 1;
 		revs->notes_opt.use_default_notes = 1;
diff --git a/t/t3301-notes.sh b/t/t3301-notes.sh
index f0e7a58..8600db7 100755
--- a/t/t3301-notes.sh
+++ b/t/t3301-notes.sh
@@ -269,6 +269,22 @@ test_expect_success 'git log --notes --notes=X shows both' '
 	grep alternate output
 '
 
+test_expect_success 'git log --no-notes resets default state' '
+	git log -1 --notes --notes=alternate \
+		--no-notes --notes=alternate \
+		>output &&
+	! grep xyzzy output &&
+	grep alternate output
+'
+
+test_expect_success 'git log --no-notes resets ref list' '
+	git log -1 --notes --notes=alternate \
+		--no-notes --notes \
+		>output &&
+	grep xyzzy output &&
+	! grep alternate output
+'
+
 test_expect_success 'create -m notes (setup)' '
 	: > a5 &&
 	git add a5 &&
-- 
1.7.4.2.7.g9407

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH] revision.c: introduce --notes-ref= to use one notes ref only
  2011-03-29 20:53       ` Jeff King
                           ` (5 preceding siblings ...)
  2011-03-29 20:59         ` [PATCH 6/6] revision.c: make --no-notes reset --notes list Jeff King
@ 2011-03-29 21:44         ` Johan Herland
  2011-03-29 22:18           ` [PATCH 7/6] log/pretty-options: Document --[no-]notes and deprecate old notes options Johan Herland
  6 siblings, 1 reply; 23+ messages in thread
From: Johan Herland @ 2011-03-29 21:44 UTC (permalink / raw
  To: Jeff King; +Cc: Junio C Hamano, Michael J Gruber, git

On Tuesday 29 March 2011, Jeff King wrote:
> Here's the series I ended up with. Getting the refactoring just right
> turned out to be non-trivial, but between several attempts and some
> tests, I think the end result is correct. Hopefully the breakdown of the
> changes into small patches helps make it easy to review.
> 
>   [1/6]: notes: make expand_notes_ref globally accessible
>   [2/6]: revision.c: refactor notes ref expansion
>   [3/6]: notes: refactor display notes extra refs field
>   [4/6]: notes: refactor display notes default handling
>   [5/6]: revision.c: support --notes command-line option
>   [6/6]: revision.c: make --no-notes reset --notes list

Indeed, the whole series looks good to me.

Acked-by: Johan Herland <johan@herland.net>


Thanks! :)

...Johan

-- 
Johan Herland, <johan@herland.net>
www.herland.net

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 4/6] notes: refactor display notes default handling
  2011-03-29 20:57         ` [PATCH 4/6] notes: refactor display notes default handling Jeff King
@ 2011-03-29 22:02           ` Junio C Hamano
  0 siblings, 0 replies; 23+ messages in thread
From: Junio C Hamano @ 2011-03-29 22:02 UTC (permalink / raw
  To: Jeff King; +Cc: Johan Herland, Michael J Gruber, git

Jeff King <peff@peff.net> writes:

> 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>
> ...
> diff --git a/revision.c b/revision.c
> index 24b89eb..315a7f4 100644
> --- a/revision.c
> +++ b/revision.c
> @@ -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;

I didn't quite get this hunk while reading the series, but it is to keep
the current semantics that --show-notes=foo means "show foo in addition to
whatever the default one we are going to show anyway", and you will be
fixing that with a saner --notes in a later patch in the series.

I like it; thanks.

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: [PATCH 6/6] revision.c: make --no-notes reset --notes list
  2011-03-29 20:59         ` [PATCH 6/6] revision.c: make --no-notes reset --notes list Jeff King
@ 2011-03-29 22:04           ` Junio C Hamano
  0 siblings, 0 replies; 23+ messages in thread
From: Junio C Hamano @ 2011-03-29 22:04 UTC (permalink / raw
  To: Jeff King; +Cc: Johan Herland, Michael J Gruber, git

Jeff King <peff@peff.net> writes:

> Technically this is a regression for:
>
>   git log --show-notes=foo --no-notes --show-notes=bar
>
> which used to show both. But I consider that behavior useless and crazy,
> and since the --no-notes actually did nothing there, why would anyone
> have been using it?

I suspect that nobody would complain; we could even ridicule whoever claim
to have been depending on the buggy behaviour.

    It was a _bug_ that 'git log' still showed A when it is ran with
    '--show-notes=A --no-notes --show-notes=B'

may even be more appropriate description of this change.

Thanks for bringing in a bit more sanity to the world.

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [PATCH 7/6] log/pretty-options: Document --[no-]notes and deprecate old notes options
  2011-03-29 21:44         ` [PATCH] revision.c: introduce --notes-ref= to use one notes ref only Johan Herland
@ 2011-03-29 22:18           ` Johan Herland
  2011-03-30  0:22             ` Jeff King
  0 siblings, 1 reply; 23+ messages in thread
From: Johan Herland @ 2011-03-29 22:18 UTC (permalink / raw
  To: Jeff King; +Cc: git, Junio C Hamano, Michael J Gruber

Document the behavior or the new --notes, --notes=<ref> and --no-notes
options, and list --show-notes[=<ref>] and --[no-]standard-notes options
as deprecated.

Signed-off-by: Johan Herland <johan@herland.net>
---

On Tuesday 29 March 2011, Johan Herland wrote:
> On Tuesday 29 March 2011, Jeff King wrote:
> > Here's the series I ended up with. Getting the refactoring just right
> > turned out to be non-trivial, but between several attempts and some
> > tests, I think the end result is correct. Hopefully the breakdown of
> > the changes into small patches helps make it easy to review.
> > 
> >   [1/6]: notes: make expand_notes_ref globally accessible
> >   [2/6]: revision.c: refactor notes ref expansion
> >   [3/6]: notes: refactor display notes extra refs field
> >   [4/6]: notes: refactor display notes default handling
> >   [5/6]: revision.c: support --notes command-line option
> >   [6/6]: revision.c: make --no-notes reset --notes list
> 
> Indeed, the whole series looks good to me.
> 
> Acked-by: Johan Herland <johan@herland.net>

And here's some documentation to go on top.


Have fun! :)

...Johan

 Documentation/git-log.txt        |    4 ++--
 Documentation/pretty-options.txt |   32 ++++++++++++++++++++++----------
 2 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt
index ff41784..0c1c10e 100644
--- a/Documentation/git-log.txt
+++ b/Documentation/git-log.txt
@@ -177,9 +177,9 @@ May be an unabbreviated ref name or a glob and may be specified
 multiple times.  A warning will be issued for refs that do not exist,
 but a glob that does not match any refs is silently ignored.
 +
-This setting can be disabled by the `--no-standard-notes` option,
+This setting can be disabled by the `--no-notes` option,
 overridden by the 'GIT_NOTES_DISPLAY_REF' environment variable,
-and supplemented by the `--show-notes` option.
+and supplemented by the `--notes=<ref>` option.
 
 Author
 ------
diff --git a/Documentation/pretty-options.txt b/Documentation/pretty-options.txt
index 50923e2..a9b399b 100644
--- a/Documentation/pretty-options.txt
+++ b/Documentation/pretty-options.txt
@@ -30,19 +30,31 @@ people using 80-column terminals.
 	preferred by the user.  For non plumbing commands this
 	defaults to UTF-8.
 
---no-notes::
---show-notes[=<ref>]::
+--notes[=<ref>]::
 	Show the notes (see linkgit:git-notes[1]) that annotate the
 	commit, when showing the commit log message.  This is the default
 	for `git log`, `git show` and `git whatchanged` commands when
-	there is no `--pretty`, `--format` nor `--oneline` option is
-	given on the command line.
+	there is no `--pretty`, `--format` nor `--oneline` option given
+	on the command line.
++
+By default, the notes shown are from the notes refs listed in the
+'core.notesRef' and 'notes.displayRef' variables (or corresponding
+environment overrides). See linkgit:git-config[1] for more details.
 +
-With an optional argument, add this ref to the list of notes.  The ref
-is taken to be in `refs/notes/` if it is not qualified.
+With an optional '<ref>' argument, add this notes ref to the list of
+notes refs to be shown. The ref is taken to be in `refs/notes/` if it
+is not qualified.
 
+--no-notes::
+	Do not show notes. This negates the above `--notes` option, by
+	resetting the list of notes refs from which notes are shown.
+	This can be combined with the above `--notes` option to control
+	exactly which notes refs are shown. E.g. "--notes=foo" will show
+	notes, both from the default notes ref, and from "refs/notes/foo",
+	while "--no-notes --notes=foo" will only show notes from
+	"refs/notes/foo".
+
+--show-notes[=<ref>]::
 --[no-]standard-notes::
-	Enable or disable populating the notes ref list from the
-	'core.notesRef' and 'notes.displayRef' variables (or
-	corresponding environment overrides).  Enabled by default.
-	See linkgit:git-config[1].
+	These options are deprecated. Use the above --notes/--no-notes
+	options instead.
-- 
1.7.4

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH 7/6] log/pretty-options: Document --[no-]notes and deprecate old notes options
  2011-03-29 22:18           ` [PATCH 7/6] log/pretty-options: Document --[no-]notes and deprecate old notes options Johan Herland
@ 2011-03-30  0:22             ` Jeff King
  2011-03-30  0:57               ` Johan Herland
  0 siblings, 1 reply; 23+ messages in thread
From: Jeff King @ 2011-03-30  0:22 UTC (permalink / raw
  To: Johan Herland; +Cc: git, Junio C Hamano, Michael J Gruber

On Wed, Mar 30, 2011 at 12:18:55AM +0200, Johan Herland wrote:

> > On Tuesday 29 March 2011, Jeff King wrote:
> > > Here's the series I ended up with. Getting the refactoring just right
> > > turned out to be non-trivial, but between several attempts and some
> > > tests, I think the end result is correct. Hopefully the breakdown of
> > > the changes into small patches helps make it easy to review.
> > > 
> > >   [1/6]: notes: make expand_notes_ref globally accessible
> > >   [2/6]: revision.c: refactor notes ref expansion
> > >   [3/6]: notes: refactor display notes extra refs field
> > >   [4/6]: notes: refactor display notes default handling
> > >   [5/6]: revision.c: support --notes command-line option
> > >   [6/6]: revision.c: make --no-notes reset --notes list
> 
> And here's some documentation to go on top.

Thanks. I meant to document at the end, but somehow after the fifteenth
"rebase -i" I forgot. :)

> diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt
> index ff41784..0c1c10e 100644
> --- a/Documentation/git-log.txt
> +++ b/Documentation/git-log.txt
> @@ -177,9 +177,9 @@ May be an unabbreviated ref name or a glob and may be specified
>  multiple times.  A warning will be issued for refs that do not exist,
>  but a glob that does not match any refs is silently ignored.
>  +
> -This setting can be disabled by the `--no-standard-notes` option,
> +This setting can be disabled by the `--no-notes` option,
>  overridden by the 'GIT_NOTES_DISPLAY_REF' environment variable,
> -and supplemented by the `--show-notes` option.
> +and supplemented by the `--notes=<ref>` option.

This is not really "supplemented" any more, but rather "overridden", I
think.

> ---no-notes::
> ---show-notes[=<ref>]::
> +--notes[=<ref>]::
>  	Show the notes (see linkgit:git-notes[1]) that annotate the
>  	commit, when showing the commit log message.  This is the default
>  	for `git log`, `git show` and `git whatchanged` commands when
> -	there is no `--pretty`, `--format` nor `--oneline` option is
> -	given on the command line.
> +	there is no `--pretty`, `--format` nor `--oneline` option given
> +	on the command line.
> ++
> +By default, the notes shown are from the notes refs listed in the
> +'core.notesRef' and 'notes.displayRef' variables (or corresponding
> +environment overrides). See linkgit:git-config[1] for more details.
>  +
> -With an optional argument, add this ref to the list of notes.  The ref
> -is taken to be in `refs/notes/` if it is not qualified.
> +With an optional '<ref>' argument, add this notes ref to the list of
> +notes refs to be shown. The ref is taken to be in `refs/notes/` if it
> +is not qualified.

This is somewhat vague about the interaction, in particular that
"--notes=<ref>" will disable default notes from being shown unless
"--notes" is also given.

> +--no-notes::
> +	Do not show notes. This negates the above `--notes` option, by
> +	resetting the list of notes refs from which notes are shown.
> +	This can be combined with the above `--notes` option to control
> +	exactly which notes refs are shown. E.g. "--notes=foo" will show
> +	notes, both from the default notes ref, and from "refs/notes/foo",
> +	while "--no-notes --notes=foo" will only show notes from
> +	"refs/notes/foo".

This example is wrong. "--notes=foo" will show _only_ foo. A few
examples:

  --notes=foo ;# only foo
  --notes --notes=foo ;# foo and default
  --notes=foo --notes=bar --notes --no-notes --notes=foo ;# only foo

Make sense?

-Peff

^ permalink raw reply	[flat|nested] 23+ messages in thread

* [PATCH 7/6] log/pretty-options: Document --[no-]notes and deprecate old notes options
  2011-03-30  0:22             ` Jeff King
@ 2011-03-30  0:57               ` Johan Herland
  2011-03-30  3:32                 ` Jeff King
  0 siblings, 1 reply; 23+ messages in thread
From: Johan Herland @ 2011-03-30  0:57 UTC (permalink / raw
  To: Jeff King; +Cc: git, Junio C Hamano, Michael J Gruber

Document the behavior or the new --notes, --notes=<ref> and --no-notes
options, and list --show-notes[=<ref>] and --[no-]standard-notes options
as deprecated.

Signed-off-by: Johan Herland <johan@herland.net>
---

On Wednesday 30 March 2011, Jeff King wrote:
> On Wed, Mar 30, 2011 at 12:18:55AM +0200, Johan Herland wrote:
> > And here's some documentation to go on top.
> [...]
> This example is wrong. "--notes=foo" will show _only_ foo. A few
> examples:
> 
>   --notes=foo ;# only foo
>   --notes --notes=foo ;# foo and default
>   --notes=foo --notes=bar --notes --no-notes --notes=foo ;# only foo
> 
> Make sense?

Yeah, I really screwed that up. Hope this version is better. :)

...Johan


 Documentation/git-log.txt        |    4 ++--
 Documentation/pretty-options.txt |   35 +++++++++++++++++++++++++----------
 2 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt
index ff41784..ab3757b 100644
--- a/Documentation/git-log.txt
+++ b/Documentation/git-log.txt
@@ -177,9 +177,9 @@ May be an unabbreviated ref name or a glob and may be specified
 multiple times.  A warning will be issued for refs that do not exist,
 but a glob that does not match any refs is silently ignored.
 +
-This setting can be disabled by the `--no-standard-notes` option,
+This setting can be disabled by the `--no-notes` option,
 overridden by the 'GIT_NOTES_DISPLAY_REF' environment variable,
-and supplemented by the `--show-notes` option.
+and overridden by the `--notes=<ref>` option.
 
 Author
 ------
diff --git a/Documentation/pretty-options.txt b/Documentation/pretty-options.txt
index 50923e2..d5c9772 100644
--- a/Documentation/pretty-options.txt
+++ b/Documentation/pretty-options.txt
@@ -30,19 +30,34 @@ people using 80-column terminals.
 	preferred by the user.  For non plumbing commands this
 	defaults to UTF-8.
 
---no-notes::
---show-notes[=<ref>]::
+--notes[=<ref>]::
 	Show the notes (see linkgit:git-notes[1]) that annotate the
 	commit, when showing the commit log message.  This is the default
 	for `git log`, `git show` and `git whatchanged` commands when
-	there is no `--pretty`, `--format` nor `--oneline` option is
-	given on the command line.
+	there is no `--pretty`, `--format` nor `--oneline` option given
+	on the command line.
++
+By default, the notes shown are from the notes refs listed in the
+'core.notesRef' and 'notes.displayRef' variables (or corresponding
+environment overrides). See linkgit:git-config[1] for more details.
++
+With an optional '<ref>' argument, show this notes ref instead of the
+default notes ref(s). The ref is taken to be in `refs/notes/` if it
+is not qualified.
 +
-With an optional argument, add this ref to the list of notes.  The ref
-is taken to be in `refs/notes/` if it is not qualified.
+Multiple --notes options can be combined to control which notes are
+being displayed. Examples: "--notes=foo" will show only notes from
+"refs/notes/foo"; "--notes=foo --notes" will show both notes from
+"refs/notes/foo" and from the default notes ref(s).
 
+--no-notes::
+	Do not show notes. This negates the above `--notes` option, by
+	resetting the list of notes refs from which notes are shown.
+	Options are parsed in the order given on the command line, so e.g.
+	"--notes --notes=foo --no-notes --notes=bar" will only show notes
+	from "refs/notes/bar".
+
+--show-notes[=<ref>]::
 --[no-]standard-notes::
-	Enable or disable populating the notes ref list from the
-	'core.notesRef' and 'notes.displayRef' variables (or
-	corresponding environment overrides).  Enabled by default.
-	See linkgit:git-config[1].
+	These options are deprecated. Use the above --notes/--no-notes
+	options instead.
-- 
1.7.4

^ permalink raw reply related	[flat|nested] 23+ messages in thread

* Re: [PATCH 7/6] log/pretty-options: Document --[no-]notes and deprecate old notes options
  2011-03-30  0:57               ` Johan Herland
@ 2011-03-30  3:32                 ` Jeff King
  0 siblings, 0 replies; 23+ messages in thread
From: Jeff King @ 2011-03-30  3:32 UTC (permalink / raw
  To: Johan Herland; +Cc: git, Junio C Hamano, Michael J Gruber

On Wed, Mar 30, 2011 at 02:57:19AM +0200, Johan Herland wrote:

> On Wednesday 30 March 2011, Jeff King wrote:
> > On Wed, Mar 30, 2011 at 12:18:55AM +0200, Johan Herland wrote:
> > > And here's some documentation to go on top.
> > [...]
> > This example is wrong. "--notes=foo" will show _only_ foo. A few
> > examples:
> > 
> >   --notes=foo ;# only foo
> >   --notes --notes=foo ;# foo and default
> >   --notes=foo --notes=bar --notes --no-notes --notes=foo ;# only foo
> > 
> > Make sense?
> 
> Yeah, I really screwed that up. Hope this version is better. :)

Yes, it looks good to me. Thanks.

Acked-by: Jeff King <peff@peff.net>

-Peff

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2011-03-30  3:32 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-29 10:05 [PATCH] revision.c: introduce --notes-ref= to use one notes ref only Michael J Gruber
2011-03-29 12:39 ` Johan Herland
2011-03-29 14:33   ` Jeff King
2011-03-29 15:16     ` Michael J Gruber
2011-03-29 18:32     ` Junio C Hamano
2011-03-29 20:53       ` Jeff King
2011-03-29 20:55         ` [PATCH 1/6] notes: make expand_notes_ref globally accessible Jeff King
2011-03-29 20:56         ` [PATCH 2/6] revision.c: refactor notes ref expansion Jeff King
2011-03-29 20:56         ` [PATCH 3/6] notes: refactor display notes extra refs field Jeff King
2011-03-29 20:57         ` [PATCH 4/6] notes: refactor display notes default handling Jeff King
2011-03-29 22:02           ` Junio C Hamano
2011-03-29 20:57         ` [PATCH 5/6] revision.c: support --notes command-line option Jeff King
2011-03-29 20:59         ` [PATCH 6/6] revision.c: make --no-notes reset --notes list Jeff King
2011-03-29 22:04           ` Junio C Hamano
2011-03-29 21:44         ` [PATCH] revision.c: introduce --notes-ref= to use one notes ref only Johan Herland
2011-03-29 22:18           ` [PATCH 7/6] log/pretty-options: Document --[no-]notes and deprecate old notes options Johan Herland
2011-03-30  0:22             ` Jeff King
2011-03-30  0:57               ` Johan Herland
2011-03-30  3:32                 ` Jeff King
2011-03-29 14:35 ` [PATCH] revision.c: introduce --notes-ref= to use one notes ref only Jeff King
2011-03-29 19:01   ` Jeff King
2011-03-29 19:48     ` Michael J Gruber
2011-03-29 20:23       ` Jeff King

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).