On Sun, May 3, 2015 at 10:30 AM, Karthik Nayak <karthik.188@xxxxxxxxx> wrote: > 'git cat-file' throws an error while trying to print the type or > size of a broken/corrupt object. This is because these objects are > usually of unknown types. > > Teach git cat-file a '--allow-unknown-type' option where it prints > the type or size of a broken/corrupt object without throwing > an error. > > Modify '-t' and '-s' options to call sha1_object_info_extended() > directly to support the '--allow-unknown-type' option. > > Add documentation for 'cat-file --allow-unknown-type'. This round is looking much better than earlier rounds. Just a few very minor comments below... > Helped-by: Junio C Hamano <gitster@xxxxxxxxx> > Helped-by: Eric Sunshine <sunshine@xxxxxxxxxxxxxx> > Signed-off-by: Karthik Nayak <karthik.188@xxxxxxxxx> > > cat-file: add documentation for '--allow-unknown-type' option. > > Signed-off-by: Karthik Nayak <karthik.188@xxxxxxxxx> This got botched when you folded the documentation patch into this one. Drop the redundant "cat-file: add documentation..." line and your extra sign-off. > --- > diff --git a/builtin/cat-file.c b/builtin/cat-file.c > index 53b5376..ecb4888 100644 > --- a/builtin/cat-file.c > +++ b/builtin/cat-file.c > @@ -9,13 +9,20 @@ > #include "userdiff.h" > #include "streaming.h" > > -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) > { > unsigned char sha1[20]; > enum object_type type; > char *buf; > unsigned long size; > struct object_context obj_context; > + struct object_info oi = {NULL}; > + struct strbuf sb = STRBUF_INIT; > + unsigned flags = LOOKUP_REPLACE_OBJECT; > + > + if (unknown_type) > + flags |= LOOKUP_UNKNOWN_OBJECT; Nit: 'allow_unknown' (or perhaps 'allow_unknown_type') would be a more informative variable name than 'unknown_type', and would make this conditional easier to understand. > if (get_sha1_with_context(obj_name, 0, sha1, &obj_context)) > die("Not a valid object name %s", obj_name); > @@ -359,6 +368,7 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix) > int opt = 0; > const char *exp_type = NULL, *obj_name = NULL; > struct batch_options batch = {0}; > + int unknown_type = 0; Ditto: s/unknown_type/allow_unknown/ > const struct option options[] = { > OPT_GROUP(N_("<type> can be one of: blob, tree, commit, tag")), > @@ -369,6 +379,8 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix) > OPT_CMDMODE('p', NULL, &opt, N_("pretty-print object's content"), 'p'), > OPT_CMDMODE(0, "textconv", &opt, > N_("for blob objects, run textconv on object's content"), 'c'), > + OPT_BOOL( 0, "allow-unknown-type", &unknown_type, > + N_("allow -s and -t to work with broken/corrupt objects")), > { OPTION_CALLBACK, 0, "batch", &batch, "format", > N_("show info and content of objects fed from the standard input"), > PARSE_OPT_OPTARG, batch_option_callback }, > @@ -402,5 +414,7 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix) > if (batch.enabled) > return batch_objects(&batch); > > - return cat_one_file(opt, exp_type, obj_name); > + if (unknown_type && opt != 't' && opt != 's') > + die("git cat-file --allow-unknown-type: use with -s or -t"); > + return cat_one_file(opt, exp_type, obj_name, unknown_type); > } > -- > 2.4.0.rc1.250.gfbd73bd -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html