From: "Lars Hjemli" <hjemli@gmail.com>
To: "Stephen R. van den Berg" <srb@cuci.nl>
Cc: "Junio C Hamano" <gitster@pobox.com>,
nanako3@bluebottle.com, git@vger.kernel.org
Subject: Re: [PATCH v2] revision.c: really honor --first-parent
Date: Tue, 13 May 2008 22:43:52 +0200 [thread overview]
Message-ID: <8c5c35580805131343kc115df6yd7ce3281fb3e6171@mail.gmail.com> (raw)
In-Reply-To: <20080513201522.GA11485@cuci.nl>
On Tue, May 13, 2008 at 10:15 PM, Stephen R. van den Berg <srb@cuci.nl> wrote:
> Lars Hjemli wrote:
> >In add_parents_to_list, if any parent of a revision had already been
> >SEEN, the current code would continue with the next parent, skipping
> >the test for --first-parent. This patch inverts the test for SEEN so
> >that the test for --first-parent is always performed.
>
> Let's put it this way:
> - If there would have been only one path to any particular point in the
> tree, then the --first-parent flag makes no differences, because the
> tree wouldn't contain any merges to begin with.
True
> - If a tree contains *any* merges (i.e. a commit with multiple parents),
> then there are always multiple paths to some common ancestor, and
> therefore depending on which path you travel up first, you sometimes get
> clashes with the SEEN flag (unpredictable by definition).
True
> - It would seem logical and sufficient to avoid this unpredictability by
> utilising the --first-parent flag to present and walk a tree of commits
> AS IF there were no merges.
True
> - My original patch did just that, it simplified the code to make sure
> that all other parents beside the first parent are ignored when
> walking the tree.
Except for the case where the first parent had been already SEEN; then
it would continue to test the next parents until one was found which
was not already SEEN and _that_ parent would be treated as if it was
first. And as Nanako showed, a simple `git rev-list HEAD^..HEAD` marks
both HEAD and HEAD^ as seen. When combined with --first-parent, the
result (with your patch) is that HEAD^2 is treated as the first
parent. With my patch on top of yours, the walk stops as HEAD^, which
is what we probably both want.
> - Your code now doesn't simplify the (IMO) convoluted walk, and still
> marks things as seen, even though in the first-parent case, these
> commits are not really seen at all. It implies that your code
> generates differing output, depending on the merges present.
I don't think so. My code should neither follow nor mark as SEEN any
parent but the first (but I could obviously be wrong).
> - The question now is, do we want the output of --first-parent to be
> immutable with respect to merges being present (but hidden from sight
> during a --first-parent run), or do we want the output of
> --first-parent to actually change depending on variations in parents
> other than the first parent?
>
> I'd say it's better to keep the code simpler, and to make sure the
> output does *not* depend on any parents other than the first (as
> implemented in my original patch).
I agree with your reasoning, and your patch with mine on top seems to
achieve that goal.
--
larsh
next prev parent reply other threads:[~2008-05-13 20:45 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-11 7:03 "git log --first-parent" shows parents that are not first しらいしななこ
2008-05-11 18:44 ` Junio C Hamano
2008-05-11 23:14 ` [PATCH] revision.c: really honor --first-parent Lars Hjemli
2008-05-12 15:12 ` [PATCH v2] " Lars Hjemli
2008-05-13 20:15 ` Stephen R. van den Berg
2008-05-13 20:43 ` Lars Hjemli [this message]
2008-05-13 22:38 ` Junio C Hamano
2008-05-14 10:34 ` Stephen R. van den Berg
2008-05-14 10:54 ` Lars Hjemli
2008-05-14 11:10 ` Stephen R. van den Berg
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=8c5c35580805131343kc115df6yd7ce3281fb3e6171@mail.gmail.com \
--to=hjemli@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=nanako3@bluebottle.com \
--cc=srb@cuci.nl \
/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).