Re: [PATCH v2] unpack-trees: don't update files with CE_WT_REMOVE set

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Anatole tells me that this works for us.  Thanks.

On Sat, 2015-07-18 at 15:37 +0700, Duy Nguyen wrote:
> On Fri, Jul 17, 2015 at 05:19:27PM -0400, David Turner wrote:
> > Don't update files in the worktree from cache entries which are
> > flagged with CE_WT_REMOVE.
> > 
> > When a user does a sparse checkout, git removes files that are marked
> > with CE_WT_REMOVE (because they are out-of-scope for the sparse
> > checkout). If those files are also marked CE_UPDATE (for instance,
> > because they differ in the branch that is being checked out and the
> > outgoing branch), git would previously recreate them.  This patch
> > prevents them from being recreated.
> > 
> > These erroneously-created files would also interfere with merges,
> > causing pre-merge revisions of out-of-scope files to appear in the
> > worktree.
> 
> Thank you both for catching this. Just a small suggestion. Perhaps we
> should do this instead. apply_sparse_checkout() is the function where
> all "action" manipulation (add, delete, update files..) for sparse
> checkout occurs and it should not ask to delete and update both at the
> same time.
> 
> -- 8< --
> diff --git a/unpack-trees.c b/unpack-trees.c
> index 2927660..d6cf849 100644
> --- a/unpack-trees.c
> +++ b/unpack-trees.c
> @@ -224,6 +224,9 @@ static int check_updates(struct unpack_trees_options *o)
>  		struct cache_entry *ce = index->cache[i];
>  
>  		if (ce->ce_flags & CE_UPDATE) {
> +			if (ce->ce_flags & CE_WT_REMOVE)
> +				die("BUG: both update and delete flags are set on %s",
> +				    ce->name);
>  			display_progress(progress, ++cnt);
>  			ce->ce_flags &= ~CE_UPDATE;
>  			if (o->update && !o->dry_run) {
> @@ -293,6 +296,7 @@ static int apply_sparse_checkout(struct index_state *istate,
>  		if (!(ce->ce_flags & CE_UPDATE) && verify_uptodate_sparse(ce, o))
>  			return -1;
>  		ce->ce_flags |= CE_WT_REMOVE;
> +		ce->ce_flags &= ~CE_UPDATE;
>  	}
>  	if (was_skip_worktree && !ce_skip_worktree(ce)) {
>  		if (verify_absent_sparse(ce, ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN, o))
> -- 8< --
> 
> --
> Duy


--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]