Changes in v3: * Discussion seemed to settle on keeping the simplified version of ref-in-want where the "want-ref" line only accepts full ref names. If we want to we can add patterns at a later time. * Reverted back to v1's behavior where requesting a ref that doesn't exists is a hard error on the server. I went back and forth many times on what the right thing to do here is and decided that a hard error works much cleaner for the time being. * Some typos. Brandon Williams (8): test-pkt-line: add unpack-sideband subcommand upload-pack: implement ref-in-want upload-pack: test negotiation with changing repository fetch: refactor the population of peer ref OIDs fetch: refactor fetch_refs into two functions fetch: refactor to make function args narrower fetch-pack: put shallow info in output parameter fetch-pack: implement ref-in-want Documentation/config.txt | 7 + Documentation/technical/protocol-v2.txt | 28 ++- builtin/clone.c | 4 +- builtin/fetch.c | 131 ++++++++----- fetch-object.c | 2 +- fetch-pack.c | 52 +++-- remote.c | 1 + remote.h | 1 + t/helper/test-pkt-line.c | 33 ++++ t/lib-httpd.sh | 1 + t/lib-httpd/apache.conf | 8 + t/lib-httpd/one-time-sed.sh | 16 ++ t/t5703-upload-pack-ref-in-want.sh | 245 ++++++++++++++++++++++++ transport-helper.c | 6 +- transport-internal.h | 9 +- transport.c | 34 +++- transport.h | 3 +- upload-pack.c | 64 +++++++ 18 files changed, 568 insertions(+), 77 deletions(-) create mode 100644 t/lib-httpd/one-time-sed.sh create mode 100755 t/t5703-upload-pack-ref-in-want.sh -- 2.18.0.rc1.244.gcf134e6275-goog