* [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).