Re: [PATCH 00/17] Clean up how fetch_pack() handles the heads list
From: Philip Oakley <hidden>
Date: 2016-06-15 22:54:33
From: "Jeff King" <redacted> Sent: Thursday, August 23, 2012 10:26 AM
On Thu, Aug 23, 2012 at 10:10:25AM +0200, mhagger@alum.mit.edu wrote:quoted
There were various confusing things (and a couple of bugs) in the way that fetch_pack() handled the list (nr_heads, heads) of references to be sought from the remote:Aside from the minor comments I made to individual patches, this all looks good. As usual, thanks for breaking it down; I wish all series were as easy to review as this.quoted
I'm still suspicious about the logic related to args.fetch_all and args.depth, but I don't think I've made anything worse.I think the point of that is that when doing "git fetch-pack --all --depth=1", the meaning of "--all" is changed from "all refs" to "everything but tags".
There is a comment in \git\Documentation\technical\shallow.txt that "- If you deepen a history, you'd want to get the tags of the newly stored (but older!) commits. This does not work right now." which may be the source of this restriction. That is, how is the depth of the tag fetching to be restricted to the requested depth count? [assuming I've undestood the problem correctly] It may be (?) that it is a good time to think about a 'datedepth' capability to bypass the current counted-depth shallow fetch that can cause so much trouble. With a date limited depth the relevant tags could also be fetched.
Which I kind of see the point of, because you don't want to grab ancient tags that will be expensive. But wouldn't it make more sense to limit it only to the contents of refs/heads in that case? Surely you wouldn't want refs/notes, refs/remotes, or other hierarchies. I suspect this code is never even run at all these days. All of the callers inside git should actually provide a real list of refs, not "--all". So it is really historical cruft for anybody who calls the fetch-pack plumbing (I wonder if any third-party callers even exist; this is such a deep part of the network infrastructure that any sane scripts would probably just be calling fetch). -Peff --