diff --git a/rhodecode/api/utils.py b/rhodecode/api/utils.py --- a/rhodecode/api/utils.py +++ b/rhodecode/api/utils.py @@ -355,12 +355,12 @@ def get_pull_request_or_error(pullreques def build_commit_data(commit, detail_level): parsed_diff = [] if detail_level == 'extended': - for f in commit.added: - parsed_diff.append(_get_commit_dict(filename=f.path, op='A')) - for f in commit.changed: - parsed_diff.append(_get_commit_dict(filename=f.path, op='M')) - for f in commit.removed: - parsed_diff.append(_get_commit_dict(filename=f.path, op='D')) + for f_path in commit.added_paths: + parsed_diff.append(_get_commit_dict(filename=f_path, op='A')) + for f_path in commit.changed_paths: + parsed_diff.append(_get_commit_dict(filename=f_path, op='M')) + for f_path in commit.removed_paths: + parsed_diff.append(_get_commit_dict(filename=f_path, op='D')) elif detail_level == 'full': from rhodecode.lib.diffs import DiffProcessor diff --git a/rhodecode/lib/vcs/backends/git/commit.py b/rhodecode/lib/vcs/backends/git/commit.py --- a/rhodecode/lib/vcs/backends/git/commit.py +++ b/rhodecode/lib/vcs/backends/git/commit.py @@ -432,8 +432,11 @@ class GitCommit(base.BaseCommit): """ if not self.parents: return list(self._get_file_nodes()) - return AddedFileNodesGenerator( - [n for n in self._get_paths_for_status('added')], self) + return AddedFileNodesGenerator(self.added_paths, self) + + @LazyProperty + def added_paths(self): + return [n for n in self._get_paths_for_status('added')] @LazyProperty def changed(self): @@ -442,8 +445,11 @@ class GitCommit(base.BaseCommit): """ if not self.parents: return [] - return ChangedFileNodesGenerator( - [n for n in self._get_paths_for_status('modified')], self) + return ChangedFileNodesGenerator(self.changed_paths, self) + + @LazyProperty + def changed_paths(self): + return [n for n in self._get_paths_for_status('modified')] @LazyProperty def removed(self): @@ -452,8 +458,11 @@ class GitCommit(base.BaseCommit): """ if not self.parents: return [] - return RemovedFileNodesGenerator( - [n for n in self._get_paths_for_status('deleted')], self) + return RemovedFileNodesGenerator(self.removed_paths, self) + + @LazyProperty + def removed_paths(self): + return [n for n in self._get_paths_for_status('deleted')] def _get_submodule_url(self, submodule_path): git_modules_path = '.gitmodules' diff --git a/rhodecode/lib/vcs/backends/hg/commit.py b/rhodecode/lib/vcs/backends/hg/commit.py --- a/rhodecode/lib/vcs/backends/hg/commit.py +++ b/rhodecode/lib/vcs/backends/hg/commit.py @@ -372,18 +372,30 @@ class MercurialCommit(base.BaseCommit): """ Returns list of added ``FileNode`` objects. """ - return AddedFileNodesGenerator([n for n in self.status[1]], self) + return AddedFileNodesGenerator(self.added_paths, self) + + @LazyProperty + def added_paths(self): + return [n for n in self.status[1]] @property def changed(self): """ Returns list of modified ``FileNode`` objects. """ - return ChangedFileNodesGenerator([n for n in self.status[0]], self) + return ChangedFileNodesGenerator(self.changed_paths, self) + + @LazyProperty + def changed_paths(self): + return [n for n in self.status[0]] @property def removed(self): """ Returns list of removed ``FileNode`` objects. """ - return RemovedFileNodesGenerator([n for n in self.status[2]], self) + return RemovedFileNodesGenerator(self.removed_paths, self) + + @LazyProperty + def removed_paths(self): + return [n for n in self.status[2]] diff --git a/rhodecode/lib/vcs/backends/svn/commit.py b/rhodecode/lib/vcs/backends/svn/commit.py --- a/rhodecode/lib/vcs/backends/svn/commit.py +++ b/rhodecode/lib/vcs/backends/svn/commit.py @@ -218,18 +218,27 @@ class SubversionCommit(base.BaseCommit): @property def added(self): - return nodes.AddedFileNodesGenerator( - self._changes_cache['added'], self) + return nodes.AddedFileNodesGenerator(self.added_paths, self) + + @LazyProperty + def added_paths(self): + return [n for n in self._changes_cache['added']] @property def changed(self): - return nodes.ChangedFileNodesGenerator( - self._changes_cache['changed'], self) + return nodes.ChangedFileNodesGenerator(self.changed_paths, self) + + @LazyProperty + def changed_paths(self): + return [n for n in self._changes_cache['changed']] @property def removed(self): - return nodes.RemovedFileNodesGenerator( - self._changes_cache['removed'], self) + return nodes.RemovedFileNodesGenerator(self.removed_paths, self) + + @LazyProperty + def removed_paths(self): + return [n for n in self._changes_cache['removed']] def _date_from_svn_properties(properties):