You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2013/12/18 23:10:47 UTC

[4/6] git commit: [#6821] Remove LCD dependency on DiffInfoDoc

[#6821] Remove LCD dependency on DiffInfoDoc

Signed-off-by: Cory Johns <cj...@slashdotmedia.com>


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/fd23eda9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/fd23eda9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/fd23eda9

Branch: refs/heads/master
Commit: fd23eda9f16d197e6483f80a71758bf16467b3ca
Parents: f583e6e
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Tue Dec 17 21:30:11 2013 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Wed Dec 18 22:10:34 2013 +0000

----------------------------------------------------------------------
 Allura/allura/model/repo.py         | 23 +++++++++++------------
 Allura/allura/model/repository.py   |  8 ++++++++
 ForgeGit/forgegit/model/git_repo.py |  7 +++++++
 ForgeSVN/forgesvn/model/svn.py      | 13 +++++++++++++
 4 files changed, 39 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/fd23eda9/Allura/allura/model/repo.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repo.py b/Allura/allura/model/repo.py
index 682670a..9977a0f 100644
--- a/Allura/allura/model/repo.py
+++ b/Allura/allura/model/repo.py
@@ -430,18 +430,17 @@ class Commit(RepoObject, ActivityObject):
             If the file /foo/bar is changed in the commit,
             this would return ['', 'foo', 'foo/bar']
         '''
-        diff_info = DiffInfoDoc.m.get(_id=self._id)
-        diffs = set()
-        if diff_info:
-            for d in diff_info.differences:
-                node = d.name.strip('/')
-                diffs.add(node)
-                node_path = os.path.dirname(node)
-                while node_path:
-                    diffs.add(node_path)
-                    node_path = os.path.dirname(node_path)
-                diffs.add('')  # include '/' if there are any changes
-        return diffs
+        changes = self.repo.get_changes(self._id)
+        changed_paths = set()
+        for c in changes:
+            node = c.strip('/')
+            changed_paths.add(node)
+            node_path = os.path.dirname(node)
+            while node_path:
+                changed_paths.add(node_path)
+                node_path = os.path.dirname(node_path)
+            changed_paths.add('')  # include '/' if there are any changes
+        return changed_paths
 
     @LazyProperty
     def added_paths(self):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/fd23eda9/Allura/allura/model/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index 10f2950..7d0fae0 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -280,6 +280,12 @@ class RepositoryImplementation(object):
         """
         raise NotImplementedError('_get_last_commit')
 
+    def get_changes(self, commit_id):
+        """
+        Return the list of files changed by a given commit.
+        """
+        raise NotImplemented('get_changes')
+
 class Repository(Artifact, ActivityObject):
     BATCH_SIZE=100
     class __mongometa__:
@@ -387,6 +393,8 @@ class Repository(Artifact, ActivityObject):
         return self._impl.compute_tree_new(commit, path)
     def last_commit_ids(self, commit, paths):
         return self._impl.last_commit_ids(commit, paths)
+    def get_changes(self, commit_id):
+        return self._impl.get_changes(commit_id)
     def is_empty(self):
         return self._impl.is_empty()
     def is_file(self, path, rev=None):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/fd23eda9/ForgeGit/forgegit/model/git_repo.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index 5a2c3b9..ae9f63e 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -526,6 +526,13 @@ class GitImplementation(M.RepositoryImplementation):
         else:
             return None, set()
 
+    def get_changes(self, commit_id):
+        return self._git.git.log(
+                commit_id,
+                name_only=True,
+                pretty='format:',
+                max_count=1).splitlines()[1:]
+
 class _OpenedGitBlob(object):
     CHUNK_SIZE=4096
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/fd23eda9/ForgeSVN/forgesvn/model/svn.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index 9e6eb83..f4d0ac0 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -683,6 +683,19 @@ class SVNImplementation(M.RepositoryImplementation):
                 entries[path] = self._oid(info.last_changed_rev.number)
         return entries
 
+    def get_changes(self, oid):
+        rev = self._revision(oid)
+        try:
+            log_entry = self._svn.log(
+                self._url,
+                revision_start=rev,
+                limit=1,
+                discover_changed_paths=True)[0]
+        except pysvn.ClientError:
+            log.info('ClientError processing %r %r, treating as empty', oid, self._repo, exc_info=True)
+            log_entry = Object(date='', message='', changed_paths=[])
+        return [p.path for p in log_entry.changed_paths]
+
     def _path_to_root(self, path, rev=None):
         '''Return tag/branch/trunk root for given path inside svn repo'''
         if path: