revsetbenchmark: simplify and convert the script to python
authorPierre-Yves David <pierre-yves.david@fb.com>
Wed, 26 Mar 2014 18:03:30 -0700
changeset 20848 11a9393609c8
parent 20847 c3f455337c6a
child 20849 5abc2562106a
revsetbenchmark: simplify and convert the script to python The script is now in python. That translation is very raw, more improvement to comes: The "current code" and "base" entry have been dropped. This is trivial to get same result using a tagged revision or "." in the list of benchmarked revision.
contrib/revsetbenchmarks.py
contrib/revsetbenchmarks.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/revsetbenchmarks.py	Wed Mar 26 18:03:30 2014 -0700
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+
+# Measure the performance of a list of revsets against multiple revisions
+# defined by parameter. Checkout one by one and run perfrevset with every
+# revset in the list to benchmark its performance.
+#
+# - First argument is a revset of mercurial own repo to runs against.
+# - Second argument is the file from which the revset array will be taken
+#   If second argument is omitted read it from standard input
+#
+# You should run this from the root of your mercurial repository.
+#
+# This script also does one run of the current version of mercurial installed
+# to compare performance.
+
+import sys
+from subprocess import check_call, check_output
+
+HG="hg update --quiet --check"
+PERF="./hg --config extensions.perf=contrib/perf.py perfrevset"
+
+target_rev = sys.argv[1]
+
+revsetsfile = sys.stdin
+if len(sys.argv) > 2:
+    revsetsfile = open(sys.argv[2])
+
+revsets = [l.strip() for l in revsetsfile]
+
+print "Revsets to benchmark"
+print "----------------------------"
+
+for idx, rset in enumerate(revsets):
+    print "%i) %s" % (idx, rset)
+
+print "----------------------------"
+print
+
+revs = check_output("hg log --template='{rev}\n' --rev " + target_rev,
+                    shell=True);
+
+revs = [r for r in revs.split() if r]
+
+# Benchmark revisions
+for r in revs:
+    print "----------------------------"
+    sys.stdout.write("Revision: ")
+    sys.stdout.flush()
+    check_call('hg log -r %s --template "{desc|firstline}\n"' % r, shell=True)
+
+    print "----------------------------"
+    check_call(HG + ' ' + r, shell=True)
+    for idx, rset in enumerate(revsets):
+        sys.stdout.write("%i) " % idx)
+        sys.stdout.flush()
+        check_call(PERF + ' "%s"' % rset, shell=True)
+    print "----------------------------"
+
--- a/contrib/revsetbenchmarks.sh	Wed Mar 26 16:38:08 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +0,0 @@
-#!/usr/bin/env bash
-
-# Measure the performance of a list of revsets against multiple revisions
-# defined by parameter. Checkout one by one and run perfrevset with every
-# revset in the list to benchmark its performance.
-#
-# - First argument is a revset of mercurial own repo to runs against.
-# - Second argument is the file from which the revset array will be taken
-#   If second argument is omitted read it from standard input
-#
-# You should run this from the root of your mercurial repository.
-#
-# This script also does one run of the current version of mercurial installed
-# to compare performance.
-
-HG="hg update"
-PERF="./hg --config extensions.perf=contrib/perf.py perfrevset"
-BASE_PERF="hg --config extensions.perf=contrib/perf.py perfrevset"
-
-TARGETS=$1
-shift
-# read from a file or from standard output
-if [ $# -ne 0 ]; then
-    readarray REVSETS < $1
-else
-    readarray REVSETS
-fi
-
-hg update --quiet
-
-echo "Starting time benchmarking"
-echo
-
-echo "Revsets to benchmark"
-echo "----------------------------"
-
-for (( j = 0; j < ${#REVSETS[@]}; j++ ));
-do
-  echo "${j}) ${REVSETS[$j]}"
-done
-
-echo "----------------------------"
-echo
-
-# Benchmark baseline
-echo "Benchmarking baseline"
-
-for (( j = 0; j < ${#REVSETS[@]}; j++ ));
-  do
-    echo -n "${j}) "
-    $BASE_PERF "${REVSETS[$j]}"
-done
-
-echo
-echo
-
-# Benchmark revisions
-for i in $(hg log --template='{rev}\n' --rev $TARGETS);
-do
-  echo "----------------------------"
-  echo -n "Revision: "
-  hg log -r $i --template "{desc|firstline}\n"
-
-  echo "----------------------------"
-  $HG $i
-  for (( j = 0; j < ${#REVSETS[@]}; j++ ));
-  do
-    echo -n "${j}) "
-    $PERF "${REVSETS[$j]}"
-  done
-  echo "----------------------------"
-done
-
-$HG
-
-# Benchmark current code
-echo "Benchmarking current code"
-
-for (( j = 0; j < ${#REVSETS[@]}; j++ ));
-  do
-    echo -n "${j}) "
-    $PERF "${REVSETS[$j]}"
-done
-
-
-echo
-echo "Time benchmarking finished"
-
-