All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHv2 1/2] t5304-prune: demonstrate bug in pruning alternates
@ 2015-02-02 18:33 Jonathon Mah
  2015-02-02 18:34 ` [PATCHv2 2/2] sha1_file: fix iterating loose alternate objects Jonathon Mah
  2015-02-02 18:41 ` [PATCHv2 1/2] t5304-prune: demonstrate bug in pruning alternates Jeff King
  0 siblings, 2 replies; 3+ messages in thread
From: Jonathon Mah @ 2015-02-02 18:33 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Jeff King

Signed-off-by: Jonathon Mah <me@JonathonMah.com>
---
Adjust prune test directly, much nicer.

 t/t5304-prune.sh          | 13 +++++++++++++
 t/t5710-info-alternate.sh |  4 ++--
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/t/t5304-prune.sh b/t/t5304-prune.sh
index e32e46d..e825be7 100755
--- a/t/t5304-prune.sh
+++ b/t/t5304-prune.sh
@@ -253,4 +253,17 @@ test_expect_success 'prune .git/shallow' '
 	test_path_is_missing .git/shallow
 '
 
+test_expect_success 'prune: handle alternate object database' '
+	test_create_repo A && cd A &&
+	echo "Hello World" > file1 &&
+	git add file1 &&
+	git commit -m "Initial commit" file1 &&
+	cd .. &&
+	git clone -l -s A B && cd B &&
+	echo "foo bar" > file2 &&
+	git add file2 &&
+	git commit -m "next commit" file2 &&
+	git prune
+'
+
 test_done
diff --git a/t/t5710-info-alternate.sh b/t/t5710-info-alternate.sh
index 5a6e49d..d82844a 100755
--- a/t/t5710-info-alternate.sh
+++ b/t/t5710-info-alternate.sh
@@ -18,6 +18,7 @@ reachable_via() {
 
 test_valid_repo() {
 	git fsck --full > fsck.log &&
+	git prune &&
 	test_line_count = 0 fsck.log
 }
 
@@ -47,8 +48,7 @@ test_expect_success 'preparing third repository' \
 'git clone -l -s B C && cd C &&
 echo "Goodbye, cruel world" > file3 &&
 git add file3 &&
-git commit -m "one more" file3 &&
-git repack -a -d -l &&
+git commit -m "one more without packing" file3 &&
 git prune'
 
 cd "$base_dir"
-- 
2.3.0.rc2.2.g184f7a0

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

* [PATCHv2 2/2] sha1_file: fix iterating loose alternate objects
  2015-02-02 18:33 [PATCHv2 1/2] t5304-prune: demonstrate bug in pruning alternates Jonathon Mah
@ 2015-02-02 18:34 ` Jonathon Mah
  2015-02-02 18:41 ` [PATCHv2 1/2] t5304-prune: demonstrate bug in pruning alternates Jeff King
  1 sibling, 0 replies; 3+ messages in thread
From: Jonathon Mah @ 2015-02-02 18:34 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Jeff King

The string in 'base' contains a path suffix to a specific object; when
its value is used, the suffix must either be filled (as in
stat_sha1_file, open_sha1_file, check_and_freshen_nonlocal) or cleared
(as in prepare_packed_git) to avoid junk at the end.  loose_from_alt_odb
(introduced in 660c889e46d185dc98ba78963528826728b0a55d) did neither and
treated 'base' as a complete path to the "base" object directory,
instead of a pointer to the "base" of the full path string.

The trailing path after 'base' is still initialized to NUL, hiding the
bug in some common cases.  Additionally the descendent
for_each_file_in_obj_subdir function swallows ENOENT, so an error only
shows if the alternate's path was last filled with a valid object
(where statting /path/to/existing/00/0bjectfile/00 fails).

Signed-off-by: Jonathon Mah <me@JonathonMah.com>
---
 sha1_file.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/sha1_file.c b/sha1_file.c
index 30995e6..fcb1c4b 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -3396,9 +3396,13 @@ static int loose_from_alt_odb(struct alternate_object_database *alt,
 			      void *vdata)
 {
 	struct loose_alt_odb_data *data = vdata;
-	return for_each_loose_file_in_objdir(alt->base,
-					     data->cb, NULL, NULL,
-					     data->data);
+	int r;
+	alt->name[-1] = 0;
+	r = for_each_loose_file_in_objdir(alt->base,
+					  data->cb, NULL, NULL,
+					  data->data);
+	alt->name[-1] = '/';
+	return r;
 }
 
 int for_each_loose_object(each_loose_object_fn cb, void *data)
-- 
2.3.0.rc2.2.g184f7a0

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

* Re: [PATCHv2 1/2] t5304-prune: demonstrate bug in pruning alternates
  2015-02-02 18:33 [PATCHv2 1/2] t5304-prune: demonstrate bug in pruning alternates Jonathon Mah
  2015-02-02 18:34 ` [PATCHv2 2/2] sha1_file: fix iterating loose alternate objects Jonathon Mah
@ 2015-02-02 18:41 ` Jeff King
  1 sibling, 0 replies; 3+ messages in thread
From: Jeff King @ 2015-02-02 18:41 UTC (permalink / raw)
  To: Jonathon Mah; +Cc: Junio C Hamano, git

On Mon, Feb 02, 2015 at 10:33:02AM -0800, Jonathon Mah wrote:

> Signed-off-by: Jonathon Mah <me@JonathonMah.com>
> ---
> Adjust prune test directly, much nicer.

Agreed, this is much nicer. A few comments:

> +test_expect_success 'prune: handle alternate object database' '

This test fails, so we either need expect_failure here, or it just needs
to be squashed in with the fix (I generally prefer the latter).

> +	test_create_repo A && cd A &&

We generally prefer to chdir in a subshell, so that a failure in the
test does not leave further tests in a confusing spot. Like:

  test_create_repo A &&
  (
	cd A &&
	... do stuff in repo ...
	# no need to cd ..
  ) &&
  .. do stuff outside repo ...

> +	echo "Hello World" > file1 &&

Style nit: we prefer ">file1" with no space.

> +	git add file1 &&
> +	git commit -m "Initial commit" file1 &&
> +	cd .. &&
> +	git clone -l -s A B && cd B &&

"-l" is a noop these days. I don't think it is hurting, but I'd prefer
not to propagate bad habits in our tests.

> diff --git a/t/t5710-info-alternate.sh b/t/t5710-info-alternate.sh
> index 5a6e49d..d82844a 100755
> --- a/t/t5710-info-alternate.sh
> +++ b/t/t5710-info-alternate.sh

We can drop this change, then, right?

-Peff

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

end of thread, other threads:[~2015-02-02 18:41 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-02 18:33 [PATCHv2 1/2] t5304-prune: demonstrate bug in pruning alternates Jonathon Mah
2015-02-02 18:34 ` [PATCHv2 2/2] sha1_file: fix iterating loose alternate objects Jonathon Mah
2015-02-02 18:41 ` [PATCHv2 1/2] t5304-prune: demonstrate bug in pruning alternates Jeff King

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.