Johannes Sixt [off-list ref] writes:
- If pack-objects sees an error, it terminates with failure. Since this
breaks the pipe to rev-list, rev-list is killed with SIGPIPE.
I was a bit uneasy about this part. We do not explicitly tell
rev-list not to ignore SIGPIPE, so it could spin fruitlessly
listing revs and calling write(2). But the error from that
write should already be handled correctly anyway, so this should
be Ok.
The test case checks for failures in rev-list (a missing
object). Any hints how to trigger a failure in pack-objects
that does not also trigger in rev-list would be welcome.
How about removing a blob from the test repository to corrupt
it? rev-list --objects I think would happily list the blob
because it sees its name in its containing tree without checking
its existence.
Previously, the test only triggered a failure in upload-pack's rev-list
subprocess. Here we also test for a failure of pack-objects, and make sure
that the right process failed.
Signed-off-by: Johannes Sixt <redacted>
---
On Monday 05 November 2007 21:05, Junio C Hamano wrote:
> > The test case checks for failures in rev-list (a missing
> > object). Any hints how to trigger a failure in pack-objects
> > that does not also trigger in rev-list would be welcome.
>
> How about removing a blob from the test repository to corrupt
> it? rev-list --objects I think would happily list the blob
> because it sees its name in its containing tree without checking
> its existence.
That does it. This goes on top of my previous patch.
-- Hannes
t/t5530-upload-pack-error.sh | 27 +++++++++++++++++++++++----
1 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/t/t5530-upload-pack-error.sh b/t/t5530-upload-pack-error.sh
index 9923ba0..70d4f86 100755
--- a/t/t5530-upload-pack-error.sh
+++ b/t/t5530-upload-pack-error.sh
@@ -15,7 +15,7 @@ test_expect_success 'setup and corrupt repository' '
test_tick &&
echo changed >file &&
git commit -a -m changed &&
- rm -f .git/objects/f7/3f3093ff865c514c6c51f867e35f693487d0d3
+ rm -f .git/objects/5e/a2ed416fbd4a4cbe227b75fe255dd7fa6bd4d6
'
@@ -24,14 +24,33 @@ test_expect_failure 'fsck fails' '
git fsck
'
-test_expect_failure 'upload pack fails due to error in rev-list' '
+test_expect_success 'upload-pack fails due to error in pack-objects' '
- echo "0032want $(git rev-parse HEAD)
+ ! echo "0032want $(git rev-parse HEAD)
00000009done
-0000" | git-upload-pack . > /dev/null
+0000" | git-upload-pack . > /dev/null 2> output.err &&
+ grep "pack-objects died" output.err
+'
+
+test_expect_success 'corrupt repo differently' '
+
+ git hash-object -w file &&
+ rm -f .git/objects/be/c63e37d08c454ad3a60cde90b70f3f7d077852
'
+test_expect_failure 'fsck fails' '
+
+ git fsck
+'
+test_expect_success 'upload-pack fails due to error in rev-list' '
+
+ ! echo "0032want $(git rev-parse HEAD)
+00000009done
+0000" | git-upload-pack . > /dev/null 2> output.err &&
+ grep "waitpid (async) failed" output.err
+'
+
test_expect_success 'create empty repository' '
mkdir foo &&
--
1.5.3.4.315.g2ce38