checkout: "best effort" checkout
authorJunio C Hamano <gitster@pobox.com>
Wed, 28 May 2008 22:26:59 +0000 (15:26 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 30 May 2008 00:35:22 +0000 (17:35 -0700)
commit291d823e364cb51cab67f0786b809fe038b92aa8
treec1693e89ac66f0258a9663fe1853328c8809ad15
parent2e2b887d1c2c2385825160e587d711ecb5935ef5
checkout: "best effort" checkout

When unpack_trees() returned an error while switching branches, we used to
stop right there, exiting without writing the index out or switching HEAD.

This is Ok when unpack_trees() returned an error because it detected
untracked files or locally modified paths that could be overwritten by
branch switching, because that error return is done before we start to
modify the work tree.  But it is undesirable if unpack_trees() already
started to update the work tree and a failure is returned because some but
not all paths are updated in the work tree, perhaps because a directory
that some files need to go in was read-only by mistake, or a file that
will be overwritten by branch switching had a mandatory lock on it and we
failed to unlink it.

This changes the behaviour upon such an error to complete the branch
switching; the files updated in the work tree will hopefully be much more
consistent with the index and HEAD derived from the switched-to branch.

We still issue error messages, and exit the command with non-zero status,
so scripted callers need to notice it.

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