Add a --cleanup for the performance tests.  This option can be used to
clean up the tested repository after each time the performance tests are
run.  The option can be specified for normal tests too, although it will
not do anything for them.  Use test_when_finished for those tests.

Signed-off-by: Thomas Gummerer <t.gumme...@gmail.com>
---
 t/perf/README           | 11 ++++++++++-
 t/perf/perf-lib.sh      | 15 +++++++++++++++
 t/test-lib-functions.sh |  6 ++++++
 3 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/t/perf/README b/t/perf/README
index 21abbaf..73a1d1c 100644
--- a/t/perf/README
+++ b/t/perf/README
@@ -123,7 +123,7 @@ tests, use
                command2
        '
 
-       test_perf [--prereq <prereq>] [--] 'descriptive string' '
+       test_perf [--prereq <prereq>] [--cleanup <cleanup>] [--] 'descriptive 
string' '
                command1 &&
                command2
        '
@@ -133,6 +133,15 @@ tests are only executed if the prerequisite is fulfilled.  
The modern
 version also allows to distinguish the message from the description
 and test script with --, in case the message starts with --.
 
+cleanup is another optional parameter to test_perf, which is executed
+after every run of the performance test.  It can specify actions to
+bring the repository to the original state, in order to be able to
+execute the exact same test multiple times, e.g:
+
+       test_perf --cleanup 'git reset' 'test performance of git add' '
+                 git add $somefile
+       '
+
 test_perf spawns a subshell, for lack of better options.  This means
 that
 
diff --git a/t/perf/perf-lib.sh b/t/perf/perf-lib.sh
index 6477d38..8ace4a3 100644
--- a/t/perf/perf-lib.sh
+++ b/t/perf/perf-lib.sh
@@ -176,6 +176,21 @@ test_perf () {
                                test_failure_ "$@"
                                break
                        fi
+                       if ! test -z "$cleanup_action"; then
+                               say >&3 "cleaning up: $cleanup_action"
+                               if test_run_ "$cleanup_action"
+                               then
+                                       if test -z "$verbose"; then
+                                               printf " c%s" "$i"
+                                       else
+                                               echo "* cleaning up run 
$i/$GIT_PERF_REPEAT_COUNT:"
+                                       fi
+                               else
+                                       test -z $verbose && echo
+                                       test_failure_ "$@"
+                                       break
+                               fi
+                       fi
                done
                if test -z "$verbose"; then
                        echo " ok"
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index 473b21d..4bad14f 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -360,6 +360,12 @@ test_expect_parse () {
                        test_prereq=$2
                        shift
                        ;;
+               --cleanup)
+                       test $# -gt 1 ||
+                       error "bug in the test script: --cleanup needs a 
parameter"
+                       cleanup_action=$2
+                       shift
+                       ;;
                --)
                        shift
                        break
-- 
1.8.3.4.1241.g1ce9896

--
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