Browse Source

builtin/cat-file: convert some static functions to struct object_id

Convert all of the static functions that are not callbacks to use struct
object_id.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
brian m. carlson 8 years ago committed by Junio C Hamano
parent
commit
63ecb99e0d
  1. 50
      builtin/cat-file.c

50
builtin/cat-file.c

@ -23,7 +23,7 @@ struct batch_options {
static int cat_one_file(int opt, const char *exp_type, const char *obj_name, static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
int unknown_type) int unknown_type)
{ {
unsigned char sha1[20]; struct object_id oid;
enum object_type type; enum object_type type;
char *buf; char *buf;
unsigned long size; unsigned long size;
@ -35,14 +35,14 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
if (unknown_type) if (unknown_type)
flags |= LOOKUP_UNKNOWN_OBJECT; flags |= LOOKUP_UNKNOWN_OBJECT;


if (get_sha1_with_context(obj_name, 0, sha1, &obj_context)) if (get_sha1_with_context(obj_name, 0, oid.hash, &obj_context))
die("Not a valid object name %s", obj_name); die("Not a valid object name %s", obj_name);


buf = NULL; buf = NULL;
switch (opt) { switch (opt) {
case 't': case 't':
oi.typename = &sb; oi.typename = &sb;
if (sha1_object_info_extended(sha1, &oi, flags) < 0) if (sha1_object_info_extended(oid.hash, &oi, flags) < 0)
die("git cat-file: could not get object info"); die("git cat-file: could not get object info");
if (sb.len) { if (sb.len) {
printf("%s\n", sb.buf); printf("%s\n", sb.buf);
@ -53,24 +53,24 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,


case 's': case 's':
oi.sizep = &size; oi.sizep = &size;
if (sha1_object_info_extended(sha1, &oi, flags) < 0) if (sha1_object_info_extended(oid.hash, &oi, flags) < 0)
die("git cat-file: could not get object info"); die("git cat-file: could not get object info");
printf("%lu\n", size); printf("%lu\n", size);
return 0; return 0;


case 'e': case 'e':
return !has_sha1_file(sha1); return !has_object_file(&oid);


case 'c': case 'c':
if (!obj_context.path[0]) if (!obj_context.path[0])
die("git cat-file --textconv %s: <object> must be <sha1:path>", die("git cat-file --textconv %s: <object> must be <sha1:path>",
obj_name); obj_name);


if (textconv_object(obj_context.path, obj_context.mode, sha1, 1, &buf, &size)) if (textconv_object(obj_context.path, obj_context.mode, oid.hash, 1, &buf, &size))
break; break;


case 'p': case 'p':
type = sha1_object_info(sha1, NULL); type = sha1_object_info(oid.hash, NULL);
if (type < 0) if (type < 0)
die("Not a valid object name %s", obj_name); die("Not a valid object name %s", obj_name);


@ -83,8 +83,8 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
} }


if (type == OBJ_BLOB) if (type == OBJ_BLOB)
return stream_blob_to_fd(1, sha1, NULL, 0); return stream_blob_to_fd(1, oid.hash, NULL, 0);
buf = read_sha1_file(sha1, &type, &size); buf = read_sha1_file(oid.hash, &type, &size);
if (!buf) if (!buf)
die("Cannot read object %s", obj_name); die("Cannot read object %s", obj_name);


@ -93,19 +93,19 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,


case 0: case 0:
if (type_from_string(exp_type) == OBJ_BLOB) { if (type_from_string(exp_type) == OBJ_BLOB) {
unsigned char blob_sha1[20]; struct object_id blob_oid;
if (sha1_object_info(sha1, NULL) == OBJ_TAG) { if (sha1_object_info(oid.hash, NULL) == OBJ_TAG) {
char *buffer = read_sha1_file(sha1, &type, &size); char *buffer = read_sha1_file(oid.hash, &type, &size);
const char *target; const char *target;
if (!skip_prefix(buffer, "object ", &target) || if (!skip_prefix(buffer, "object ", &target) ||
get_sha1_hex(target, blob_sha1)) get_oid_hex(target, &blob_oid))
die("%s not a valid tag", sha1_to_hex(sha1)); die("%s not a valid tag", oid_to_hex(&oid));
free(buffer); free(buffer);
} else } else
hashcpy(blob_sha1, sha1); oidcpy(&blob_oid, &oid);


if (sha1_object_info(blob_sha1, NULL) == OBJ_BLOB) if (sha1_object_info(blob_oid.hash, NULL) == OBJ_BLOB)
return stream_blob_to_fd(1, blob_sha1, NULL, 0); return stream_blob_to_fd(1, blob_oid.hash, NULL, 0);
/* /*
* we attempted to dereference a tag to a blob * we attempted to dereference a tag to a blob
* and failed; there may be new dereference * and failed; there may be new dereference
@ -113,7 +113,7 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name,
* fall-back to the usual case. * fall-back to the usual case.
*/ */
} }
buf = read_object_with_reference(sha1, exp_type, &size, NULL); buf = read_object_with_reference(oid.hash, exp_type, &size, NULL);
break; break;


default: default:
@ -233,28 +233,28 @@ static void batch_write(struct batch_options *opt, const void *data, int len)


static void print_object_or_die(struct batch_options *opt, struct expand_data *data) static void print_object_or_die(struct batch_options *opt, struct expand_data *data)
{ {
const unsigned char *sha1 = data->oid.hash; const struct object_id *oid = &data->oid;


assert(data->info.typep); assert(data->info.typep);


if (data->type == OBJ_BLOB) { if (data->type == OBJ_BLOB) {
if (opt->buffer_output) if (opt->buffer_output)
fflush(stdout); fflush(stdout);
if (stream_blob_to_fd(1, sha1, NULL, 0) < 0) if (stream_blob_to_fd(1, oid->hash, NULL, 0) < 0)
die("unable to stream %s to stdout", sha1_to_hex(sha1)); die("unable to stream %s to stdout", oid_to_hex(oid));
} }
else { else {
enum object_type type; enum object_type type;
unsigned long size; unsigned long size;
void *contents; void *contents;


contents = read_sha1_file(sha1, &type, &size); contents = read_sha1_file(oid->hash, &type, &size);
if (!contents) if (!contents)
die("object %s disappeared", sha1_to_hex(sha1)); die("object %s disappeared", oid_to_hex(oid));
if (type != data->type) if (type != data->type)
die("object %s changed type!?", sha1_to_hex(sha1)); die("object %s changed type!?", oid_to_hex(oid));
if (data->info.sizep && size != data->size) if (data->info.sizep && size != data->size)
die("object %s changed size!?", sha1_to_hex(sha1)); die("object %s changed size!?", oid_to_hex(oid));


batch_write(opt, contents, size); batch_write(opt, contents, size);
free(contents); free(contents);

Loading…
Cancel
Save