Issue 3272: Full-object packfile always returned when fetching from refs/changes regardless of local objects.
Status:  New
Owner: ----
Reported by dnj@chromium.org, Apr 1, 2015
Affected Version: Live (2.11-rc1-208-g79f5f81).
Using Git version 2.2.0.rc0.207.ga3a616c.

What steps will reproduce the problem?
1. git init
2. git remote add origin https://gerrit.googlesource.com/gerrit

(Picking on a random recent CL, checking out PS#2):
3. git fetch origin refs/changes/00/66700/2
(Long checkout, downloads one pack file).

(Checking out PS#1. Has the same parent commit as PS#2, to reduce differences).
4. git fetch origin refs/changes/00/66700/1

What is the expected output? What do you see instead?

I'd expect the fetch in #4 to fetch significantly fewer objects/deltas than the fetch in #3, since most of the objects in #4 were already fetched in #3. Instead, they both fetch ~44MB worth of data and each adds a ~44MB packfile to "/objects/pack".

Additional comments:

Gerrit seems to be fetching a pack file containing the full set of objects regardless of which objects are already present in my local repository. This causes a significant increase in time and network traffic required to check out a patchset from "refs/changes".

For repositories that check in large binary blobs (not pointing fingers), it also greatly increases the on-disk size of the repositories due to duplicate gigantic objects in the packfiles until "git gc" is run. This can be problematic in continuous integration systems, which do this mechanically.