This is a minor re-roll of the patches from: http://public-inbox.org/git/20170124003729.j4ygjcgypdq7hceg@xxxxxxxxxxxxxxxxxxxxx/ (which got some review, but I don't think was picked up for even 'pu'). I won't repeat the numbers and background from that message, but the gist of it is that this reduces memory usage significantly when your alternate has a lot of refs in it. This version makes two minor changes: - it drops the save_commit_buffer patch to clone; it's redundant with what fetch_pack() is doing internally, and I wasn't able to measure any improvement - it adds a missing "static" to an internal function The only other possible change from the review would be sorting the expected output in the test of the final script. I'm on the fence whether it is a feature that we expect a particular ordering. It's not set in stone ,but it _is_ deterministic, and if we change the order, it might be worth somebody actually noticing. [01/11]: for_each_alternate_ref: handle failure from real_pathdup() [02/11]: for_each_alternate_ref: stop trimming trailing slashes [03/11]: for_each_alternate_ref: use strbuf for path allocation [04/11]: for_each_alternate_ref: pass name/oid instead of ref struct [05/11]: for_each_alternate_ref: replace transport code with for-each-ref [06/11]: fetch-pack: cache results of for_each_alternate_ref [07/11]: add oidset API [08/11]: receive-pack: use oidset to de-duplicate .have lines [09/11]: receive-pack: fix misleading namespace/.have comment [10/11]: receive-pack: treat namespace .have lines like alternates [11/11]: receive-pack: avoid duplicates between our refs and alternates Makefile | 1 + builtin/receive-pack.c | 41 +++++++++++++++------------- fetch-pack.c | 48 ++++++++++++++++++++++++++++----- object.h | 2 +- oidset.c | 49 ++++++++++++++++++++++++++++++++++ oidset.h | 45 +++++++++++++++++++++++++++++++ t/t5400-send-pack.sh | 38 ++++++++++++++++++++++++++ transport.c | 72 +++++++++++++++++++++++++++++++++++--------------- transport.h | 2 +- 9 files changed, 249 insertions(+), 49 deletions(-) create mode 100644 oidset.c create mode 100644 oidset.h