Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
git-rev-list: allow missing objects when the parent is marked UNINTERESTING
author
Linus Torvalds
<torvalds@g5.osdl.org>
Sun, 10 Jul 2005 22:09:46 +0000
(15:09 -0700)
committer
Linus Torvalds
<torvalds@g5.osdl.org>
Sun, 10 Jul 2005 22:09:46 +0000
(15:09 -0700)
We still want the "top-most" uninteresting object to exist, so that we
know that we have reached it.
rev-list.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (from parent 1:
167a4a3
)
diff --git
a/rev-list.c
b/rev-list.c
index dfa0933825c5afdcb35e15ee739ba12530fcc9ff..0c0bdc2fd87cb99aa988f2ed68621aaa1a392013 100644
(file)
--- a/
rev-list.c
+++ b/
rev-list.c
@@
-203,6
+203,8
@@
static void mark_tree_uninteresting(struct tree *tree)
if (obj->flags & UNINTERESTING)
return;
obj->flags |= UNINTERESTING;
if (obj->flags & UNINTERESTING)
return;
obj->flags |= UNINTERESTING;
+ if (!has_sha1_file(obj->sha1))
+ return;
if (parse_tree(tree) < 0)
die("bad tree %s", sha1_to_hex(obj->sha1));
entry = tree->entries;
if (parse_tree(tree) < 0)
die("bad tree %s", sha1_to_hex(obj->sha1));
entry = tree->entries;
@@
-224,6
+226,17
@@
static void mark_parents_uninteresting(struct commit *commit)
while (parents) {
struct commit *commit = parents->item;
commit->object.flags |= UNINTERESTING;
while (parents) {
struct commit *commit = parents->item;
commit->object.flags |= UNINTERESTING;
+
+ /*
+ * A missing commit is ok iff its parent is marked
+ * uninteresting.
+ *
+ * We just mark such a thing parsed, so that when
+ * it is popped next time around, we won't be trying
+ * to parse it and get an error.
+ */
+ if (!has_sha1_file(commit->object.sha1))
+ commit->object.parsed = 1;
parents = parents->next;
}
}
parents = parents->next;
}
}
@@
-371,6
+384,8
@@
static struct commit *get_commit_reference(const char *name, unsigned int flags)
object->flags |= flags;
if (parse_commit(commit) < 0)
die("unable to parse commit %s", name);
object->flags |= flags;
if (parse_commit(commit) < 0)
die("unable to parse commit %s", name);
+ if (flags & UNINTERESTING)
+ mark_parents_uninteresting(commit);
return commit;
}
return commit;
}