upload-pack: send refs' objects despite "filter"
commita0c9016abd566e9a8f988dcd387663cd0b2be078
authorJonathan Tan <jonathantanmy@google.com>
Fri, 6 Jul 2018 19:34:09 +0000 (6 12:34 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 9 Jul 2018 19:37:38 +0000 (9 12:37 -0700)
treef8c178df171d3267e7c55ee46148c0ef931cb807
parentcf1e7c07705eb21c30d0ee414810e7bc8fdf7d82
upload-pack: send refs' objects despite "filter"

A filter line in a request to upload-pack filters out objects regardless
of whether they are directly referenced by a "want" line or not. This
means that cloning with "--filter=blob:none" (or another filter that
excludes blobs) from a repository with at least one ref pointing to a
blob (for example, the Git repository itself) results in output like the
following:

    error: missing object referenced by 'refs/tags/junio-gpg-pub'

and if that particular blob is not referenced by a fetched tree, the
resulting clone fails fsck because there is no object from the remote to
vouch that the missing object is a promisor object.

Update both the protocol and the upload-pack implementation to include
all explicitly specified "want" objects in the packfile regardless of
the filter specification.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/technical/pack-protocol.txt
list-objects.c
object.h
revision.c
revision.h
t/t5317-pack-objects-filter-objects.sh
t/t5616-partial-clone.sh