From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Greg KH <gregkh@linuxfoundation.org>
Subject: Re: [PATCH 3/3] name-rev: --weight option (WIP)
Date: Wed, 29 Aug 2012 23:36:11 -0400 [thread overview]
Message-ID: <20120830033611.GA32268@sigill.intra.peff.net> (raw)
In-Reply-To: <7vligxuv6l.fsf@alter.siamese.dyndns.org>
On Wed, Aug 29, 2012 at 04:37:06PM -0700, Junio C Hamano wrote:
> Junio C Hamano <gitster@pobox.com> writes:
>
> > Note that this is fairly expensive (see NEEDSWORK comment in the
> > code).
>
> And this is with the "notes-cache".
> [...]
> +static int get_tip_weight(struct commit *commit)
> +{
> + struct strbuf buf = STRBUF_INIT;
> + size_t sz;
> + int weight;
> + char *note = notes_cache_get(&weight_cache, commit->object.sha1, &sz);
> +
> + if (note && !strtol_i(note, 10, &weight)) {
> + free(note);
> + return weight;
> + }
> + free(note);
> +
> + weight = compute_tip_weight(commit);
> + strbuf_addf(&buf, "%d", weight);
> + notes_cache_put(&weight_cache, commit->object.sha1,
> + buf.buf, buf.len);
> + strbuf_release(&buf);
> + weight_cache_updated = 1;
> + return weight;
> +}
It looks like you didn't update compute_tip_weight at all, so it will
still do the full traversal down to the roots. I wonder if you can
define the weight as a recursive function of the parents. Using the sum
of the weights of the parents is not right, because you would
double-count in this situation:
A--B--C--D---M
\ /
E--F--G
That would double-count "A" and "B" in this example. But maybe there is
a clever way to define it that avoids that.
The advantage would be that you could cheaply find the weights of new
commits by only traversing back to the last cached one. I did something
similar with the generation number cache (but the recursive definition
is easier there).
> + if (use_weight)
> + notes_cache_init(&weight_cache, "name-rev-weight", "2012-08-29");
Is that a sufficient validity field? What about grafts or replace
objects? For the generation cache, I used a hash of the graft and
replace fields.
-Peff
next prev parent reply other threads:[~2012-08-30 3:37 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-29 4:48 Funny 'git describe --contains' output Greg KH
2012-08-29 5:57 ` Junio C Hamano
2012-08-29 6:36 ` Junio C Hamano
2012-08-29 18:17 ` Greg KH
2012-08-29 21:17 ` [PATCH 0/3] "git name-rev --weight" Junio C Hamano
2012-08-29 21:17 ` [PATCH 1/3] name-rev: lose unnecessary typedef Junio C Hamano
2012-08-29 21:17 ` [PATCH 2/3] name_rev: clarify when a new tip-name is assigned to a commit Junio C Hamano
2012-08-29 21:17 ` [PATCH 3/3] name-rev: --weight option (WIP) Junio C Hamano
2012-08-29 23:37 ` Junio C Hamano
2012-08-30 3:36 ` Jeff King [this message]
2012-08-30 3:53 ` Junio C Hamano
2012-08-30 3:55 ` Jeff King
2012-08-30 4:10 ` Junio C Hamano
2012-08-30 4:15 ` Junio C Hamano
2012-08-30 15:59 ` Junio C Hamano
2012-08-30 3:51 ` Jeff King
2012-08-30 4:09 ` Junio C Hamano
2012-08-30 7:06 ` [PATCH 0/3] "git name-rev --weight" Philip Oakley
2012-08-30 15:54 ` Junio C Hamano
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=20120830033611.GA32268@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=gregkh@linuxfoundation.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).