summaryrefslogtreecommitdiff
path: root/fetch-pack.h
diff options
context:
space:
mode:
authorLibravatar Jeff King <peff@peff.net>2014-04-02 02:39:17 -0400
committerLibravatar Junio C Hamano <gitster@pobox.com>2014-04-04 15:29:44 -0700
commit69e4b3426a608b4965c1cb0c6eab5252d880178b (patch)
treecc1ff079a2d89f88fee8e312242900e2b42cb79f /fetch-pack.h
parentadd `ignore_missing_links` mode to revwalk (diff)
downloadtgif-69e4b3426a608b4965c1cb0c6eab5252d880178b.tar.xz
pack-objects: do not reuse packfiles without --delta-base-offset
When we are sending a packfile to a remote, we currently try to reuse a whole chunk of packfile without bothering to look at the individual objects. This can make things like initial clones much lighter on the server, as we can just dump the packfile bytes. However, it's possible that the other side cannot read our packfile verbatim. For example, we may have objects stored as OFS_DELTA, but the client is an antique version of git that only understands REF_DELTA. We negotiate this capability over the fetch protocol. A normal pack-objects run will convert OFS_DELTA into REF_DELTA on the fly, but the "reuse pack" code path never even looks at the objects. This patch disables packfile reuse if the other side is missing any capabilities that we might have used in the on-disk pack. Right now the only one is OFS_DELTA, but we may need to expand in the future (e.g., if packv4 introduces new object types). We could be more thorough and only disable reuse in this case when we actually have an OFS_DELTA to send, but: 1. We almost always will have one, since we prefer OFS_DELTA to REF_DELTA when possible. So this case would almost never come up. 2. Looking through the objects defeats the purpose of the optimization, which is to do as little work as possible to get the bytes to the remote. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'fetch-pack.h')
0 files changed, 0 insertions, 0 deletions