Be more careful about updating refs
commitc3b0dec509fe136c5417422f31898b5a4e2d5e02
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 15 Jan 2008 23:50:17 +0000 (15 15:50 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 16 Jan 2008 19:53:35 +0000 (16 11:53 -0800)
tree68a7def9602e2f847f133081f0b90bd43e622b23
parent9f6fe82233fff26abd1a5315ba7709ccee078ec1
Be more careful about updating refs

This makes write_ref_sha1() more careful: it actually checks the SHA1 of
the ref it is updating, and refuses to update a ref with an object that it
cannot find.

Perhaps more importantly, it also refuses to update a branch head with a
non-commit object. I don't quite know *how* the stable series maintainers
were able to corrupt their repository to have a HEAD that pointed to a tag
rather than a commit object, but they did. Which results in a totally
broken repository that cannot be cloned or committed on.

So make it harder for people to shoot themselves in the foot like that.

The test t1400-update-ref.sh is fixed at the same time, as it
assumed that the commands involved in the particular test would
not care about corrupted repositories whose refs point at
nonexistant bogus objects.  That assumption does not hold true
anymore.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.c
t/t1400-update-ref.sh