20
const char *format;
21
};
22
23
+static const char *force_path;
24
+
25
static int filter_object(const char *path, unsigned mode,
26
const unsigned char *sha1,
27
char **buf, unsigned long *size)
55
struct object_info oi = {NULL};
56
struct strbuf sb = STRBUF_INIT;
57
unsigned flags = LOOKUP_REPLACE_OBJECT;
58
+ const char *path = force_path;
59
60
if (unknown_type)
61
flags |= LOOKUP_UNKNOWN_OBJECT;
63
if (get_sha1_with_context(obj_name, 0, sha1, &obj_context))
64
die("Not a valid object name %s", obj_name);
65
66
+ if (!path)
67
+ path = obj_context.path;
68
+ if (obj_context.mode == S_IFINVALID)
69
+ obj_context.mode = 0100644;
70
+
71
buf = NULL;
72
switch (opt) {
73
case 't':
92
return !has_sha1_file(sha1);
93
94
case 'w':
87
- if (!obj_context.path[0])
95
+ if (!path[0])
96
die("git cat-file --filters %s: <object> must be "
97
"<sha1:path>", obj_name);
98
91
- if (filter_object(obj_context.path, obj_context.mode,
99
+ if (filter_object(path, obj_context.mode,
100
sha1, &buf, &size))
101
return -1;
102
break;
103
104
case 'c':
97
- if (!obj_context.path[0])
105
+ if (!path[0])
106
die("git cat-file --textconv %s: <object> must be <sha1:path>",
107
obj_name);
108
101
- if (textconv_object(obj_context.path, obj_context.mode, sha1, 1, &buf, &size))
109
+ if (textconv_object(path, obj_context.mode,
110
+ sha1, 1, &buf, &size))
111
break;
112
113
case 'p':
481
}
482
483
static const char * const cat_file_usage[] = {
475
- N_("git cat-file (-t [--allow-unknown-type]|-s [--allow-unknown-type]|-e|-p|<type>|--textconv|--filters) <object>"),
484
+ N_("git cat-file (-t [--allow-unknown-type]|-s [--allow-unknown-type]|-e|-p|<type>|--textconv|--filters) [--path=<path>] <object>"),
485
N_("git cat-file (--batch | --batch-check) [--follow-symlinks]"),
486
NULL
487
};
529
N_("for blob objects, run textconv on object's content"), 'c'),
530
OPT_CMDMODE(0, "filters", &opt,
531
N_("for blob objects, run filters on object's content"), 'w'),
532
+ OPT_STRING(0, "path", &force_path, N_("blob"),
533
+ N_("use a specific path for --textconv/--filters")),
534
OPT_BOOL(0, "allow-unknown-type", &unknown_type,
535
N_("allow -s and -t to work with broken/corrupt objects")),
536
OPT_BOOL(0, "buffer", &batch.buffer_output, N_("buffer --batch output")),
573
usage_with_options(cat_file_usage, options);
574
}
575
576
+ if (force_path && opt != 'c' && opt != 'w') {
577
+ error("--path=<path> needs --textconv or --filters");
578
+ usage_with_options(cat_file_usage, options);
579
+ }
580
+
581
if (batch.buffer_output < 0)
582
batch.buffer_output = batch.all_objects;
583