threads / patch / 46677

patchformat-patch: use raw format for notes

Subject: [PATCH] format-patch: use raw format for notes

## tl;dr

6 messages between Aug 28, 2017 and Sep 13, 2017. Diffs are folded; open one to read it.

replies: 5people: 4as markdown or json

Sam Bobroff· Aug 28, 2017, 04:23 UTC · lore

If "--notes=..." is used with "git format-patch", the notes are prefixed with the ref's local name and indented, which looks odd and exposes the path of the ref.

Extend the test that suppresses this behaviour so that it also catches this case, causing the notes to be included without additional processing.

Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
---
Notes (foo):
    Hi,
    
    I've noticed what appears to be a small cosmetic bug in git format-patch, as
    I've described in the commit message.
    
    I'm not sure if this patch is the right way to fix it (or perhaps it's not even
    a bug), but it should at least help to explain what I'm talking about.
    
    I've used "git format-patch --notes=foo" to prepare this email so that it is an
    example of the issue :-)
    
    Cheers,
    Sam.
 log-tree.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
Show changes to log-tree.c +2 −1
diff --git a/log-tree.c b/log-tree.c
index 410ab4f02..26bc21ad3 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -655,7 +655,8 @@ void show_log(struct rev_info *opt)
 		int raw;
 		struct strbuf notebuf = STRBUF_INIT;
 
-		raw = (opt->commit_format == CMIT_FMT_USERFORMAT);
+		raw = (opt->commit_format == CMIT_FMT_USERFORMAT) ||
+		      (opt->commit_format == CMIT_FMT_EMAIL);
 		format_display_notes(&commit->object.oid, &notebuf,
 				     get_log_output_encoding(), raw);
 		ctx.notes_message = notebuf.len
-- 
2.11.0
Junio C Hamano· Sep 6, 2017, 03:34 UTC · re: Sam Bobroff · lore

Re: [PATCH] format-patch: use raw format for notes

Sam Bobroff <sam.bobroff@au1.ibm.com> writes:
Show 25 quoted lines
> If "--notes=..." is used with "git format-patch", the notes are
> prefixed with the ref's local name and indented, which looks odd and
> exposes the path of the ref.
>
> Extend the test that suppresses this behaviour so that it also catches
> this case, causing the notes to be included without additional
> processing.
>
> Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
> ---
>
> Notes (foo):
>     Hi,
>     
>     I've noticed what appears to be a small cosmetic bug in git format-patch, as
>     I've described in the commit message.
>     
>     I'm not sure if this patch is the right way to fix it (or perhaps it's not even
>     a bug), but it should at least help to explain what I'm talking about.
>     
>     I've used "git format-patch --notes=foo" to prepare this email so that it is an
>     example of the issue :-)
>     
>     Cheers,
>     Sam.

Is the above addition from your 'foo' notes with or without this patch? I think the answer is "without", and the above "example" looks just fine to me.

 - It is very much intended to allow The "(foo)" after the "Notes"
   label to show which notes ref the note comes from, because there
   can be more than one notes refs that annotate the same commit.
 - And the contents are indented, just like the diffstat and other
   stuff we place after "---" but before the first "diff", to ensure
   no matter what text appears there it will not be mistaken as part
   sure that the contents from the notes will not be mistaken as part
   of the patch.

I do not think an unconditional change of the established format, like your patch does, is acceptable, as existing users have relied on, and expect to be able to continue relying on, the above two aspect of the current format.

But I am somewhat curious what your use case that wants to insert the raw contents there is. We may be able to construct a valid argument to add such an output as an optional feature if there is a good use case for it.

Thanks.
Show 17 quoted lines
>  log-tree.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/log-tree.c b/log-tree.c
> index 410ab4f02..26bc21ad3 100644
> --- a/log-tree.c
> +++ b/log-tree.c
> @@ -655,7 +655,8 @@ void show_log(struct rev_info *opt)
>  		int raw;
>  		struct strbuf notebuf = STRBUF_INIT;
>  
> -		raw = (opt->commit_format == CMIT_FMT_USERFORMAT);
> +		raw = (opt->commit_format == CMIT_FMT_USERFORMAT) ||
> +		      (opt->commit_format == CMIT_FMT_EMAIL);
>  		format_display_notes(&commit->object.oid, &notebuf,
>  				     get_log_output_encoding(), raw);
>  		ctx.notes_message = notebuf.len
Sam Bobroff· Sep 11, 2017, 04:27 UTC · re: Junio C Hamano · lore

Re: [PATCH] format-patch: use raw format for notes

On Wed, Sep 06, 2017 at 12:34:48PM +0900, Junio C Hamano wrote:
Show 31 quoted lines
> Sam Bobroff <sam.bobroff@au1.ibm.com> writes:
> 
> > If "--notes=..." is used with "git format-patch", the notes are
> > prefixed with the ref's local name and indented, which looks odd and
> > exposes the path of the ref.
> >
> > Extend the test that suppresses this behaviour so that it also catches
> > this case, causing the notes to be included without additional
> > processing.
> >
> > Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
> > ---
> >
> > Notes (foo):
> >     Hi,
> >     
> >     I've noticed what appears to be a small cosmetic bug in git format-patch, as
> >     I've described in the commit message.
> >     
> >     I'm not sure if this patch is the right way to fix it (or perhaps it's not even
> >     a bug), but it should at least help to explain what I'm talking about.
> >     
> >     I've used "git format-patch --notes=foo" to prepare this email so that it is an
> >     example of the issue :-)
> >     
> >     Cheers,
> >     Sam.
> 
> Is the above addition from your 'foo' notes with or without this
> patch?  I think the answer is "without", and the above "example"
> looks just fine to me.
Yes that's correct, it is without the patch.
>  - It is very much intended to allow The "(foo)" after the "Notes"
>    label to show which notes ref the note comes from, because there
>    can be more than one notes refs that annotate the same commit.
Right, that makes perfect sense to me when it's being output locally.

But the ref names are local to my git repo and there is no reaason why they should be meaningful or even known to the recipients of the patch email.

Show 5 quoted lines
>  - And the contents are indented, just like the diffstat and other
>    stuff we place after "---" but before the first "diff", to ensure
>    no matter what text appears there it will not be mistaken as part
>    sure that the contents from the notes will not be mistaken as part
>    of the patch.

I don't quite agree here. I think it would be fine to indent the whole block by one space, like the diffstat, but the main text is indented an additional four which looks odd and breaks line wrapping. (Yes, the line wrapping can be worked around, but still...)

> I do not think an unconditional change of the established format,
> like your patch does, is acceptable, as existing users have relied
> on, and expect to be able to continue relying on, the above two
> aspect of the current format.

Sure and I'm happy look at some kind of optional change but, just out of curiousity, is there some specific use case that this might break? (Not that there needs to be one, I agree with the general "don't break things" approach.)

> But I am somewhat curious what your use case that wants to insert
> the raw contents there is.  We may be able to construct a valid
> argument to add such an output as an optional feature if there is a
> good use case for it.

Perhaps I'm misunderstanding something about it but I just want to insert text into the comments section automatically, so that I don't have to post-process the output of format-patch with some horrible sed script :-)

(If only there were a way to set the coverletter text automatically as well...)

> Thanks.

Thanks for the reply! Cheers, Sam.

Show 18 quoted lines
> 
> >  log-tree.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/log-tree.c b/log-tree.c
> > index 410ab4f02..26bc21ad3 100644
> > --- a/log-tree.c
> > +++ b/log-tree.c
> > @@ -655,7 +655,8 @@ void show_log(struct rev_info *opt)
> >  		int raw;
> >  		struct strbuf notebuf = STRBUF_INIT;
> >  
> > -		raw = (opt->commit_format == CMIT_FMT_USERFORMAT);
> > +		raw = (opt->commit_format == CMIT_FMT_USERFORMAT) ||
> > +		      (opt->commit_format == CMIT_FMT_EMAIL);
> >  		format_display_notes(&commit->object.oid, &notebuf,
> >  				     get_log_output_encoding(), raw);
> >  		ctx.notes_message = notebuf.len
Stefan Beller· Sep 12, 2017, 17:33 UTC · re: Sam Bobroff · lore

Re: [PATCH] format-patch: use raw format for notes

On Sun, Sep 10, 2017 at 9:27 PM, Sam Bobroff <sam.bobroff@au1.ibm.com> wrote:
> (If only there were a way to set the coverletter text automatically as
> well...)
>
Checkout branch.<name>.description
Sam Bobroff· Sep 13, 2017, 00:38 UTC · re: Stefan Beller · lore

Re: [PATCH] format-patch: use raw format for notes

On Tue, Sep 12, 2017 at 10:33:37AM -0700, Stefan Beller wrote:
Show 7 quoted lines
> On Sun, Sep 10, 2017 at 9:27 PM, Sam Bobroff <sam.bobroff@au1.ibm.com> wrote:
> 
> > (If only there were a way to set the coverletter text automatically as
> > well...)
> >
> 
> Checkout branch.<name>.description
AH! I had seen this section of the format-patch man page...
       --[no-]cover-letter
           In addition to the patches, generate a cover letter file containing the branch description, shortlog and the overall diffstat. You can fill in a description in the file before
           sending it out.

... but I didn't realize that it meant that it would insert the text from branch.<name>.description into the cover letter. Perhaps there should be a hint to point you to the branch.<name>.description section of "git config"?

Also, it's not very useful for automating patch submission, as it doesn't set the subject line or remove the "*** BLURB HERE ***" marker, so it must still be post-processed.

(To be honest, I was surprised that it didn't use first line as the subject and leave out the markers.)

Cheers, Sam.

Jeff King· Sep 13, 2017, 13:03 UTC · re: Sam Bobroff · lore

Re: [PATCH] format-patch: use raw format for notes

On Mon, Sep 11, 2017 at 02:27:38PM +1000, Sam Bobroff wrote:
Show 9 quoted lines
> >  - It is very much intended to allow The "(foo)" after the "Notes"
> >    label to show which notes ref the note comes from, because there
> >    can be more than one notes refs that annotate the same commit.
> 
> Right, that makes perfect sense to me when it's being output locally.
> 
> But the ref names are local to my git repo and there is no reaason why
> they should be meaningful or even known to the recipients of the patch
> email.

I can see how your notes names might not be of interest to others. But I can also see how they _could_ be. For instance, if you kept test result annotations in a notes ref, you would want to mark them as such.

The idea of the current output is that you'd put general text into "refs/notes/commits" (which shows up only as "Notes:"). And if you are putting notes in another ref, you have some reason to do so, which implies that it's worth showing that they're not in the default ref.

I grant that there are reasons to do so which might not be worth showing (e.g., you might be pushing and fetching refs, and keep some hierarchy). But I don't think "are we emailing them" is a robust determiner of "are they worth showing". So this probably needs to be a separate option, rather than tied to the output format.

Or possibly there should be a naming convention (e.g., that everything that ends in "/commits" doesn't have its name shown, which would allow multiple hierarchies). It's hard to say without knowing the reason you chose a non-default refname in the first place.

-Peff

← back to recent threads