Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
Be more careful tangling object chains while marking commits.
author
Junio C Hamano
<junkio@cox.net>
Thu, 20 Oct 2005 04:55:49 +0000
(21:55 -0700)
committer
Junio C Hamano
<junkio@cox.net>
Thu, 20 Oct 2005 04:55:49 +0000
(21:55 -0700)
Also Johannes noticed we use parse_object to look up if we know that
object already -- we should just ask the in-core object registry with
lookup_object() for that.
Signed-off-by: Junio C Hamano <junkio@cox.net>
fetch-pack.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
d6a7359
)
diff --git
a/fetch-pack.c
b/fetch-pack.c
index 4ee91f2ca2f7f06543a636f728adc8975cba6747..8566ab1744b029e9696976e78bac4d48d2324129 100644
(file)
--- a/
fetch-pack.c
+++ b/
fetch-pack.c
@@
-35,9
+35,12
@@
static int find_common(int fd[2], unsigned char *result_sha1,
* local ref), we tell them we have it but do not have to
* tell them about its ancestors, which they already know
* about.
* local ref), we tell them we have it but do not have to
* tell them about its ancestors, which they already know
* about.
+ *
+ * We use lookup_object here because we are only
+ * interested in the case we *know* the object is
+ * reachable and we have already scanned it.
*/
*/
- if (has_sha1_file(remote) &&
- ((o = parse_object(remote)) != NULL) &&
+ if (((o = lookup_object(remote)) != NULL) &&
(o->flags & COMPLETE)) {
struct commit_list *p;
struct commit *commit =
(o->flags & COMPLETE)) {
struct commit_list *p;
struct commit *commit =
@@
-120,10
+123,13
@@
static int mark_complete(const char *path, const unsigned char *sha1)
struct object *o = parse_object(sha1);
while (o && o->type == tag_type) {
struct object *o = parse_object(sha1);
while (o && o->type == tag_type) {
+ struct tag *t = (struct tag *) o;
+ if (!t->tagged)
+ break; /* broken repository */
o->flags |= COMPLETE;
o->flags |= COMPLETE;
- o = parse_object(
((struct tag *)o)
->tagged->sha1);
+ o = parse_object(
t
->tagged->sha1);
}
}
- if (o->type == commit_type) {
+ if (o
&& o
->type == commit_type) {
struct commit *commit = (struct commit *)o;
commit->object.flags |= COMPLETE;
insert_by_date(commit, &complete);
struct commit *commit = (struct commit *)o;
commit->object.flags |= COMPLETE;
insert_by_date(commit, &complete);