git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 17, 2015, 21:34 UTC
Message-ID
<xmqqbnfa1na6.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1437167967-5933-1-git-send-email-dturner@twopensource.com>
David Turner <dturner@twopensource.com> writes:
Show 17 quoted lines
> 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.
>
> Signed-off-by: Anatole Shaw <git-devel@omni.poc.net>
> Signed-off-by: David Turner <dturner@twopensource.com>
> ---
That's much more readable and understandable ;-)
Duy Cc'ed for final sanity check and possiible extra comments.
Thanks.
Show 76 quoted lines
>  t/t1090-sparse-checkout-scope.sh | 52 ++++++++++++++++++++++++++++++++++++++++
>  unpack-trees.c                   |  2 +-
>  2 files changed, 53 insertions(+), 1 deletion(-)
>  create mode 100755 t/t1090-sparse-checkout-scope.sh
>
> diff --git a/t/t1090-sparse-checkout-scope.sh b/t/t1090-sparse-checkout-scope.sh
> new file mode 100755
> index 0000000..1f61eb3
> --- /dev/null
> +++ b/t/t1090-sparse-checkout-scope.sh
> @@ -0,0 +1,52 @@
> +#!/bin/sh
> +
> +test_description='sparse checkout scope tests'
> +
> +. ./test-lib.sh
> +
> +test_expect_success 'setup' '
> +	echo "initial" >a &&
> +	echo "initial" >b &&
> +	echo "initial" >c &&
> +	git add a b c &&
> +	git commit -m "initial commit"
> +'
> +
> +test_expect_success 'create feature branch' '
> +	git checkout -b feature &&
> +	echo "modified" >b &&
> +	echo "modified" >c &&
> +	git add b c &&
> +	git commit -m "modification"
> +'
> +
> +test_expect_success 'perform sparse checkout of master' '
> +	git config --local --bool core.sparsecheckout true &&
> +	echo "!/*" >.git/info/sparse-checkout &&
> +	echo "/a" >>.git/info/sparse-checkout &&
> +	echo "/c" >>.git/info/sparse-checkout &&
> +	git checkout master &&
> +	test_path_is_file a &&
> +	test_path_is_missing b &&
> +	test_path_is_file c
> +'
> +
> +test_expect_success 'merge feature branch into sparse checkout of master' '
> +	git merge feature &&
> +	test_path_is_file a &&
> +	test_path_is_missing b &&
> +	test_path_is_file c &&
> +	test "$(cat c)" = "modified"
> +'
> +
> +test_expect_success 'return to full checkout of master' '
> +	git checkout feature &&
> +	echo "/*" >.git/info/sparse-checkout &&
> +	git checkout master &&
> +	test_path_is_file a &&
> +	test_path_is_file b &&
> +	test_path_is_file c &&
> +	test "$(cat b)" = "modified"
> +'
> +
> +test_done
> diff --git a/unpack-trees.c b/unpack-trees.c
> index 2927660..11a5300 100644
> --- a/unpack-trees.c
> +++ b/unpack-trees.c
> @@ -223,7 +223,7 @@ static int check_updates(struct unpack_trees_options *o)
>  	for (i = 0; i < index->cache_nr; i++) {
>  		struct cache_entry *ce = index->cache[i];
>  
> -		if (ce->ce_flags & CE_UPDATE) {
> +		if (ce->ce_flags & CE_UPDATE && !(ce->ce_flags & CE_WT_REMOVE)) {
>  			display_progress(progress, ++cnt);
>  			ce->ce_flags &= ~CE_UPDATE;
>  			if (o->update && !o->dry_run) {
Previous: David TurnerNext: Duy Nguyen
Message 4 of 8 in “unpack-trees: don't update files flagged for deletion”
  1. unpack-trees: don't update files flagged for deletionDavid Turner, Jul 17, 2015
  2. Junio C HamanoJul 17, 2015
  3. unpack-trees: don't update files with CE_WT_REMOVE setDavid Turner, Jul 17, 2015
  4. Junio C HamanoJul 17, 2015
  5. Duy NguyenJul 18, 2015
  6. Junio C HamanoJul 18, 2015
  7. Junio C HamanoJul 21, 2015
  8. David TurnerJul 20, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.