# HG changeset patch # User Marcin Kuzminski # Date 1351343221 -7200 # Node ID 4abfb1afd9f5be8d3dd446deec5108fabd1f1ada # Parent e46d0a90556e912d132620e7c463187b3c57a0d9 fixes #630 git statistics do too much work making them slow. added/changed/removed methods didn't use generator methods to return the list of changes - added test for that case diff -r e46d0a90556e -r 4abfb1afd9f5 rhodecode/lib/vcs/backends/git/changeset.py --- a/rhodecode/lib/vcs/backends/git/changeset.py Sat Oct 27 14:33:29 2012 +0200 +++ b/rhodecode/lib/vcs/backends/git/changeset.py Sat Oct 27 15:07:01 2012 +0200 @@ -11,7 +11,8 @@ from rhodecode.lib.vcs.exceptions import ImproperArchiveTypeError from rhodecode.lib.vcs.backends.base import BaseChangeset, EmptyChangeset from rhodecode.lib.vcs.nodes import FileNode, DirNode, NodeKind, RootNode, \ - RemovedFileNode, SubModuleNode + RemovedFileNode, SubModuleNode, ChangedFileNodesGenerator,\ + AddedFileNodesGenerator, RemovedFileNodesGenerator from rhodecode.lib.vcs.utils import safe_unicode from rhodecode.lib.vcs.utils import date_fromtimestamp from rhodecode.lib.vcs.utils.lazy import LazyProperty @@ -468,7 +469,8 @@ """ if not self.parents: return list(self._get_file_nodes()) - return [self.get_node(path) for path in self._get_paths_for_status('added')] + return AddedFileNodesGenerator([n for n in + self._get_paths_for_status('added')], self) @LazyProperty def changed(self): @@ -477,7 +479,8 @@ """ if not self.parents: return [] - return [self.get_node(path) for path in self._get_paths_for_status('modified')] + return ChangedFileNodesGenerator([n for n in + self._get_paths_for_status('modified')], self) @LazyProperty def removed(self): @@ -486,4 +489,5 @@ """ if not self.parents: return [] - return [RemovedFileNode(path) for path in self._get_paths_for_status('deleted')] + return RemovedFileNodesGenerator([n for n in + self._get_paths_for_status('deleted')], self) diff -r e46d0a90556e -r 4abfb1afd9f5 rhodecode/tests/vcs/test_changesets.py --- a/rhodecode/tests/vcs/test_changesets.py Sat Oct 27 14:33:29 2012 +0200 +++ b/rhodecode/tests/vcs/test_changesets.py Sat Oct 27 15:07:01 2012 +0200 @@ -5,7 +5,8 @@ from base import BackendTestMixin from conf import SCM_TESTS from rhodecode.lib.vcs.backends.base import BaseChangeset -from rhodecode.lib.vcs.nodes import FileNode +from rhodecode.lib.vcs.nodes import FileNode, AddedFileNodesGenerator,\ + ChangedFileNodesGenerator, RemovedFileNodesGenerator from rhodecode.lib.vcs.exceptions import BranchDoesNotExistError from rhodecode.lib.vcs.exceptions import ChangesetDoesNotExistError from rhodecode.lib.vcs.exceptions import RepositoryError @@ -308,13 +309,16 @@ def test_head_added(self): changeset = self.repo.get_changeset() + self.assertTrue(isinstance(changeset.added, AddedFileNodesGenerator)) self.assertItemsEqual(changeset.added, [ changeset.get_node('fallout'), ]) + self.assertTrue(isinstance(changeset.changed, ChangedFileNodesGenerator)) self.assertItemsEqual(changeset.changed, [ changeset.get_node('foo/bar'), changeset.get_node('foobar'), ]) + self.assertTrue(isinstance(changeset.removed, RemovedFileNodesGenerator)) self.assertEqual(len(changeset.removed), 1) self.assertEqual(list(changeset.removed)[0].path, 'qwe')