Now, when saying --max-age=<timestamp>, or --max-count=<n>, together with --boundary, rev-list prints the boundary commits, i.e. the commits which are _just_ not shown without --boundary, i.e. their children are, but they aren't. Signed-off-by: Johannes Schindelin <Johannes.Schindelin@xxxxxx> --- Of course, this is meant to speed up an otherwise expensive operation in git-bundle. However, this touches a very sensitive point in core git: the revision walking machinery. It passes all tests, but some eyeballing is much appreciated. Ah, and somebody better at writing short concise descriptions then me should look into documenting "edge" objects and "boundary" commits to the glossary (possibly after thinking if "edge" and "boundary" do mean the same after all). 'nough for one night. revision.c | 24 ++++++++++++++++++++---- 1 files changed, 20 insertions(+), 4 deletions(-) diff --git a/revision.c b/revision.c index 5b1794b..87aea9c 100644 --- a/revision.c +++ b/revision.c @@ -1233,9 +1233,15 @@ static struct commit *get_revision_1(struct rev_info *revs) */ if (!revs->limited) { if (revs->max_age != -1 && - (commit->date < revs->max_age)) - continue; - add_parents_to_list(revs, commit, &revs->commits); + (commit->date < revs->max_age)) { + if (revs->boundary) + commit->object.flags |= + BOUNDARY_SHOW | BOUNDARY; + else + continue; + } else + add_parents_to_list(revs, commit, + &revs->commits); } if (commit->object.flags & SHOWN) continue; @@ -1336,7 +1342,17 @@ struct commit *get_revision(struct rev_info *revs) case -1: break; case 0: - return NULL; + if (revs->boundary) { + struct commit_list *list = revs->commits; + while (list) { + list->item->object.flags |= + BOUNDARY_SHOW | BOUNDARY; + list = list->next; + } + revs->max_count = -1; + revs->limited = 1; + } else + return NULL; default: revs->max_count--; } - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html