Browse Source

cat-file --batch / --batch-check: do not exit if hashes are missing

Previously, cat-file --batch / --batch-check would silently exit if it
was passed a non-existent SHA1 on stdin.  Now it prints "<SHA1>
missing" as in all other cases (and as advertised in the
documentation).

Note that cat-file --batch-check (but not --batch) will still output
"error: unable to find <SHA1>" on stderr if a non-existent SHA1 is
passed, but this does not affect parsing its stdout.

Also, type <= 0 was previously using the potentially uninitialized
type variable (relying on it being 0); it is now being initialized.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Lea Wiemann 17 years ago committed by Junio C Hamano
parent
commit
3c076dbe3c
  1. 9
      builtin-cat-file.c
  2. 24
      t/t1006-cat-file.sh

9
builtin-cat-file.c

@ -150,7 +150,7 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name) @@ -150,7 +150,7 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name)
static int batch_one_object(const char *obj_name, int print_contents)
{
unsigned char sha1[20];
enum object_type type;
enum object_type type = 0;
unsigned long size;
void *contents = contents;

@ -168,8 +168,11 @@ static int batch_one_object(const char *obj_name, int print_contents) @@ -168,8 +168,11 @@ static int batch_one_object(const char *obj_name, int print_contents)
else
type = sha1_object_info(sha1, &size);

if (type <= 0)
return 1;
if (type <= 0) {
printf("%s missing\n", obj_name);
fflush(stdout);
return 0;
}

printf("%s %s %lu\n", sha1_to_hex(sha1), typename(type), size);
fflush(stdout);

24
t/t1006-cat-file.sh

@ -174,9 +174,27 @@ do @@ -174,9 +174,27 @@ do
'
done

test_expect_success "--batch-check for a non-existent object" '
test "deadbeef missing" = \
"$(echo_without_newline deadbeef | git cat-file --batch-check)"
test_expect_success "--batch-check for a non-existent named object" '
test "foobar42 missing
foobar84 missing" = \
"$( ( echo foobar42; echo_without_newline foobar84; ) | git cat-file --batch-check)"
'

test_expect_success "--batch-check for a non-existent hash" '
test "0000000000000000000000000000000000000042 missing
0000000000000000000000000000000000000084 missing" = \
"$( ( echo 0000000000000000000000000000000000000042;
echo_without_newline 0000000000000000000000000000000000000084; ) \
| git cat-file --batch-check)"
'

test_expect_success "--batch for an existent and a non-existent hash" '
test "$tag_sha1 tag $tag_size
$tag_content
0000000000000000000000000000000000000000 missing" = \
"$( ( echo $tag_sha1;
echo_without_newline 0000000000000000000000000000000000000000; ) \
| git cat-file --batch)"
'

test_expect_success "--batch-check for an emtpy line" '

Loading…
Cancel
Save