diff options
-rw-r--r-- | list-objects.c | 20 | ||||
-rwxr-xr-x | t/perf/p0001-rev-list.sh | 12 |
2 files changed, 23 insertions, 9 deletions
diff --git a/list-objects.c b/list-objects.c index 6cbedf0280..206816fa9c 100644 --- a/list-objects.c +++ b/list-objects.c @@ -162,15 +162,17 @@ void mark_edges_uninteresting(struct rev_info *revs, show_edge_fn show_edge) } mark_edge_parents_uninteresting(commit, revs, show_edge); } - for (i = 0; i < revs->cmdline.nr; i++) { - struct object *obj = revs->cmdline.rev[i].item; - struct commit *commit = (struct commit *)obj; - if (obj->type != OBJ_COMMIT || !(obj->flags & UNINTERESTING)) - continue; - mark_tree_uninteresting(commit->tree); - if (revs->edge_hint && !(obj->flags & SHOWN)) { - obj->flags |= SHOWN; - show_edge(commit); + if (revs->edge_hint) { + for (i = 0; i < revs->cmdline.nr; i++) { + struct object *obj = revs->cmdline.rev[i].item; + struct commit *commit = (struct commit *)obj; + if (obj->type != OBJ_COMMIT || !(obj->flags & UNINTERESTING)) + continue; + mark_tree_uninteresting(commit->tree); + if (!(obj->flags & SHOWN)) { + obj->flags |= SHOWN; + show_edge(commit); + } } } } diff --git a/t/perf/p0001-rev-list.sh b/t/perf/p0001-rev-list.sh index 4f71a63b0a..16359d51ae 100755 --- a/t/perf/p0001-rev-list.sh +++ b/t/perf/p0001-rev-list.sh @@ -14,4 +14,16 @@ test_perf 'rev-list --all --objects' ' git rev-list --all --objects >/dev/null ' +test_expect_success 'create new unreferenced commit' ' + commit=$(git commit-tree HEAD^{tree} -p HEAD) +' + +test_perf 'rev-list $commit --not --all' ' + git rev-list $commit --not --all >/dev/null +' + +test_perf 'rev-list --objects $commit --not --all' ' + git rev-list --objects $commit --not --all >/dev/null +' + test_done |