revision.c: add show_object_with_name() helper function

There are two copies of traverse_commit_list callback that show the object name followed by pathname the object was found, to produce output similar to "rev-list --objects". Unify them. Signed-off-by: Junio C Hamano <gitster@pobox.com>

Junio C Hamano committed Aug 17, 2011 at 14:30 UTC 91f175165aba17903ab928da543052ea335fc924
4 files changed +23 -28
builtin/rev-list.c
+1 -14
@@ -176,21 +176,8 @@ static void finish_object(struct object *obj, const struct name_path *path, cons
176
177 static void show_object(struct object *obj, const struct name_path *path, const char *component)
178 {
179 - char *name = path_name(path, component);
180 - /* An object with name "foo\n0000000..." can be used to
181 - * confuse downstream "git pack-objects" very badly.
182 - */
183 - const char *ep = strchr(name, '\n');
184 -
179 finish_object(obj, path, component);
186 - if (ep) {
187 - printf("%s %.*s\n", sha1_to_hex(obj->sha1),
188 - (int) (ep - name),
189 - name);
190 - }
191 - else
192 - printf("%s %s\n", sha1_to_hex(obj->sha1), name);
193 - free(name);
180 + show_object_with_name(stdout, obj, path, component);
181 }
182
183 static void show_edge(struct commit *commit)
revision.c
+19
@@ -40,6 +40,25 @@ char *path_name(const struct name_path *path, const char *name)
40 return n;
41 }
42
43 +void show_object_with_name(FILE *out, struct object *obj, const struct name_path *path, const char *component)
44 +{
45 + char *name = path_name(path, component);
46 + const char *ep = strchr(name, '\n');
47 +
48 + /*
49 + * An object with name "foo\n0000000..." can be used to
50 + * confuse downstream "git pack-objects" very badly.
51 + */
52 + if (ep) {
53 + fprintf(out, "%s %.*s\n", sha1_to_hex(obj->sha1),
54 + (int) (ep - name),
55 + name);
56 + }
57 + else
58 + fprintf(out, "%s %s\n", sha1_to_hex(obj->sha1), name);
59 + free(name);
60 +}
61 +
62 void add_object(struct object *obj,
63 struct object_array *p,
64 struct name_path *path,
revision.h
+2
@@ -185,6 +185,8 @@ struct name_path {
185
186 char *path_name(const struct name_path *path, const char *name);
187
188 +extern void show_object_with_name(FILE *, struct object *, const struct name_path *, const char *);
189 +
190 extern void add_object(struct object *obj,
191 struct object_array *p,
192 struct name_path *path,
upload-pack.c
+1 -14
@@ -85,20 +85,7 @@ static void show_commit(struct commit *commit, void *data)
85
86 static void show_object(struct object *obj, const struct name_path *path, const char *component)
87 {
88 - /* An object with name "foo\n0000000..." can be used to
89 - * confuse downstream git-pack-objects very badly.
90 - */
91 - const char *name = path_name(path, component);
92 - const char *ep = strchr(name, '\n');
93 - if (ep) {
94 - fprintf(pack_pipe, "%s %.*s\n", sha1_to_hex(obj->sha1),
95 - (int) (ep - name),
96 - name);
97 - }
98 - else
99 - fprintf(pack_pipe, "%s %s\n",
100 - sha1_to_hex(obj->sha1), name);
101 - free((char *)name);
88 + show_object_with_name(pack_pipe, obj, path, component);
89 }
90
91 static void show_edge(struct commit *commit)