summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES2
-rw-r--r--lib/git/repo.py9
-rw-r--r--test/git/test_commit.py16
-rw-r--r--test/git/test_performance.py38
4 files changed, 46 insertions, 19 deletions
diff --git a/CHANGES b/CHANGES
index 61172343..c4ea13b0 100644
--- a/CHANGES
+++ b/CHANGES
@@ -42,6 +42,8 @@ Repo
* tree method now requires a Ref instance as input and defaults to the active_branche
instead of master
* Removed 'log' method as it as effectively the same as the 'commits' method
+* 'commits' method has no max-count of returned commits anymore, it now behaves
+ like git-rev-list
Diff
----
diff --git a/lib/git/repo.py b/lib/git/repo.py
index f07edbe0..c74c7e8d 100644
--- a/lib/git/repo.py
+++ b/lib/git/repo.py
@@ -197,7 +197,7 @@ class Repo(object):
# END distinguish hexsha vs other information
return blames
- def commits(self, start='master', path='', max_count=10, skip=0):
+ def commits(self, start='master', path='', max_count=None, skip=0):
"""
A list of Commit objects representing the history of a given ref/commit
@@ -209,7 +209,7 @@ class Repo(object):
Commits that do not contain that path will not be returned.
``max_count``
- is the maximum number of commits to return (default 10)
+ is the maximum number of commits to return (default None)
``skip``
is the number of commits to skip (default 0) which will effectively
@@ -220,7 +220,10 @@ class Repo(object):
"""
options = {'max_count': max_count,
'skip': skip}
-
+
+ if max_count is None:
+ options.pop('max_count')
+
return Commit.list_items(self, start, path, **options)
def commits_between(self, frm, to):
diff --git a/test/git/test_commit.py b/test/git/test_commit.py
index 1966d198..a95fb675 100644
--- a/test/git/test_commit.py
+++ b/test/git/test_commit.py
@@ -230,19 +230,3 @@ class TestCommit(object):
assert_equal(commit1, commit2)
assert_not_equal(commit2, commit3)
- def test_iteration(self):
- root = self.repo.tree()
- head = self.repo.active_branch
- head_commit = self.repo.active_branch.object
- num_objs = 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
-
- for obj in root.traverse():
- num_objs += 1
- del( head_commit.tree ) # force it to clear the cache, just to make it harder
- assert obj in head_commit.tree.traverse()
- # END for each object
-
diff --git a/test/git/test_performance.py b/test/git/test_performance.py
new file mode 100644
index 00000000..96f13a2e
--- /dev/null
+++ b/test/git/test_performance.py
@@ -0,0 +1,38 @@
+# test_performance.py
+# Copyright (C) 2008, 2009 Michael Trier (mtrier@gmail.com) and contributors
+#
+# This module is part of GitPython and is released under
+# the BSD License: http://www.opensource.org/licenses/bsd-license.php
+
+from test.testlib import *
+from git import *
+from time import time
+
+class TestPerformance(object):
+ def setup(self):
+ self.repo = Repo(GIT_REPO)
+
+ 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.repo.commits():
+ num_commits += 1
+ c.author
+ c.authored_date
+ c.committer
+ c.committed_date
+ c.message
+ 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)
+