diff options
author | Junio C Hamano <gitster@pobox.com> | 2014-01-27 10:45:08 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-01-27 10:45:08 -0800 |
commit | a6bec00145da3013e693072122f2fa53076e73cd (patch) | |
tree | 4865469b22490c94ff53857ab69fd96df63e4f46 /list-objects.c | |
parent | e049109ef11be4e164c6f0426fb77c9c7a1ab647 (diff) | |
parent | 200abe7458357c83f3859ce6dbf89ea5d4d09b3d (diff) | |
download | git-a6bec00145da3013e693072122f2fa53076e73cd.tar.gz |
Merge branch 'jk/mark-edges-uninteresting'
Fix performance regression in v1.8.4.x and later.
* jk/mark-edges-uninteresting:
list-objects: only look at cmdline trees with edge_hint
t/perf: time rev-list with UNINTERESTING commits
Diffstat (limited to 'list-objects.c')
-rw-r--r-- | list-objects.c | 20 |
1 files changed, 11 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); + } } } } |