summaryrefslogtreecommitdiff
path: root/test/git/test_performance.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/git/test_performance.py')
-rw-r--r--test/git/test_performance.py96
1 files changed, 56 insertions, 40 deletions
diff --git a/test/git/test_performance.py b/test/git/test_performance.py
index 72acfcac..c1f8ce59 100644
--- a/test/git/test_performance.py
+++ b/test/git/test_performance.py
@@ -7,46 +7,62 @@
from test.testlib import *
from git import *
from time import time
+import sys
class TestPerformance(TestBase):
- def _query_commit_info(self, c):
- c.author
- c.authored_date
- c.author_tz_offset
- c.committer
- c.committed_date
- c.committer_tz_offset
- c.message
- c.parents
-
- def test_iteration(self):
- num_objs = 0
- num_commits = 0
-
- # find the first commit containing the given path - always do a full
- # iteration ( restricted to the path in question ), but in fact it should
- # return quite a lot of commits, we just take one and hence abort the operation
-
- st = time()
- for c in self.rorepo.iter_commits('0.1.6'):
- num_commits += 1
- self._query_commit_info(c)
- for obj in c.tree.traverse():
- obj.size
- num_objs += 1
- # END for each object
- # END for each commit
- elapsed_time = time() - st
- print "Traversed %i Trees and a total of %i unchached objects in %s [s] ( %f objs/s )" % (num_commits, num_objs, elapsed_time, num_objs/elapsed_time)
-
- def test_commit_traversal(self):
- num_commits = 0
-
- st = time()
- for c in self.rorepo.commit('0.1.6').traverse(branch_first=False):
- num_commits += 1
- self._query_commit_info(c)
- # END for each traversed commit
- elapsed_time = time() - st
- print "Traversed %i Commits in %s [s] ( %f commits/s )" % (num_commits, elapsed_time, num_commits/elapsed_time)
+ # ref with about 100 commits in its history
+ ref_100 = '0.1.6'
+
+ def _query_commit_info(self, c):
+ c.author
+ c.authored_date
+ c.author_tz_offset
+ c.committer
+ c.committed_date
+ c.committer_tz_offset
+ c.message
+ c.parents
+
+ def test_iteration(self):
+ no = 0
+ nc = 0
+
+ # find the first commit containing the given path - always do a full
+ # iteration ( restricted to the path in question ), but in fact it should
+ # return quite a lot of commits, we just take one and hence abort the operation
+
+ st = time()
+ for c in self.rorepo.iter_commits(self.ref_100):
+ nc += 1
+ self._query_commit_info(c)
+ for obj in c.tree.traverse():
+ obj.size
+ no += 1
+ # END for each object
+ # END for each commit
+ elapsed_time = time() - st
+ print >> sys.stderr, "Traversed %i Trees and a total of %i unchached objects in %s [s] ( %f objs/s )" % (nc, no, elapsed_time, no/elapsed_time)
+
+ def test_commit_traversal(self):
+ # bound to cat-file parsing performance
+ nc = 0
+ st = time()
+ for c in self.rorepo.commit(self.ref_100).traverse(branch_first=False):
+ nc += 1
+ self._query_commit_info(c)
+ # END for each traversed commit
+ elapsed_time = time() - st
+ print >> sys.stderr, "Traversed %i Commits in %s [s] ( %f commits/s )" % (nc, elapsed_time, nc/elapsed_time)
+
+ def test_commit_iteration(self):
+ # bound to stream parsing performance
+ nc = 0
+ st = time()
+ for c in Commit.iter_items(self.rorepo, self.ref_100):
+ nc += 1
+ self._query_commit_info(c)
+ # END for each traversed commit
+ elapsed_time = time() - st
+ print >> sys.stderr, "Iterated %i Commits in %s [s] ( %f commits/s )" % (nc, elapsed_time, nc/elapsed_time)
+