mirror of
https://github.com/git/git
synced 2024-09-13 21:34:42 +00:00
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:
parent
521a4f4cf4
commit
9ce43d1c90
1
object.h
1
object.h
|
@ -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 {
|
||||||
|
|
19
rev-list.c
19
rev-list.c
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue