From: Jakub Narebski <jnareb@gmail.com>
To: Miklos Vajna <vmiklos@frugalware.org>
Cc: "SZEDER Gábor" <szeder@ira.uka.de>,
git@vger.kernel.org, "Shawn O. Pearce" <spearce@spearce.org>,
Johannes.Schindelin@gmx.de
Subject: Re: [PATCH] builtin-commit: avoid using reduce_heads()
Date: Sat, 27 Sep 2008 01:51:47 +0200 [thread overview]
Message-ID: <200809270151.51785.jnareb@gmail.com> (raw)
In-Reply-To: <20080926193122.GW23137@genesis.frugalware.org>
On Fri, 26 Sep 2008, Miklos Vajna wrote:
> On Fri, Sep 26, 2008 at 09:17:39AM -0700, Jakub Narebski <jnareb@gmail.com> wrote:
> >
> > 1. As proposed above save git-merge options, for example in MERGE_MODE
> > or MERGE_OPTS file, so git-commit knows what options to use if it
> > was invoked to finish a merge.
>
> First, thank you for the detailed description, I'm really bad in them.
> :)
>
> ACK, that's why I implemented this one.
This is I think the fastest and seemingly simplest solution.
> > 2. git-merge saves _reduced_ heads in MERGE_HEAD, and git-commit
> > reduces only HEAD, unless it is in MERGE_HEAD. This means that
> > git-commit uses the following pseudo-code
> >
> > if (resolve_ref(HEAD) == MERGE_HEAD[0]) {
> > /* non fast-forward case */
> > merge HEAD + MERGE_HEAD
> > } else {
> > reduce_HEAD_maybe()
> > merge [HEAD] + MERGE_HEAD
> > }
> >
> > This has the advantage that it doesn't change MERGE_HEAD semantic
> > for simple merge which did not began as octopus
>
> This is wrong IMHO. You can write the reduced heads to MERGE_HEAD but
> you can't know if you can omit the HEAD in case it is reachable already
> from one of the heads or not. That depends on if the user used --no-ff
> or not.
I have tried to explain in above pseudocode git-commit is to use
additional hack to decide whether to try to reduce HEAD wrt MERGE_HEAD
heads (normal case), or not (--no-ff case), namely if resolved HEAD
is first head in MERGE_HEAD that means --no-ff case.
It is "halfway" solution and bit hacky (and ugly).
> > 3. Remove reduce_heads() from git-commit entirely, and record in
> > MERGE_HEAD (or rather now MERGE_HEADS) _all_ _reduced_ heads.
> > _All_ means that HEAD is included in MERGE_HEAD if it is not
> > reduced, _reduced_ means that only non-dependent heads are in
> > MERGE_HEAD. This for example means that for simple non-octopus
> > merge case MERGE_HEAD/MERGE_HEADS now contain _all_ parents,
> > and not only other side of merge.
> >
> > This solution has the advantage of being clear solution, clarifying
> > semantic of MERGE_HEAD (currently HEAD is used both as target, i.e.
> > where merge is to be recorded, and as one of heads to merge/to
> > consider), and making it possible to separate layers: git-merge
> > is about merging, git-commit doesn't need to know anything about
> > merging.
> >
> > The disadvantage is that it changes format (well, semantic) of
> > MERGE_HEAD, possibly breaking users' scripts; perhaps some of
> > git commands like "git log --merge" or "git diff --merge" should
> > be updated on such change.
>
> Actually I think this would be ugly. MERGE_HEAD is about you can see
> what will be merged once you commit the merge, but once you include HEAD
> there, you can't easily check that. Maybe it's just me who sometimes
> have a look at that file myself directly... :-)
The new semantic would be very simple. If there is no MERGE_HEAD, it
is an ordinary no-merge commit, and its only parent would be previous
(current) version of HEAD. If there is MERGE_HEAD it contains _all_
parents in a merge commit, and only those heads which will be parents
(_reduced_ heads); if HEAD is symref, we modify given branch so it
points to newly created merge commit.
Currently parents of merge commits are 'reduce(HEAD + MERGE_HEAD)'
in symbolic equation; I propose they would be simply 'MERGE_HEAD'.
then we set this branch to new commit
--
Jakub Narebski
Poland
next prev parent reply other threads:[~2008-09-26 23:53 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-25 23:50 [BUG] merge --no-ff --no-commit && commit SZEDER Gábor
2008-09-26 0:35 ` [PATCH] builtin-commit: avoid using reduce_heads() Miklos Vajna
2008-09-26 1:03 ` SZEDER Gábor
2008-09-26 6:24 ` Miklos Vajna
2008-09-26 15:15 ` Miklos Vajna
2008-09-26 15:20 ` [PATCH] builtin-commit: avoid always " Miklos Vajna
2008-09-26 15:52 ` Shawn O. Pearce
2008-09-26 19:37 ` Miklos Vajna
2008-10-03 2:35 ` Shawn O. Pearce
2008-10-03 12:04 ` Miklos Vajna
2008-10-03 14:59 ` Shawn O. Pearce
2008-10-05 19:51 ` Miklos Vajna
2008-10-06 14:19 ` Shawn O. Pearce
2008-10-03 15:09 ` [PATCH] builtin-commit: use reduce_heads() only when appropriate SZEDER Gábor
2008-10-05 19:43 ` Miklos Vajna
2008-09-26 16:17 ` [PATCH] builtin-commit: avoid using reduce_heads() Jakub Narebski
2008-09-26 19:31 ` Miklos Vajna
2008-09-26 23:51 ` Jakub Narebski [this message]
2008-09-29 15:07 ` Miklos Vajna
2008-09-29 18:18 ` Miklos Vajna
2008-09-29 18:44 ` Jakub Narebski
2008-09-27 0:16 ` SZEDER Gábor
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=200809270151.51785.jnareb@gmail.com \
--to=jnareb@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=spearce@spearce.org \
--cc=szeder@ira.uka.de \
--cc=vmiklos@frugalware.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).