X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=rev-list.c;h=d0609666a1c5732aa9bc9359d70fd3cf65555c29;hb=e6c310fd0d7384973efc6b1d5999a5e8a5b2f3bd;hp=e17f928061250c24465e1b96f89a18acb98a748c;hpb=069b20a198f171512a1d2d2163b40f70c94f5257;p=git.git diff --git a/rev-list.c b/rev-list.c index e17f9280..d0609666 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; @@ -844,7 +850,8 @@ int main(int argc, const char **argv) handle_one_commit(commit, &list); } - if (!list) + if (!list && + (!(tag_objects||tree_objects||blob_objects) && !pending_objects)) usage(rev_list_usage); paths = get_pathspec(prefix, argv + i);