git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] partial-clone: design doc

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 8, 2017, 20:14 UTC
Message-ID
<xmqqzi6t6kpe.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20171208192636.13678-2-git@jeffhostetler.com>
Jeff Hostetler <git@jeffhostetler.com> writes:
Show 7 quoted lines
> From: Jeff Hostetler <jeffhost@microsoft.com>
>
> First draft of design document for partial clone feature.
>
> Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
> Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
> ---
Thanks.
Show 7 quoted lines
> +Non-Goals
> +---------
> +
> +Partial clone is independent of and not intended to conflict with
> +shallow-clone, refspec, or limited-ref mechanisms since these all operate
> +at the DAG level whereas partial clone and fetch works *within* the set
> +of commits already chosen for download.

It probably is not a huge deal (simply because it is about "Non-Goals") but I have no idea what "refspec" and "limited-ref mechanism" refer to in the above sentence, and I suspect many others share the same puzzlement.

Show 15 quoted lines
> +An object may be missing due to a partial clone or fetch, or missing due
> +to repository corruption. To differentiate these cases, the local
> +repository specially indicates packfiles obtained from the promisor
> +remote. These "promisor packfiles" consist of a "<name>.promisor" file
> +with arbitrary contents (like the "<name>.keep" files), in addition to
> +their "<name>.pack" and "<name>.idx" files. (In the future, this ability
> +may be extended to loose objects[a].)
> + ...
> +Foot Notes
> +----------
> +
> +[a] Remembering that loose objects are promisor objects is mainly
> +    important for trees, since they may refer to promisor blobs that
> +    the user does not have.  We do not need to mark loose blobs as
> +    promisor because they do not refer to other objects.

I fail to see any logical link between the "loose" and "tree". Putting it differently, I do not see why "tree" is so special.

A promisor pack that contains a tree but lacks blobs the tree refers to would be sufficient to let us remember that these missing blobs are not corruption. A loose commit or a tag that is somehow marked as obtained from a promisor, if it can serve just like a commit or a tag in a promisor pack to promise its direct pointee, would equally be useful (if very inefficient).

In any case, I suspect "since they may refer to promisor blobs" is a typo of "since they may refer to promised blobs".

Show 8 quoted lines
> +- Currently, dynamic object fetching invokes fetch-pack for each item
> +  because most algorithms stumble upon a missing object and need to have
> +  it resolved before continuing their work.  This may incur significant
> +  overhead -- and multiple authentication requests -- if many objects are
> +  needed.
> +
> +  We need to investigate use of a long-running process, such as proposed
> +  in [5,6] to reduce process startup and overhead costs.

Also perhaps in some operations we can enumerate the objects we will need upfront and ask for them in one go (e.g. "git log -p A..B" may internally want to do "rev-list --objects A..B" to enumerate trees and blobs that we may lack upfront). I do not think having the other side guess is a good idea, though.

> +- We currently only promisor packfiles.  We need to add support for
> +  promisor loose objects as described earlier.

The earlier description was not convincing enough to feel the need to me; at least not yet.

Previous: Jeff HostetlerNext: Jeff Hostetler
Message 3 of 9 in “Partial clone design document”
  1. Partial clone design documentJeff Hostetler, Dec 8, 2017
  2. partial-clone: design docJeff Hostetler, Dec 8, 2017
  3. Junio C HamanoDec 8, 2017
  4. Jeff HostetlerDec 13, 2017
  5. Philip OakleyDec 12, 2017
  6. Junio C HamanoDec 12, 2017
  7. Philip OakleyDec 13, 2017
  8. Jeff HostetlerDec 14, 2017
  9. Jeff HostetlerDec 14, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.