diff --git a/benchmarks/basic_commands.py b/benchmarks/basic_commands.py
index 540974ee64e621c7a94de319bdcdc140367b9ce6_YmVuY2htYXJrcy9iYXNpY19jb21tYW5kcy5weQ==..498707453627307a2094511c323ee270a4411f62_YmVuY2htYXJrcy9iYXNpY19jb21tYW5kcy5weQ== 100644
--- a/benchmarks/basic_commands.py
+++ b/benchmarks/basic_commands.py
@@ -126,6 +126,16 @@
     timer = timeit.default_timer
     sample_time = 10
 
+    def run(self, local_repo, command, remote_repo, expected_return_code=None):
+        if not isinstance(command, (list, tuple)):
+            command = [command]
+        cmd = [self.hgpath, '--cwd', local_repo] + command + [remote_repo]
+        if self.rev:
+            cmd.extend(['-r', self.rev])
+        if expected_return_code is None:
+            expected_return_code = 1 if self.strip == "same" else 0
+        self._single_execute(cmd, expected_return_code=expected_return_code)
+
     def setup(self, repo_name, strip, revset):
         super(BaseExchangeTimeSuite, self).setup(repo_name)
         self.clone_path = os.path.join(REPOS_DIR, '.cache', 'partial-{}-{}'.format(
@@ -136,8 +146,9 @@
             ], env=self.environ).strip()
         else:
             self.rev = None
+        self.strip = strip
 
 
 class ExchangeTimeSuite(BaseExchangeTimeSuite):
 
     def time_incoming(self, repo_name, strip, revset):
@@ -139,11 +150,8 @@
 
 
 class ExchangeTimeSuite(BaseExchangeTimeSuite):
 
     def time_incoming(self, repo_name, strip, revset):
-        cmd = [self.hgpath, '--cwd', self.clone_path, 'incoming', self.repo_path]
-        if self.rev:
-            cmd.extend(['-r', self.rev])
-        self._single_execute(cmd, expected_return_code=1 if strip == "same" else 0)
+        self.run(self.clone_path, 'incoming', self.repo_path)
 
     def time_outgoing(self, repo_name, strip, revset):
@@ -148,9 +156,6 @@
 
     def time_outgoing(self, repo_name, strip, revset):
-        cmd = [self.hgpath, '--cwd', self.repo_path, 'outgoing', self.clone_path]
-        if self.rev:
-            cmd.extend(['-r', self.rev])
-        self._single_execute(cmd, expected_return_code=1 if strip == "same" else 0)
+        self.run(self.repo_path, 'outgoing', self.clone_path)
 
 
 class DiscoveryTimeSuite(BaseExchangeTimeSuite):
@@ -161,8 +166,8 @@
         [None]]
 
     def time_debugdiscovery(self, repo_name, strip, revset):
-        cmd = [self.hgpath, '--cwd', self.clone_path, 'debugdiscovery', self.repo_path]
-        self._single_execute(cmd)
+        self.run(self.clone_path, 'debugdiscovery', self.repo_path,
+                 expected_return_code=0)
 
 
 class PushPullTimeSuite(BaseExchangeTimeSuite):
@@ -192,10 +197,6 @@
         self._single_execute(['sync'])
 
     def time_push(self, repo_name, strip, revset):
-        cmd = [self.hgpath, '--cwd', self.repo_path, 'push', '-f',
-               self.tmp_clone_path]
-        if self.rev:
-            cmd.extend(['-r', self.rev])
-        self._single_execute(cmd, expected_return_code=1 if strip == "same" else 0)
+        self.run(self.repo_path, ['push', '-f'], self.tmp_clone_path)
 
     def time_pull(self, repo_name, strip, revset):
@@ -200,10 +201,7 @@
 
     def time_pull(self, repo_name, strip, revset):
-        cmd = [self.hgpath, '--cwd', self.tmp_clone_path, 'pull',
-               self.repo_path]
-        if self.rev:
-            cmd.extend(['-r', self.rev])
-        self._single_execute(cmd)
+        self.run(self.tmp_clone_path, 'pull', self.repo_path,
+                 expected_return_code=0)
 
 
 class CloneTimeSuite(BaseExchangeTimeSuite):