A few more options for git-cat-file
This adds '-e' option to git-cat-file, to test for the existence of the object. This also cleans up the option-parsing in git-cat-file slightly. [jc: HPA version had -n option which did rev-parse --verify; the real value of this patch is the option parsing cleanup.] Signed-off-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
e40b61fb6b
commit
7950571ad7
@ -8,7 +8,7 @@ git-cat-file - Provide content or type information for repository objects
|
|||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
'git-cat-file' (-t | -s | <type>) <object>
|
'git-cat-file' (-t | -s | -e | <type>) <object>
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
@ -29,6 +29,10 @@ OPTIONS
|
|||||||
Instead of the content, show the object size identified by
|
Instead of the content, show the object size identified by
|
||||||
<object>.
|
<object>.
|
||||||
|
|
||||||
|
-e::
|
||||||
|
Suppress all output; instead exit with zero status if <object>
|
||||||
|
exists and is a valid object.
|
||||||
|
|
||||||
<type>::
|
<type>::
|
||||||
Typically this matches the real type of <object> but asking
|
Typically this matches the real type of <object> but asking
|
||||||
for a type that can trivially be dereferenced from the given
|
for a type that can trivially be dereferenced from the given
|
||||||
@ -39,8 +43,11 @@ OPTIONS
|
|||||||
|
|
||||||
OUTPUT
|
OUTPUT
|
||||||
------
|
------
|
||||||
If '-t' is specified, one of the <type>. If '-s' is specified,
|
If '-t' is specified, one of the <type>.
|
||||||
the size of the <object> in bytes.
|
|
||||||
|
If '-s' is specified, the size of the <object> in bytes.
|
||||||
|
|
||||||
|
If '-e' is specified, no output.
|
||||||
|
|
||||||
Otherwise the raw (though uncompressed) contents of the <object> will
|
Otherwise the raw (though uncompressed) contents of the <object> will
|
||||||
be returned.
|
be returned.
|
||||||
|
45
cat-file.c
45
cat-file.c
@ -11,27 +11,44 @@ int main(int argc, char **argv)
|
|||||||
char type[20];
|
char type[20];
|
||||||
void *buf;
|
void *buf;
|
||||||
unsigned long size;
|
unsigned long size;
|
||||||
|
int opt;
|
||||||
|
|
||||||
setup_git_directory();
|
setup_git_directory();
|
||||||
if (argc != 3 || get_sha1(argv[2], sha1))
|
if (argc != 3 || get_sha1(argv[2], sha1))
|
||||||
usage("git-cat-file [-t | -s | <type>] <sha1>");
|
usage("git-cat-file [-t|-s|-e|<type>] <sha1>");
|
||||||
|
|
||||||
if (!strcmp("-t", argv[1]) || !strcmp("-s", argv[1])) {
|
opt = 0;
|
||||||
if (!sha1_object_info(sha1, type,
|
if ( argv[1][0] == '-' ) {
|
||||||
argv[1][1] == 's' ? &size : NULL)) {
|
opt = argv[1][1];
|
||||||
switch (argv[1][1]) {
|
if ( !opt || argv[1][2] )
|
||||||
case 't':
|
opt = -1; /* Not a single character option */
|
||||||
printf("%s\n", type);
|
}
|
||||||
break;
|
|
||||||
case 's':
|
buf = NULL;
|
||||||
printf("%lu\n", size);
|
switch (opt) {
|
||||||
break;
|
case 't':
|
||||||
}
|
if (!sha1_object_info(sha1, type, NULL)) {
|
||||||
|
printf("%s\n", type);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
buf = NULL;
|
break;
|
||||||
} else {
|
|
||||||
|
case 's':
|
||||||
|
if (!sha1_object_info(sha1, type, &size)) {
|
||||||
|
printf("%lu\n", size);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'e':
|
||||||
|
return !has_sha1_file(sha1);
|
||||||
|
|
||||||
|
case 0:
|
||||||
buf = read_object_with_reference(sha1, argv[1], &size, NULL);
|
buf = read_object_with_reference(sha1, argv[1], &size, NULL);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
die("git-cat-file: unknown option: %s\n", argv[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!buf)
|
if (!buf)
|
||||||
|
Loading…
Reference in New Issue
Block a user