Git development
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: perryh@pluto.rain.com (Perry Hutchison)
Cc: git@vger.kernel.org, alan.r.olsen@intel.com
Subject: Re: Interesting git-format-patch bug
Date: Tue, 27 Nov 2012 09:29:21 -0800	[thread overview]
Message-ID: <7vy5hnlzta.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <50b4304c.EwQy4JquPwsUyMfZ%perryh@pluto.rain.com> (Perry Hutchison's message of "Mon, 26 Nov 2012 20:15:24 -0800")

perryh@pluto.rain.com (Perry Hutchison) writes:

> Junio C Hamano <gitster@pobox.com> wrote:
>> "Olsen, Alan R" <alan.r.olsen@intel.com> 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".
>
> To me, this seems to miss Alan's point:  only one patch was merged
> to branch A,...

Are you sure about this part?

I thought Alan's description was that he originally had this

    x-----A
     \     \
      B-----M (a)

and then "some other process" made it like so:

    x-----A
    |\     \
    | B-----M
     \       \
      B'------M' (a)

and then you ask to linealize the last n patches starting from the
rewritten M'.

If that "some other process" instead created a history like this:

    x-----A---\
    |\     \   \ 
    | B-----M   \
     \           \
      B'----------M' (a)

then the redone-merge M' will not see the old B that was fixed later
to B' in the history, but then format-patch would not show B so we
wouldn't be having this discussion thread.

It is possible that "some other process" may (ab)use the parent
field to record the evolution of B, to create a topology like this:

    x-----A---\
    |\     \   \
    | B-----M   \
     \ \         \
      \-B'--------M' (a)

in which case M' has parent B' but B' has a (phoney) parent B.

So again, it all depends on what "some other process" does to the
history when it rewrites it, and if somebody wants to fiter cruft in
the resulting history when flattening it, the knowledge of what
"some other process" does need to help that process.

Which is what I already said, I guess ;-)

> 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.

  reply	other threads:[~2012-11-27 17:29 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-26 21:33 Interesting git-format-patch bug Olsen, Alan R
2012-11-26 22:56 ` Junio C Hamano
2012-11-27  4:15   ` Perry Hutchison
2012-11-27 17:29     ` Junio C Hamano [this message]
2012-11-27 20:31     ` Olsen, Alan R

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7vy5hnlzta.fsf@alter.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=alan.r.olsen@intel.com \
    --cc=git@vger.kernel.org \
    --cc=perryh@pluto.rain.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox