# HG changeset patch # User Marcin Kuzminski # Date 2012-08-30 00:57:51 # Node ID e64c64e2b8aa1bff2f0ee348a5d33b6c97148712 # Parent fd5f2b2174889d9bd3ec318e68c7885aadfecb3e re implemented affected_files function for git using dulwich it speeds up things like 70% diff --git a/rhodecode/lib/vcs/backends/git/changeset.py b/rhodecode/lib/vcs/backends/git/changeset.py --- a/rhodecode/lib/vcs/backends/git/changeset.py +++ b/rhodecode/lib/vcs/backends/git/changeset.py @@ -410,14 +410,27 @@ class GitChangeset(BaseChangeset): """ Get's a fast accessible file changes for given changeset """ + #OLD SOLUTION + #files = set() + #for f in (self.added + self.changed + self.removed): + # files.add(f.path) + #files = list(files) - return self.added + self.changed + _r = self.repository._repo + files = set() + for parent in self.parents: + changes = _r.object_store.tree_changes(_r[parent.raw_id].tree, + _r[self.raw_id].tree) + for (oldpath, newpath), (_, _), (_, _) in changes: + files.add(newpath or oldpath) + return list(files) @LazyProperty def _diff_name_status(self): output = [] for parent in self.parents: - cmd = 'diff --name-status %s %s --encoding=utf8' % (parent.raw_id, self.raw_id) + cmd = 'diff --name-status %s %s --encoding=utf8' % (parent.raw_id, + self.raw_id) so, se = self.repository.run_git_command(cmd) output.append(so.strip()) return '\n'.join(output)