From: Jakub Narebski <jnareb@gmail.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Nicolas Pitre <nico@cam.org>, Junio C Hamano <gitster@pobox.com>,
Git Mailing List <git@vger.kernel.org>
Subject: Re: Add "--show-all" revision walker flag for debugging
Date: Sun, 10 Feb 2008 23:53:39 +0100 [thread overview]
Message-ID: <200802102353.40230.jnareb@gmail.com> (raw)
In-Reply-To: <alpine.LFD.1.00.0802101241590.2896@woody.linux-foundation.org>
On Sat, 10 Feb 2008, Linus Torvalds wrote:
>
> On Sun, 10 Feb 2008, Jakub Narebski wrote:
> >
> > P.S. Would having generation + roots be enough?
>
> I'm wavering here. Maybe just "generation" works (the longest path from
> any root), because what we are looking for is essentially "guarantee that
> this commit cannot possibly be reached from that other commit", and I
> guess a simple generation count actually does work for that (if the
> generation of "x" is smaller than the generation of "y", we definitely
> cannot reach y from x).
Well, "generation" number alone would work quote well as an exclusion
mechanism; generation + roots would work better, I think.
Lets take for an example the following revision graph:
roots: a a a aA aA
gen: 1 2 3 4 5
a----b----c----d----e
/
A----B--/
gen: 1 2
roots: A A
For example lone generation number is enough to decide that 'c'
(generation 3) cannot be reached from 'a' (generation 1 < 3), and
that 'c' (generation 3) cannot be reached from 'B' (generation 2 < 3).
Roots allow for easy check that 'B' (gen: 2, roots: A) cannot be
reached from 'c' (roots: a, and A \not\in a), but can be reached
from 'e' (gen: 5 > 2, roots: aA \ni a).
What I don't know if generation number would be enough to avoid
"going to root" or "going to common ancestor" costly case when
calculating excluded commits.
> At the same time, I'm still not really convinced we need to add the
> redundant info. I do think I *should* have designed it that way to start
> with (and I thought so two years ago - blaah), so the strongest reason for
> "we should add generation numbers" at least for me is that I actually
> think it's a GoodThing(tm) to have.
While this information can be calculated from revision graph it is
I think costly enough that it truly would be better to have it in
commit object.
Well, we could always start using core.repositoryFormatVersion ;-)
> But adding it is a pretty invasive thing, and would force people to
> upgrade (it really isn't backwards compatible - old versions of git would
> immediately refuse to touch archives with even just a single top commit
> that has a generation number in it, unless we'd hide it at the end of the
> buffer and just uglify things in general).
Well, we could always add it as a local (per repository) "cache".
With only generation numbers we could use pack-index-like format
to store a mapping "commit sha-1 => generation number", just like
now pack index stores mapping "object sha-1 => offset in pack".
If we want to store also roots, we could either map
"commit sha-1 => generation number, roots set offset / id" (constant
length value)[*1*], or have gen-*.gen file with generation numbers
and roots, and gen-*.idx as index to that file.
[*1*] If I understand math correctly it would limit us in theory to
up to 64 roots (git.git has 8 roots IIRC).
--
Jakub Narebski
Poland
next prev parent reply other threads:[~2008-02-10 22:54 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-09 22:02 Add "--show-all" revision walker flag for debugging Linus Torvalds
2008-02-09 23:52 ` Linus Torvalds
2008-02-10 4:44 ` Junio C Hamano
2008-02-10 1:12 ` Johannes Schindelin
2008-02-10 1:22 ` Linus Torvalds
2008-02-10 1:29 ` Johannes Schindelin
2008-02-10 4:09 ` Junio C Hamano
2008-02-10 4:21 ` Junio C Hamano
2008-02-10 1:28 ` Nicolas Pitre
2008-02-10 1:30 ` Johannes Schindelin
2008-02-10 20:17 ` Jakub Narebski
2008-02-10 20:50 ` Linus Torvalds
2008-02-10 21:04 ` Nicolas Pitre
2008-02-10 22:53 ` Jakub Narebski [this message]
2008-02-10 23:11 ` Linus Torvalds
2008-02-11 1:24 ` Jakub Narebski
2008-02-11 1:59 ` Nicolas Pitre
2008-02-11 15:59 ` Linus Torvalds
2008-02-11 16:26 ` Jakub Narebski
2008-02-11 16:39 ` Nicolas Pitre
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=200802102353.40230.jnareb@gmail.com \
--to=jnareb@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=nico@cam.org \
--cc=torvalds@linux-foundation.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).