|  | #include "cache.h" | 
|  | #include "test-tool.h" | 
|  | #include "repository.h" | 
|  | #include "object-store.h" | 
|  |  | 
|  | /* | 
|  | * Prints the size of the object corresponding to the given hash in a specific | 
|  | * gitdir. This is similar to "git -C gitdir cat-file -s", except that this | 
|  | * exercises the code that accesses the object of an arbitrary repository that | 
|  | * is not the_repository. ("git -C gitdir" makes it so that the_repository is | 
|  | * the one in gitdir.) | 
|  | */ | 
|  | static void object_info(const char *gitdir, const char *oid_hex) | 
|  | { | 
|  | struct repository r; | 
|  | struct object_id oid; | 
|  | unsigned long size; | 
|  | struct object_info oi = {.sizep = &size}; | 
|  | const char *p; | 
|  |  | 
|  | if (repo_init(&r, gitdir, NULL)) | 
|  | die("could not init repo"); | 
|  | if (parse_oid_hex(oid_hex, &oid, &p)) | 
|  | die("could not parse oid"); | 
|  | if (oid_object_info_extended(&r, &oid, &oi, 0)) | 
|  | die("could not obtain object info"); | 
|  | printf("%d\n", (int) size); | 
|  | } | 
|  |  | 
|  | int cmd__partial_clone(int argc, const char **argv) | 
|  | { | 
|  | setup_git_directory(); | 
|  |  | 
|  | if (argc < 4) | 
|  | die("too few arguments"); | 
|  |  | 
|  | if (!strcmp(argv[1], "object-info")) | 
|  | object_info(argv[2], argv[3]); | 
|  | else | 
|  | die("invalid argument '%s'", argv[1]); | 
|  |  | 
|  | return 0; | 
|  | } |