Teach git-fetch to grab a tag at the same time as a commit
authorShawn O. Pearce <spearce@spearce.org>
Mon, 3 Mar 2008 02:35:33 +0000 (21:35 -0500)
committerJunio C Hamano <gitster@pobox.com>
Mon, 3 Mar 2008 08:05:45 +0000 (00:05 -0800)
commitcf7f929a10f141d319d47c68646c88d5911de777
treedf8b13cf8f2542010b93732040a5f46bc5d1d3d2
parent767f176a1f11e07b9098f5094dbd9f4033e50504
Teach git-fetch to grab a tag at the same time as a commit

If the situation is the following on the remote and L is the common
base between both sides:

          T - tag1    S - tag2
         /           /
    L - A - O - O - B
     \               \
      origin/master   master

and we have decided to fetch "master" to acquire the range L..B we
can also nab tag S at the same time during the first connection,
as we can clearly see from the refs advertised by upload-pack that
S^{} = B and master = B.

Unfortunately we still cannot nab T at the same time as we are not
able to see that T^{} will also be in the range implied by L..B.
Such computations must be performed on the remote side (not yet
supported) or on the client side as post-processing (the current
behavior).

This optimization is an extension of the previous one in that it
helps on projects which tend to publish both a new commit and a
new tag, then lay idle for a while before publishing anything else.
Most followers are able to download both the new commit and the new
tag in one connection, rather than two.  git.git tends to follow
such patterns with its roughly once-daily updates from Junio.

A protocol extension and additional server side logic would be
necessary to also ensure T is grabbed on the first connection.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-fetch.c
t/t5503-tagfollow.sh [new file with mode: 0755]