All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH 1/2] sparse checkout: show error messages when worktree shaping fails
       [not found] <1316602259-22576-1-git-send-email-pclouds@gmail.com>
@ 2011-09-21 19:15 ` Joshua Jensen
  2011-09-21 20:50 ` Junio C Hamano
  1 sibling, 0 replies; 5+ messages in thread
From: Joshua Jensen @ 2011-09-21 19:15 UTC (permalink / raw)
  To: Nguyễn Thái Ngọc Duy; +Cc: git, Junio C Hamano, git

----- Original Message -----
From: Nguyễn Thái Ngọc Duy
Date: 9/21/2011 4:50 AM
>   			if (ce->ce_flags&  CE_ADDED&&
>   			verify_absent(ce, ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN, o))
> -					return -1;
> +				goto return_failed;
>
> -			if (apply_sparse_checkout(ce, o)) {
> -				ret = -1;
> -				goto done;
> -			}
> +			if (apply_sparse_checkout(ce, o))
> +				goto return_failed;
>   			if (!ce_skip_worktree(ce))
>   				empty_worktree = 0;
Unfortunately, this patch only collects and displays the first untracked 
file for me.  It does not display all of the files that would be 
overwritten (desired behavior, IMHO).

This script illustrates:

#!/bin/sh

rm -Rf utest || exit 1
mkdir utest || exit 1
cd utest || exit 1
git init
git config core.sparseCheckout true
echo *>.git/info/sparse-checkout
echo tracked>a
git add a
git commit -m a a
git branch side
echo tracked>b
echo tracked>c
git add b c
git commit -m bc
cat b
git checkout side
cat b
echo untracked>b
echo untracked>c
cat b
git checkout master
cat b

-Josh

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] sparse checkout: show error messages when worktree shaping fails
       [not found] <1316602259-22576-1-git-send-email-pclouds@gmail.com>
  2011-09-21 19:15 ` [PATCH 1/2] sparse checkout: show error messages when worktree shaping fails Joshua Jensen
@ 2011-09-21 20:50 ` Junio C Hamano
  2011-09-22 11:24   ` [PATCH v2 " Nguyễn Thái Ngọc Duy
  2011-09-22 11:24   ` [PATCH v2 2/2] Add explanation why we do not allow to sparse checkout to empty working tree Nguyễn Thái Ngọc Duy
  1 sibling, 2 replies; 5+ messages in thread
From: Junio C Hamano @ 2011-09-21 20:50 UTC (permalink / raw)
  To: Nguyễn Thái Ngọc Duy
  Cc: git, Michael, J, Gruber, git, Joshua Jensen

Please add a test when you reroll this, hopefully with help from Joshua.

Thanks.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v2 1/2] sparse checkout: show error messages when worktree shaping fails
  2011-09-21 20:50 ` Junio C Hamano
@ 2011-09-22 11:24   ` Nguyễn Thái Ngọc Duy
  2011-09-22 19:57     ` Joshua Jensen
  2011-09-22 11:24   ` [PATCH v2 2/2] Add explanation why we do not allow to sparse checkout to empty working tree Nguyễn Thái Ngọc Duy
  1 sibling, 1 reply; 5+ messages in thread
From: Nguyễn Thái Ngọc Duy @ 2011-09-22 11:24 UTC (permalink / raw)
  To: git, Junio C Hamano
  Cc: Michael J Gruber, Joshua Jensen, Nguyễn Thái Ngọc Duy

verify_* functions can queue errors up and to be printed later at
label return_failed. In case of errors, do not go to label "done"
directly because all queued messages would be dropped on the floor.

Found-by: Joshua Jensen <jjensen@workspacewhiz.com>
Tracked-down-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 Now print all errors.

 t/t1011-read-tree-sparse-checkout.sh |   15 +++++++++++++++
 unpack-trees.c                       |   13 ++++++++++---
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/t/t1011-read-tree-sparse-checkout.sh b/t/t1011-read-tree-sparse-checkout.sh
index 018c354..efcd8ab 100755
--- a/t/t1011-read-tree-sparse-checkout.sh
+++ b/t/t1011-read-tree-sparse-checkout.sh
@@ -234,4 +234,19 @@ test_expect_success 'read-tree --reset removes outside worktree' '
 	test_cmp empty result
 '
 
+test_expect_success 'print errors when failed to update worktree' '
+	echo sub >.git/info/sparse-checkout &&
+	git checkout -f init &&
+	mkdir sub &&
+	touch sub/added sub/addedtoo &&
+	test_must_fail git checkout top 2>actual &&
+	cat >expected <<\EOF &&
+error: The following untracked working tree files would be overwritten by checkout:
+	sub/added
+	sub/addedtoo
+Please move or remove them before you can switch branches.
+EOF
+	test_cmp expected actual
+'
+
 test_done
diff --git a/unpack-trees.c b/unpack-trees.c
index cc616c3..fcf40a0 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -1089,6 +1089,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
 		 */
 		mark_new_skip_worktree(o->el, &o->result, CE_ADDED, CE_SKIP_WORKTREE | CE_NEW_SKIP_WORKTREE);
 
+		ret = 0;
 		for (i = 0; i < o->result.cache_nr; i++) {
 			struct cache_entry *ce = o->result.cache[i];
 
@@ -1101,17 +1102,23 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
 			 * correct CE_NEW_SKIP_WORKTREE
 			 */
 			if (ce->ce_flags & CE_ADDED &&
-			    verify_absent(ce, ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN, o))
-					return -1;
+			    verify_absent(ce, ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN, o)) {
+				if (!o->show_all_errors)
+					goto return_failed;
+				ret = -1;
+			}
 
 			if (apply_sparse_checkout(ce, o)) {
+				if (!o->show_all_errors)
+					goto return_failed;
 				ret = -1;
-				goto done;
 			}
 			if (!ce_skip_worktree(ce))
 				empty_worktree = 0;
 
 		}
+		if (ret < 0)
+			goto return_failed;
 		if (o->result.cache_nr && empty_worktree) {
 			/* dubious---why should this fail??? */
 			ret = unpack_failed(o, "Sparse checkout leaves no entry on working directory");
-- 
1.7.3.1.256.g2539c.dirty

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v2 2/2] Add explanation why we do not allow to sparse checkout to empty working tree
  2011-09-21 20:50 ` Junio C Hamano
  2011-09-22 11:24   ` [PATCH v2 " Nguyễn Thái Ngọc Duy
@ 2011-09-22 11:24   ` Nguyễn Thái Ngọc Duy
  1 sibling, 0 replies; 5+ messages in thread
From: Nguyễn Thái Ngọc Duy @ 2011-09-22 11:24 UTC (permalink / raw)
  To: git, Junio C Hamano
  Cc: Michael J Gruber, Joshua Jensen, Nguyễn Thái Ngọc Duy


Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 unpack-trees.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/unpack-trees.c b/unpack-trees.c
index fcf40a0..bacb473 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -1119,8 +1119,13 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
 		}
 		if (ret < 0)
 			goto return_failed;
+		/*
+		 * Sparse checkout is meant to narrow down checkout area
+		 * but it does not make sense to narrow down to empty working
+		 * tree. This is usually a mistake in sparse checkout rules.
+		 * Do not allow users to do that.
+		 */
 		if (o->result.cache_nr && empty_worktree) {
-			/* dubious---why should this fail??? */
 			ret = unpack_failed(o, "Sparse checkout leaves no entry on working directory");
 			goto done;
 		}
-- 
1.7.3.1.256.g2539c.dirty

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2 1/2] sparse checkout: show error messages when worktree shaping fails
  2011-09-22 11:24   ` [PATCH v2 " Nguyễn Thái Ngọc Duy
@ 2011-09-22 19:57     ` Joshua Jensen
  0 siblings, 0 replies; 5+ messages in thread
From: Joshua Jensen @ 2011-09-22 19:57 UTC (permalink / raw)
  To: Nguyễn Thái Ngọc Duy
  Cc: git, Junio C Hamano, Michael J Gruber

----- Original Message -----
From: Nguyễn Thái Ngọc Duy
Date: 9/22/2011 5:24 AM
> diff --git a/unpack-trees.c b/unpack-trees.c
> index cc616c3..fcf40a0 100644
> --- a/unpack-trees.c
> +++ b/unpack-trees.c
> @@ -1089,6 +1089,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
>   		 */
>   		mark_new_skip_worktree(o->el,&o->result, CE_ADDED, CE_SKIP_WORKTREE | CE_NEW_SKIP_WORKTREE);
>
> +		ret = 0;
>   		for (i = 0; i<  o->result.cache_nr; i++) {
>   			struct cache_entry *ce = o->result.cache[i];
>
> @@ -1101,17 +1102,23 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
>   			 * correct CE_NEW_SKIP_WORKTREE
>   			 */
>   			if (ce->ce_flags&  CE_ADDED&&
> -			    verify_absent(ce, ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN, o))
> -					return -1;
> +			    verify_absent(ce, ERROR_WOULD_LOSE_UNTRACKED_OVERWRITTEN, o)) {
> +				if (!o->show_all_errors)
> +					goto return_failed;
> +				ret = -1;
> +			}
>
>   			if (apply_sparse_checkout(ce, o)) {
> +				if (!o->show_all_errors)
> +					goto return_failed;
>   				ret = -1;
> -				goto done;
>   			}
>   			if (!ce_skip_worktree(ce))
>   				empty_worktree = 0;
>
>   		}
> +		if (ret<  0)
> +			goto return_failed;
>   		if (o->result.cache_nr&&  empty_worktree) {
>   			/* dubious---why should this fail??? */
>   			ret = unpack_failed(o, "Sparse checkout leaves no entry on working directory");
I can confirm that this version of the patch works for me with multiple 
untracked files in a sparse checkout.

-Josh

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-09-22 19:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1316602259-22576-1-git-send-email-pclouds@gmail.com>
2011-09-21 19:15 ` [PATCH 1/2] sparse checkout: show error messages when worktree shaping fails Joshua Jensen
2011-09-21 20:50 ` Junio C Hamano
2011-09-22 11:24   ` [PATCH v2 " Nguyễn Thái Ngọc Duy
2011-09-22 19:57     ` Joshua Jensen
2011-09-22 11:24   ` [PATCH v2 2/2] Add explanation why we do not allow to sparse checkout to empty working tree Nguyễn Thái Ngọc Duy

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.