diff options
| author | Junio C Hamano <junkio@cox.net> | 2005-12-03 23:46:02 -0800 |
|---|---|---|
| committer | Junio C Hamano <junkio@cox.net> | 2005-12-03 23:46:02 -0800 |
| commit | 423325a2d24638ddcc82ce47be5e40be550f4507 (patch) | |
| tree | 00960b001d786299d3da04a4467bd0c798bf8cda /rev-list.c | |
| parent | GIT 0.99.9k (diff) | |
| parent | [PATCH] daemon.c and path.enter_repo(): revamp path validation. (diff) | |
| download | git-0.99.9l.tar.gz git-0.99.9l.zip | |
Diffstat (limited to 'rev-list.c')
| -rw-r--r-- | rev-list.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/rev-list.c b/rev-list.c index e17f928061..8020d974f2 100644 --- a/rev-list.c +++ b/rev-list.c @@ -350,7 +350,8 @@ static int count_distance(struct commit_list *entry) if (commit->object.flags & (UNINTERESTING | COUNTED)) break; - nr++; + if (!paths || (commit->object.flags & TREECHANGE)) + nr++; commit->object.flags |= COUNTED; p = commit->parents; entry = p; @@ -362,6 +363,7 @@ static int count_distance(struct commit_list *entry) } } } + return nr; } @@ -382,15 +384,20 @@ static struct commit_list *find_bisection(struct commit_list *list) nr = 0; p = list; while (p) { - nr++; + if (!paths || (p->item->object.flags & TREECHANGE)) + nr++; p = p->next; } closest = 0; best = list; - p = list; - while (p) { - int distance = count_distance(p); + for (p = list; p; p = p->next) { + int distance; + + if (paths && !(p->item->object.flags & TREECHANGE)) + continue; + + distance = count_distance(p); clear_distance(list); if (nr - distance < distance) distance = nr - distance; @@ -398,7 +405,6 @@ static struct commit_list *find_bisection(struct commit_list *list) best = p; closest = distance; } - p = p->next; } if (best) best->next = NULL; |
