From: Junio C Hamano Date: Mon, 27 Jan 2014 18:45:08 +0000 (-0800) Subject: Merge branch 'jk/mark-edges-uninteresting' X-Git-Tag: v1.9-rc1~13 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/a6bec00145da3013e693072122f2fa53076e73cd?ds=inline;hp=-c 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 --- a6bec00145da3013e693072122f2fa53076e73cd diff --combined list-objects.c index 6cbedf0280,8b39b50c22..206816fa9c --- a/list-objects.c +++ b/list-objects.c @@@ -123,7 -123,8 +123,7 @@@ static void process_tree(struct rev_inf cb_data); } strbuf_setlen(base, baselen); - free(tree->buffer); - tree->buffer = NULL; + free_tree_buffer(tree); } static void mark_edge_parents_uninteresting(struct commit *commit, @@@ -162,15 -163,17 +162,17 @@@ void mark_edges_uninteresting(struct re } 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); + } } } }