summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <junkio@cox.net>2007-03-05 16:10:28 -0800
committerLibravatar Junio C Hamano <junkio@cox.net>2007-03-06 01:08:34 -0800
commit2b064697a5b0610254f52523ce5b70c81118da80 (patch)
tree4b84bfcc341ed1764f599baf8203d842322a8ea3
parentrevision walker: Fix --boundary when limited (diff)
downloadtgif-2b064697a5b0610254f52523ce5b70c81118da80.tar.xz
revision traversal: retire BOUNDARY_SHOW
This removes the flag internally used by revision traversal to decide which commits are indeed boundaries and renames it to CHILD_SHOWN. builtin-bundle uses the symbol for its verification, but I think the logic it uses it is wrong. The flag is still useful but it is local to the git-bundle, so it is renamed to PREREQ_MARK. Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--builtin-bundle.c6
-rw-r--r--revision.c9
-rw-r--r--revision.h3
3 files changed, 13 insertions, 5 deletions
diff --git a/builtin-bundle.c b/builtin-bundle.c
index 279b8f8e58..76bd204de8 100644
--- a/builtin-bundle.c
+++ b/builtin-bundle.c
@@ -160,6 +160,8 @@ static int fork_with_pipe(const char **argv, int *in, int *out)
return pid;
}
+#define PREREQ_MARK (1u<<16)
+
static int verify_bundle(struct bundle_header *header)
{
/*
@@ -179,7 +181,7 @@ static int verify_bundle(struct bundle_header *header)
struct ref_list_entry *e = p->list + i;
struct object *o = parse_object(e->sha1);
if (o) {
- o->flags |= BOUNDARY_SHOW;
+ o->flags |= PREREQ_MARK;
add_pending_object(&revs, o, e->name);
continue;
}
@@ -202,7 +204,7 @@ static int verify_bundle(struct bundle_header *header)
i = req_nr;
while (i && (commit = get_revision(&revs)))
- if (commit->object.flags & BOUNDARY_SHOW)
+ if (commit->object.flags & PREREQ_MARK)
i--;
for (i = 0; i < req_nr; i++)
diff --git a/revision.c b/revision.c
index 5d137ea14a..2d27ccf70b 100644
--- a/revision.c
+++ b/revision.c
@@ -1285,17 +1285,21 @@ struct commit *get_revision(struct rev_info *revs)
commit_list_insert(c, &l);
revs->commits = l;
revs->reverse = 0;
+ c = NULL;
}
/*
* Now pick up what they want to give us
*/
- c = get_revision_1(revs);
+ if (!(c = get_revision_1(revs)))
+ return NULL;
while (0 < revs->skip_count) {
revs->skip_count--;
c = get_revision_1(revs);
if (!c)
break;
+ /* Although we grabbed it, it is not shown. */
+ c->object.flags &= ~SHOWN;
}
/*
@@ -1305,6 +1309,9 @@ struct commit *get_revision(struct rev_info *revs)
case -1:
break;
case 0:
+ /* Although we grabbed it, it is not shown. */
+ if (c)
+ c->object.flags &= ~SHOWN;
c = NULL;
break;
default:
diff --git a/revision.h b/revision.h
index 6579a446ea..1885f8d233 100644
--- a/revision.h
+++ b/revision.h
@@ -7,10 +7,9 @@
#define SHOWN (1u<<3)
#define TMP_MARK (1u<<4) /* for isolated cases; clean after use */
#define BOUNDARY (1u<<5)
-#define BOUNDARY_SHOW (1u<<6)
+#define CHILD_SHOWN (1u<<6)
#define ADDED (1u<<7) /* Parents already parsed and added? */
#define SYMMETRIC_LEFT (1u<<8)
-#define CHILD_SHOWN (1u<<9)
struct rev_info;
struct log_info;