api: exposed modified added/modified/deleted functions of commit to return only paths.

This combined with full text search build for certain repositories that each commit
contains lots of file changes results in *huge* (10x in some cases) performance gain.
This commit is contained in:
Marcin Kuzminski 2020-03-16 15:09:45 +01:00
parent 8189b1607f
commit bd9e5dc1c3
4 changed files with 51 additions and 21 deletions

View file

@ -355,12 +355,12 @@ def get_pull_request_or_error(pullrequestid):
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

View file

@ -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'

View file

@ -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]]

View file

@ -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):