diff options
author | Junio C Hamano <junkio@cox.net> | 2007-03-05 16:10:28 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-03-06 01:08:34 -0800 |
commit | 2b064697a5b0610254f52523ce5b70c81118da80 (patch) | |
tree | 4b84bfcc341ed1764f599baf8203d842322a8ea3 | |
parent | revision walker: Fix --boundary when limited (diff) | |
download | tgif-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.c | 6 | ||||
-rw-r--r-- | revision.c | 9 | ||||
-rw-r--r-- | revision.h | 3 |
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; |