aboutsummaryrefslogtreecommitdiff
path: root/revision.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2011-08-17 14:30:34 -0700
committerJunio C Hamano <gitster@pobox.com>2011-08-22 11:34:55 -0700
commit91f175165aba17903ab928da543052ea335fc924 (patch)
tree6cf82414eee956998260894e995f621e8892e818 /revision.c
parent5f25b6299d3e9853cf1f43734228d6e25d8f3415 (diff)
downloadgit-91f175165aba17903ab928da543052ea335fc924.tar.gz
git-91f175165aba17903ab928da543052ea335fc924.tar.xz
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>
Diffstat (limited to 'revision.c')
-rw-r--r--revision.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/revision.c b/revision.c
index c46cfaa3e..c5b38cc11 100644
--- a/revision.c
+++ b/revision.c
@@ -40,6 +40,25 @@ char *path_name(const struct name_path *path, const char *name)
return n;
}
+void show_object_with_name(FILE *out, struct object *obj, const struct name_path *path, const char *component)
+{
+ char *name = path_name(path, component);
+ const char *ep = strchr(name, '\n');
+
+ /*
+ * An object with name "foo\n0000000..." can be used to
+ * confuse downstream "git pack-objects" very badly.
+ */
+ if (ep) {
+ fprintf(out, "%s %.*s\n", sha1_to_hex(obj->sha1),
+ (int) (ep - name),
+ name);
+ }
+ else
+ fprintf(out, "%s %s\n", sha1_to_hex(obj->sha1), name);
+ free(name);
+}
+
void add_object(struct object *obj,
struct object_array *p,
struct name_path *path,