On Sat, 2016-04-16 at 22:33 -0400, Eric Sunshine wrote: > On Fri, Apr 15, 2016 at 3:19 PM, David Turner < > dturner@xxxxxxxxxxxxxxxx> wrote: > > When fetching over http, send the requested refspec to the server. > > The server will then only send refs matching that refspec. It is > > permitted for old servers to ignore that parameter, and the client > > will automatically handle this. > > > > When the server has many refs, and the client only wants a few, > > this > > can save bandwidth and reduce fetch latency. > > > > Signed-off-by: David Turner <dturner@xxxxxxxxxxxxxxxx> > > --- > > diff --git a/builtin/fetch.c b/builtin/fetch.c > > @@ -302,9 +302,27 @@ static struct ref *get_ref_map(struct > > transport *transport, > > - remote_refs = transport_get_remote_refs(transport, NULL, > > 0); > > + qualified_refspecs = xcalloc(refspec_count, > > sizeof(*qualified_refspecs)); > > + for (i = 0; i < refspec_count; i++) { > > + if (starts_with(refspecs[i].src, "refs/")) { > > + qualified_refspecs[i].src = > > xstrdup(refspecs[i].src); > > + } else { > > + struct strbuf buf = STRBUF_INIT; > > + strbuf_addf(&buf, "refs/heads/%s", > > refspecs[i].src); > > + qualified_refspecs[i].src = > > strbuf_detach(&buf, NULL); > > Alternately, replace these three lines with: > > qualified_refspecs[i].src = xstrfmt("refs/heads/%s", > refspecs[i].src); > > and drop the braces. Yep, good point. > > + } > > + } > > + > > + remote_refs = transport_get_remote_refs(transport, > > qualified_refspecs, > > + refspec_count); > > + > > + for (i = 0; i < refspec_count; i++) { > > + free(qualified_refspecs[i].src); > > + } > > + free(qualified_refspecs); > > diff --git a/t/t5552-http-fetch-branch.sh b/t/t5552-http-fetch > > -branch.sh > > @@ -0,0 +1,42 @@ > > +test_expect_success 'make some more commits' ' > > + ( > > + cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && > > + test_commit 2 && > > + git checkout -b another_branch && > > + test_commit 3 > > Broken &&-chain. Thanks. > > + git checkout -b a_third_branch && > > + test_commit 4 > > + ) > > +' > > + > > +test_expect_success 'fetch with refspec only fetches requested > > branch' ' > > + test_when_finished "rm trace" && > > + ( > > + cd clone && > > + GIT_TRACE_PACKET="$TRASH_DIRECTORY/trace" git fetch > > origin another_branch && > > + ! grep "refs/heads/master" ../trace > > + ) > > +' > > This could be done without the subshell, perhaps? > > GIT_TRACE_PACKET=blah git -C clone fetch ... Will fix these, thanks. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html