We time a straight "rev-list --all" and its "--object"
counterpart, both going all the way to the root. However, we
do not time a partial history walk. This patch adds an
extreme case: a walk over a very small slice of history, but
with a very large set of UNINTERESTING tips. This is similar
to the connectivity check run by git on a small fetch, or
the walk done by any pre-receive hooks that want to check
incoming commits.

This test reveals a performance regression in git v1.8.4.2,
caused by fbd4a70 (list-objects: mark more commits as edges
in mark_edges_uninteresting, 2013-08-16):

Test                                             fbd4a703^         fbd4a703
0001.1: rev-list --all                           0.69(0.67+0.02)   
0.69(0.68+0.01) +0.0%
0001.2: rev-list --all --objects                 3.47(3.44+0.02)   
3.48(3.44+0.03) +0.3%
0001.4: rev-list $commit --not --all             0.04(0.04+0.00)   
0.04(0.04+0.00) +0.0%
0001.5: rev-list --objects $commit --not --all   0.04(0.03+0.00)   
0.27(0.24+0.02) +575.0%

Signed-off-by: Jeff King <p...@peff.net>
Sorry for the long lines in the commit message. I'm open to suggestions
on reformatting.

 t/perf/p0001-rev-list.sh | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/t/perf/p0001-rev-list.sh b/t/perf/p0001-rev-list.sh
index 4f71a63..b7258a7 100755
--- a/t/perf/p0001-rev-list.sh
+++ b/t/perf/p0001-rev-list.sh
@@ -14,4 +14,21 @@ test_perf 'rev-list --all --objects' '
        git rev-list --all --objects >/dev/null
+test_expect_success 'create new unreferenced commit' '
+       git checkout --detach HEAD &&
+       echo content >>file &&
+       git add file &&
+       git commit -m detached &&
+       commit=$(git rev-parse --verify HEAD) &&
+       git checkout -
+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

To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to