git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Martin Waitz <tali@admingilde.org>
To: Johannes Sixt <J.Sixt@eudaptics.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] submodule merge support
Date: Mon, 7 May 2007 18:37:58 +0200	[thread overview]
Message-ID: <20070507163758.GJ30511@admingilde.org> (raw)
In-Reply-To: <463EFFC6.12A1B0A1@eudaptics.com>

[-- Attachment #1: Type: text/plain, Size: 3480 bytes --]

hoi :)

On Mon, May 07, 2007 at 12:30:30PM +0200, Johannes Sixt wrote:
> Martin Waitz wrote:
> > On Sun, May 06, 2007 at 03:18:53PM -0700, Linus Torvalds wrote:
> > > On Mon, 7 May 2007, Alex Riesen wrote:
> > > > How about making all existing strategies just ignore submodules, and
> > > > move recursive merge in the merge driver (git-merge.sh)?
> > >
> > > Yes, I think that's the right thing to do.
> > >
> > > I think it's the right thing for another reason: in a true "recursive"
> > > merge, the submodules shouldn't be recursively merged anyway. *THEIR*
> > > merge will have its own history, and doing it based on some random history
> > > of the superproject is actually wrong anyway!
> > 
> > Of course the submodule has to get its own history, it's not possible
> > to do otherwise.  But you have to trigger the submodule merge when you
> > find a submodule-level conflict in the supermodule merge, just as
> > you trigger file-level three-way merges, too.
> 
> I think you missed Linus's point: If the supermodule's merge leads to a
> conflict in the submodule links, it is not appropriate to merge the
> submodule.

why?

We do file-level merging, too.
A submodule is not that different, besides being much more complex ;-)
We should try to automatically merge the content if possible and leave
conflict markers if not.

> Say you are merging commits A and B in the supermodule, and A uses v1.0
> of the submodule and B uses v2.0 of submodule, then you can't just merge
> v1.0 and v2.0 - instead, you have to make a decision whether the
> supermodule's merge result is going to use v1.0 or v2.0 or even
> something different like v2.1. An automatic merge cannot make this
> decision for you (unless there was no conflict in the first place).

So when should we try to merge and when should we leave conflict
markers?

Let's look at submodule commits O, A, B which are the commits that are
used by the (supermodule-) merge base, our supermodule version and their
supermodule version.

The trivial cases are:

 O,A -..- B        O,B -..- A

Then there is the fast-forward case:

 O -..- A -..- B      O -..- B -..- A

All of those do not require to create any new submodule commit, just use
the one on the right side of the chain.  I think they are not
controversial.

Now to the more complex parts:

          /-..- A
 O -..- X
          \-..- B

and

   /-..- A
 X
   \-..- O -..- B

Here we don't have any existing submodule commit that can be used.
In the second case an automatic merge cannot be done -- one supermodule
branch choose to rewind the submodule (e.g. by switching to another
branch in the submodule) and there really is no way to automatically
detect what should be done.
But when the submodule got branched after the supermodule merge-base
then an automatic submodule merge can be tried.
And it really makes sense to do so:
If you rely on submodule for your project, you will have people
submitting features which touch several submodules.  They can simply
create a new supermodule version incorporating all their changes and
send it to their supermodule-upstream.  After review,
supermodule-upstream wants all the new submodule versions merged into
her tree and it would be wrong to refuse to do that automatically.

The above behaviour is exactly what is implemented in the patch.
(OK, I could write a more elaborate commit message... ;-)

-- 
Martin Waitz

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

      parent reply	other threads:[~2007-05-07 16:38 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-06 19:02 [PATCH] submodule merge support Martin Waitz
2007-05-06 22:07 ` Alex Riesen
2007-05-06 22:16   ` Martin Waitz
2007-05-06 22:18   ` Linus Torvalds
2007-05-07  9:03     ` Martin Waitz
2007-05-07 10:30       ` Johannes Sixt
2007-05-07 16:02         ` Linus Torvalds
2007-05-07 16:44           ` Martin Waitz
     [not found]             ` <alpine.LFD.0.98.0705070959060.3802@woody.linux-foundation.org>
     [not found]               ` <alpine.LFD.0.98.0705071015230.3802@woody.linux-foundation.org>
2007-05-07 19:33                 ` Martin Waitz
2007-05-07 16:37         ` Martin Waitz [this message]

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=20070507163758.GJ30511@admingilde.org \
    --to=tali@admingilde.org \
    --cc=J.Sixt@eudaptics.com \
    --cc=git@vger.kernel.org \
    /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;
as well as URLs for NNTP newsgroup(s).