git.vger.kernel.org archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).