Subject: Re: Clone from shallow bundle bug

From: Junio C Hamano <[email-masked]>
Date: Tue, 31 Mar 2015 23:31:43 -0700

Phillip Susi <[email-masked]> writes:

> On 03/31/2015 06:17 PM, Junio C Hamano wrote:
>> Phillip Susi <[email-masked]> writes:
>> 
>>> I made a shallow clone of my repo, then used git bundle create to
>>> pack it all into a bundle file, then cloned from that bundle.
>> 
>> I think the introdution of shallow clone feature broke git bundle
>> create by not teaching it that its shallow boundaries are
>> prerequisite commits to unbundle its contents.  IOW, the bundle
>> created from the shallow clone is broken, I would think.
>
> It seems to me that it isn't exactly broken; it just needs to put
> something in the bundle noting ...

I think you are saying the same thing as I did without realizing ;-)

The only way a bundle can record "something" "noting" that it is an
incomplete history, while allowing it to be read by existing
implementations of "git bundle unbundle" is to list the commits,
behind which there is no history available in the bundle, as
bundle's pre-requisites.  I said that the addition of shallow repository
support did not enhance "git bundle create" to do so, and you are
saying "it just needs to put", implying that it currently does not.

Now, the only way the existing implementations of "git bundle
unbundle" can extract from such a bundle with prerequisites is to
unbundle into a repository that satisifies the prerequisites (these
incomplete bundle files are designed as a medium for sneaker-net
incremental updates).  I however suspect "git clone --shallow" from
such a bundle _might_ work (I never tried it), but I wouldn't be
surprised if the existing implementations of bundle unpacking code
refused to unbundle into a repository that lacks prerequiste commits
(i.e. making the repository a shallow-clone).

Allowing "git clone" (without "--shallow") from an incomplete bundle
file create a shallow clone, instead of outright refusing to work or
silently creating a corrupt repository, might be an interesting project,
perhaps the right size for GSoC or something like that.

Patches welcome, but one thing whoever is doing such a patch needs
to be careful about is that the pack data in the bundle is likely to
be a thin one---truly requiring the repository the bundle is unpacked
into to have the prerequisite objects.