bundle: fix wrong check of read_header()'s return value & add tests
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>
Tue, 6 Mar 2007 21:57:07 +0000 (22:57 +0100)
committerJunio C Hamano <junkio@cox.net>
Wed, 7 Mar 2007 06:06:46 +0000 (22:06 -0800)
If read_header() fails, it returns <0, not 0. Further, an open(/dev/null)
was not checked for errors.

Also, this adds two tests to make sure that the bundle file looks
correct, by checking if it has the header has the expected form, and that
the pack contains the right amount of objects.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-bundle.c
t/t5510-fetch.sh

index d0c361763c915f0577c7f88e819ae104d71f1e8b..3b3bc2582d9ebed74e16bd2144b371b7884191c6 100644 (file)
@@ -404,6 +404,8 @@ static int unbundle(struct bundle_header *header, int bundle_fd,
        if (verify_bundle(header, 0))
                return -1;
        dev_null = open("/dev/null", O_WRONLY);
+       if (dev_null < 0)
+               return error("Could not open /dev/null");
        pid = fork_with_pipe(argv_index_pack, &bundle_fd, &dev_null);
        if (pid < 0)
                return error("Could not spawn index-pack");
@@ -440,7 +442,7 @@ int cmd_bundle(int argc, const char **argv, const char *prefix)
 
        memset(&header, 0, sizeof(header));
        if (strcmp(cmd, "create") &&
-                       !(bundle_fd = read_header(bundle_file, &header)))
+                       (bundle_fd = read_header(bundle_file, &header)) < 0)
                return 1;
 
        if (!strcmp(cmd, "verify")) {
index fa76662dce3dd45cf9d59f57a151c7ab209d4014..ad589dd0dfb857ea2596e57215cf4c6e0f608afc 100755 (executable)
@@ -90,6 +90,13 @@ test_expect_success 'create bundle 1' '
        git bundle create bundle1 master^..master
 '
 
+test_expect_success 'header of bundle looks right' '
+       head -n 1 "$D"/bundle1 | grep "^#" &&
+       head -n 2 "$D"/bundle1 | grep "^-[0-9a-f]\{40\} " &&
+       head -n 3 "$D"/bundle1 | grep "^[0-9a-f]\{40\} " &&
+       head -n 4 "$D"/bundle1 | grep "^$"
+'
+
 test_expect_success 'create bundle 2' '
        cd "$D" &&
        git bundle create bundle2 master~2..master
@@ -101,6 +108,20 @@ test_expect_failure 'unbundle 1' '
        git fetch "$D/bundle1" master:master
 '
 
+test_expect_success 'bundle 1 has only 3 files ' '
+       cd "$D" &&
+       (
+               while read x && test -n "$x"
+               do
+                       :;
+               done
+               cat
+       ) <bundle1 >bundle.pack &&
+       git index-pack bundle.pack &&
+       verify=$(git verify-pack -v bundle.pack) &&
+       test 4 = $(echo "$verify" | wc -l)
+'
+
 test_expect_success 'unbundle 2' '
        cd "$D/bundle" &&
        git fetch ../bundle2 master:master &&