Ooh. Make git-rev-list --object associate a name with objects.

The name isn't unique, it's just the first name that object is reached
through, so it's really nothing more than a hint.
This commit is contained in:
Linus Torvalds 2005-06-26 15:26:05 -07:00
parent 521a4f4cf4
commit 9ce43d1c90
2 changed files with 11 additions and 9 deletions

View file

@ -4,6 +4,7 @@
struct object_list { struct object_list {
struct object *item; struct object *item;
struct object_list *next; struct object_list *next;
const char *name;
}; };
struct object { struct object {

View file

@ -98,16 +98,17 @@ static int process_commit(struct commit * commit)
return CONTINUE; return CONTINUE;
} }
static struct object_list **add_object(struct object *obj, struct object_list **p) static struct object_list **add_object(struct object *obj, struct object_list **p, const char *name)
{ {
struct object_list *entry = xmalloc(sizeof(*entry)); struct object_list *entry = xmalloc(sizeof(*entry));
entry->item = obj; entry->item = obj;
entry->next = NULL; entry->next = NULL;
entry->name = name;
*p = entry; *p = entry;
return &entry->next; return &entry->next;
} }
static struct object_list **process_blob(struct blob *blob, struct object_list **p) static struct object_list **process_blob(struct blob *blob, struct object_list **p, const char *name)
{ {
struct object *obj = &blob->object; struct object *obj = &blob->object;
@ -116,10 +117,10 @@ static struct object_list **process_blob(struct blob *blob, struct object_list *
if (obj->flags & (UNINTERESTING | SEEN)) if (obj->flags & (UNINTERESTING | SEEN))
return p; return p;
obj->flags |= SEEN; obj->flags |= SEEN;
return add_object(obj, p); return add_object(obj, p, name);
} }
static struct object_list **process_tree(struct tree *tree, struct object_list **p) static struct object_list **process_tree(struct tree *tree, struct object_list **p, const char *name)
{ {
struct object *obj = &tree->object; struct object *obj = &tree->object;
struct tree_entry_list *entry; struct tree_entry_list *entry;
@ -131,12 +132,12 @@ static struct object_list **process_tree(struct tree *tree, struct object_list *
if (parse_tree(tree) < 0) if (parse_tree(tree) < 0)
die("bad tree object %s", sha1_to_hex(obj->sha1)); die("bad tree object %s", sha1_to_hex(obj->sha1));
obj->flags |= SEEN; obj->flags |= SEEN;
p = add_object(obj, p); p = add_object(obj, p, name);
for (entry = tree->entries ; entry ; entry = entry->next) { for (entry = tree->entries ; entry ; entry = entry->next) {
if (entry->directory) if (entry->directory)
p = process_tree(entry->item.tree, p); p = process_tree(entry->item.tree, p, entry->name);
else else
p = process_blob(entry->item.blob, p); p = process_blob(entry->item.blob, p, entry->name);
} }
return p; return p;
} }
@ -147,12 +148,12 @@ static void show_commit_list(struct commit_list *list)
while (list) { while (list) {
struct commit *commit = pop_most_recent_commit(&list, SEEN); struct commit *commit = pop_most_recent_commit(&list, SEEN);
p = process_tree(commit->tree, p); p = process_tree(commit->tree, p, "");
if (process_commit(commit) == STOP) if (process_commit(commit) == STOP)
break; break;
} }
while (objects) { while (objects) {
puts(sha1_to_hex(objects->item->sha1)); printf("%s %s\n", sha1_to_hex(objects->item->sha1), objects->name);
objects = objects->next; objects = objects->next;
} }
} }