Currently there is no way to clean up the changes that have been made
with test_perf for the next run.  Add a way to reset the repository to
the state before the test for testing commands that modify the git
repository, e.g. for perf testing git add.

Signed-off-by: Thomas Gummerer <t.gumme...@gmail.com>
---

This enables me to do something like (hint, hint, hint ;-)):

Test                                        HEAD~1            HEAD              
    
------------------------------------------------------------------------------------
....
0003.16: v5 update-index file               0.19(0.12+0.06)   0.08(0.06+0.01) 
-57.9%

There are no performance tests currently using this, but since I have
it anyway for a POC of partial writing of index-v5 (which is ugly and
will have to wait a bit until I'm ready to send it to the list) I think
this may be a worthwhile addition others can use in the meantime.

 t/perf/README      | 11 +++++++++++
 t/perf/perf-lib.sh | 25 +++++++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/t/perf/README b/t/perf/README
index 8848c14..72f8a7b 100644
--- a/t/perf/README
+++ b/t/perf/README
@@ -123,6 +123,17 @@ tests, use
                command2
        '
 
+For performance tests that need cleaning up after them that should not
+be timed, use
+
+       test_perf_cleanup 'descriptive string' '
+               command1 &&
+               command2
+       ' '
+               cleanupcommand1 &&
+               cleanupcommand2
+       '
+
 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 95e483c..11a93f1 100644
--- a/t/perf/perf-lib.sh
+++ b/t/perf/perf-lib.sh
@@ -174,6 +174,22 @@ perf_test_ () {
                                test_failure_ "$@"
                                break
                        fi
+                       say >&3 "cleaning up: $3"
+                       if test "$#" = 3
+                       then
+                               if test_run_ "$3"
+                               then
+                                       if test -z "$verbose"; then
+                                               echo -n " c$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"
@@ -194,6 +210,15 @@ test_perf () {
        perf_test_ "$1" "$2"
 }
 
+test_perf_cleanup () {
+       test_start_
+       test "$#" = 4 && { test_prereq=$1; shift; } || test_prereq=
+       test "$#" = 3 ||
+       error "bug in the test script: not 3 or 4 parameters to 
test-expect-success"
+       export test_prereq
+       perf_test_ "$1" "$2" "$3"
+}
+
 # We extend test_done to print timings at the end (./run disables this
 # and does it after running everything)
 test_at_end_hook_ () {
-- 
1.8.3.4.1238.ga800761

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