fetch: verify we have everything we need before updating our ref
authorJunio C Hamano <gitster@pobox.com>
Thu, 1 Sep 2011 22:43:35 +0000 (15:43 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 1 Sep 2011 22:46:13 +0000 (15:46 -0700)
commit6b67e0dc068d1bfd07686071b70f60078380666f
tree826541fa52ed5fdee3458bd4c11af57af58a8368
parent5a48d24012fa39cdd02c1cb614db2e62d445e2ce
fetch: verify we have everything we need before updating our ref

The "git fetch" command works in two phases. The remote side tells us what
objects are at the tip of the refs we are fetching from, and transfers the
objects missing from our side. After storing the objects in our repository,
we update our remote tracking branches to point at the updated tips of the
refs.

A broken or malicious remote side could send a perfectly well-formed pack
data during the object transfer phase, but there is no guarantee that the
given data actually fill the gap between the objects we originally had and
the refs we are updating to.

Although this kind of breakage can be caught by running fsck after a
fetch, it is much cheaper to verify that everything that is reachable from
the tips of the refs we fetched are indeed fully connected to the tips of
our current set of refs before we update them.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/fetch.c