unpack-trees: only clear CE_UPDATE|CE_REMOVE when skip-worktree is always set
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Sat, 31 Jul 2010 06:14:26 +0000 (13:14 +0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 9 Aug 2010 19:15:53 +0000 (12:15 -0700)
commiteec3fc03092e308694d56b875a858065730822e2
treea5a7bb66ef5e3240978e0ab9a8268ba3f303bc85
parent7f71a6ae184d4aad78b37b9eeda4d7a6e5a01d99
unpack-trees: only clear CE_UPDATE|CE_REMOVE when skip-worktree is always set

The purpose of this clearing is, as explained in comment, because
verify_*() may set those bits before apply_sparse_checkout() is
called. By that time, it's not clear whether an entry will stay in
checkout area or out. After $GIT_DIR/info/sparse-checkout is applied,
we know what entries will be in finally. It's time to clean unwanted
bits.

That works perfectly when checkout area remains unchanged. When
checkout area changes, apply_sparse_checkout() may set CE_UPDATE
or CE_WT_REMOVE to widen/narrow checkout area. Doing the clearing
after apply_sparse_checkout() may clear those widening/narrowing
bits unexpectedly.

So, only do that on entries that are not affected by checkout area
changes (i.e. skip-worktree bit does not change after
apply_sparse_checkout).

This code does not actually fix anything though, just
future-proof. The removed code and the narrow/widen code inside
apply_sparse_checkout are currently independent (narrow code never
sets CE_REMOVE, widen code sets CE_UPDATE, but ce_skip_worktree()
would be false).

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t1011-read-tree-sparse-checkout.sh
unpack-trees.c