# HG changeset patch
# User Martijn Pieters <mj@zopatista.com>
# Date 1533156341 -7200
#      Wed Aug 01 22:45:41 2018 +0200
# Node ID 4822078e81b4e1096945a8dd6ce2031ba2321cc0
# Parent  357ed3a95baa035831444a457bdaaae510460fb9
track_commit: add mode parameter to support creating and updating

Also: don't use -A to add new files; add explicitly. A large repository like
mozilla-central makes the -A switch way too slow.

diff --git a/benchmarks/basic_commands.py b/benchmarks/basic_commands.py
--- a/benchmarks/basic_commands.py
+++ b/benchmarks/basic_commands.py
@@ -16,8 +16,13 @@
 import urllib
 import pipes
 
-from .utils import (BaseNChangesetsTestSuite, BaseTestSuite,
-                    median, REPOS_DIR)
+from .utils import (
+    BaseNChangesetsTestSuite,
+    BaseTestSuite,
+    params_as_kwargs,
+    median,
+    REPOS_DIR
+)
 
 if sys.version_info[0] == 2:
     import Queue as queue
@@ -40,23 +45,43 @@
 
     timeout = 120
 
-    def track_commit(self, *args, **kwargs):
+    params = BaseTestSuite.params + [("create", "update")]
+    param_names = BaseTestSuite.param_names + ["mode"]
+
+    @params_as_kwargs
+    def track_commit(self, mode, **kwargs):
         timings = []
+        filename = None
 
-        with open(os.path.join(self.repo_path, 'BABAR'), 'w') as f:
-            f.write("BABAR")
+        self.hg('status')
+
+        if mode == 'create':
+            with open(os.path.join(self.repo_path, 'BABAR'), 'w') as f:
+                f.write("BABAR")
+        else:
+            # pick filename to update
+            filename = self.hg('manifest').partition('\n')[0]
+            filename = os.path.join(self.repo_path, filename)
 
         # Do the commits N time
-        for i in range(3):
+        for i in range(10):
             try:
+                if mode == 'update':
+                    with open(filename, 'a') as target:
+                        target.write(
+                            'The quick brown fox jumps over the lazy dog\n')
+                else:
+                    self.hg('add', 'BABAR')
+
                 before = time.time()
-                self.hg('commit', '-A', '-m', 'My commit message',
+                self.hg('commit', '-m', 'My commit message',
                         '-u', '<test@octobus.net>')
                 after = time.time()
                 timings.append(after - before)
             finally:
                 # Rollback and clean
                 self.hg('rollback', '--config', 'ui.rollback=true')
+                self.hg('debugupdatecache')
                 self.hg('update', '-C', '.')
 
         return median(timings)