Re: Interesting git-format-patch bug

3 messages, 3 authors, 2016-06-15 · open the first message on its own page

Re: Interesting git-format-patch bug

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:55:25

"Olsen, Alan R" [off-list ref] writes:
I found an interesting bug in git-format-patch.

Say you have a branch A.  You create branch B and add a patch to
it. You then merge that patch into branch A. After the merge, some
other process (we will call it 'gerrit') uses annotate and changes
the comment on the patch that exists on branch B.

Now someone runs git-format-patch for the last n patches on branch
A.  You should just get the original patch that was merged over to
branch A.  What you get is the patch that was merged to branch A
*and* the patch with the modified commit comment on branch
B. (Double the patches, double the clean-up...)
As you literally have patches that do essentially the same or
similar things on two branches that was merged, you cannot expect to
export each individual commit into a patch and not have conflicts
among them.  So I do not think there is no answer than "don't do
that".

I think you could make your "some other process" that rewrites
commits to cull the duplicates out of the format-patch output,
though.  Each output file identifies what commit object the patch
came from, and your "some other process" that rewrote the commits
ought to know which commit updated which other commit did, which is
the piece of information needed to remove duplicates that format-patch
does not have.

Re: Interesting git-format-patch bug

From: Perry Hutchison <hidden>
Date: 2016-06-15 22:55:25

Junio C Hamano [off-list ref] wrote:
"Olsen, Alan R" [off-list ref] writes:
quoted
I found an interesting bug in git-format-patch.

Say you have a branch A.  You create branch B and add a patch to
it. You then merge that patch into branch A. After the merge,
some other process (we will call it 'gerrit') uses annotate and
changes the comment on the patch that exists on branch B.

Now someone runs git-format-patch for the last n patches on
branch A.  You should just get the original patch that was
merged over to branch A.  What you get is the patch that was
merged to branch A *and* the patch with the modified commit
comment on branch B. (Double the patches, double the
clean-up...)
As you literally have patches that do essentially the same or
similar things on two branches that was merged, you cannot
expect to export each individual commit into a patch and not
have conflicts among them.  So I do not think there is no
answer than "don't do that".
To me, this seems to miss Alan's point:  only one patch was merged
to branch A, so git-format-patch applied to branch A should find
only one patch.  It can be argued either way whether that one-patch
report should include the gerrit annotations, but surely the
application of gerrit on branch B, _after the merge to branch A
has already been performed_, should not cause an additional patch
to magically appear on branch A.

RE: Interesting git-format-patch bug

From: Olsen, Alan R <hidden>
Date: 2016-06-15 22:55:26

[Sorry for the top posting. Outlook is crap.]

You are correct. I should only get one copy of the patch on branch A. Branch B was modified after the merge and git-format-patch includes the original patch from the merge and a duplicate copy with the changed comments.  Note that this patch only has different comments. The body of the patch is exactly the same.

How gerrit mangles things is out of my control.  I would prefer that they cherry-pick instead of merges. I have to live with the bad choices of both gerrit and developers in this case.

I guess I will have to diagram out a better example of what is happening here.

-----Original Message-----
From: Perry Hutchison [mailto:perryh@pluto.rain.com] 
Sent: Monday, November 26, 2012 8:15 PM
To: gitster@pobox.com
Cc: git@vger.kernel.org; Olsen, Alan R
Subject: Re: Interesting git-format-patch bug

Junio C Hamano [off-list ref] wrote:
"Olsen, Alan R" [off-list ref] writes:
quoted
I found an interesting bug in git-format-patch.

Say you have a branch A.  You create branch B and add a patch to it. 
You then merge that patch into branch A. After the merge, some other 
process (we will call it 'gerrit') uses annotate and changes the 
comment on the patch that exists on branch B.

Now someone runs git-format-patch for the last n patches on branch 
A.  You should just get the original patch that was merged over to 
branch A.  What you get is the patch that was merged to branch A 
*and* the patch with the modified commit comment on branch B. 
(Double the patches, double the
clean-up...)
As you literally have patches that do essentially the same or similar 
things on two branches that was merged, you cannot expect to export 
each individual commit into a patch and not have conflicts among them.  
So I do not think there is no answer than "don't do that".
To me, this seems to miss Alan's point:  only one patch was merged to branch A, so git-format-patch applied to branch A should find only one patch.  It can be argued either way whether that one-patch report should include the gerrit annotations, but surely the application of gerrit on branch B, _after the merge to branch A has already been performed_, should not cause an additional patch to magically appear on branch A.

  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help