|
7 | 7 | from test.testlib import * |
8 | 8 | from git import * |
9 | 9 | from time import time |
| 10 | +import sys |
10 | 11 |
|
11 | 12 | class TestPerformance(TestBase): |
12 | 13 |
|
13 | | - def _query_commit_info(self, c): |
14 | | - c.author |
15 | | - c.authored_date |
16 | | - c.author_tz_offset |
17 | | - c.committer |
18 | | - c.committed_date |
19 | | - c.committer_tz_offset |
20 | | - c.message |
21 | | - c.parents |
22 | | - |
23 | | - def test_iteration(self): |
24 | | - num_objs = 0 |
25 | | - num_commits = 0 |
26 | | - |
27 | | - # find the first commit containing the given path - always do a full |
28 | | - # iteration ( restricted to the path in question ), but in fact it should |
29 | | - # return quite a lot of commits, we just take one and hence abort the operation |
30 | | - |
31 | | - st = time() |
32 | | - for c in self.rorepo.iter_commits('0.1.6'): |
33 | | - num_commits += 1 |
34 | | - self._query_commit_info(c) |
35 | | - for obj in c.tree.traverse(): |
36 | | - obj.size |
37 | | - num_objs += 1 |
38 | | - # END for each object |
39 | | - # END for each commit |
40 | | - elapsed_time = time() - st |
41 | | - 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) |
42 | | - |
43 | | - def test_commit_traversal(self): |
44 | | - num_commits = 0 |
45 | | - |
46 | | - st = time() |
47 | | - for c in self.rorepo.commit('0.1.6').traverse(branch_first=False): |
48 | | - num_commits += 1 |
49 | | - self._query_commit_info(c) |
50 | | - # END for each traversed commit |
51 | | - elapsed_time = time() - st |
52 | | - print "Traversed %i Commits in %s [s] ( %f commits/s )" % (num_commits, elapsed_time, num_commits/elapsed_time) |
| 14 | + # ref with about 100 commits in its history |
| 15 | + ref_100 = '0.1.6' |
| 16 | + |
| 17 | + def _query_commit_info(self, c): |
| 18 | + c.author |
| 19 | + c.authored_date |
| 20 | + c.author_tz_offset |
| 21 | + c.committer |
| 22 | + c.committed_date |
| 23 | + c.committer_tz_offset |
| 24 | + c.message |
| 25 | + c.parents |
| 26 | + |
| 27 | + def test_iteration(self): |
| 28 | + no = 0 |
| 29 | + nc = 0 |
| 30 | + |
| 31 | + # find the first commit containing the given path - always do a full |
| 32 | + # iteration ( restricted to the path in question ), but in fact it should |
| 33 | + # return quite a lot of commits, we just take one and hence abort the operation |
| 34 | + |
| 35 | + st = time() |
| 36 | + for c in self.rorepo.iter_commits(self.ref_100): |
| 37 | + nc += 1 |
| 38 | + self._query_commit_info(c) |
| 39 | + for obj in c.tree.traverse(): |
| 40 | + obj.size |
| 41 | + no += 1 |
| 42 | + # END for each object |
| 43 | + # END for each commit |
| 44 | + elapsed_time = time() - st |
| 45 | + 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) |
| 46 | + |
| 47 | + def test_commit_traversal(self): |
| 48 | + # bound to cat-file parsing performance |
| 49 | + nc = 0 |
| 50 | + st = time() |
| 51 | + for c in self.rorepo.commit(self.ref_100).traverse(branch_first=False): |
| 52 | + nc += 1 |
| 53 | + self._query_commit_info(c) |
| 54 | + # END for each traversed commit |
| 55 | + elapsed_time = time() - st |
| 56 | + print >> sys.stderr, "Traversed %i Commits in %s [s] ( %f commits/s )" % (nc, elapsed_time, nc/elapsed_time) |
| 57 | + |
| 58 | + def test_commit_iteration(self): |
| 59 | + # bound to stream parsing performance |
| 60 | + nc = 0 |
| 61 | + st = time() |
| 62 | + for c in Commit.iter_items(self.rorepo, self.ref_100): |
| 63 | + nc += 1 |
| 64 | + self._query_commit_info(c) |
| 65 | + # END for each traversed commit |
| 66 | + elapsed_time = time() - st |
| 67 | + print >> sys.stderr, "Iterated %i Commits in %s [s] ( %f commits/s )" % (nc, elapsed_time, nc/elapsed_time) |
| 68 | + |
0 commit comments