You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by he...@apache.org on 2015/04/01 23:10:51 UTC

[34/45] allura git commit: [#7837] ticket:738 Rewrite paged_diffs using log instead of diff_summarize

[#7837] ticket:738 Rewrite paged_diffs using log instead of diff_summarize

To be consistent with previous behavior we stick with `log` call.
Because results can differ. I don't sure why, but on test repo for example:

$ svn diff --summarize -r4:5
A       b/b/c
A       b/b
A       b

$ svn log -v -r 5
------------------------------------------------------------------------
r5 | rick446 | 2010-11-18 20:14:21 +0000 (Чтв, 18 Лис 2010) | 1 line
Changed paths:
   A /b (from /a:4)

Copied a => b
------------------------------------------------------------------------


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

Branch: refs/heads/hss/7072
Commit: b361bdf9eb48fb04de329f0d4015cbb95fdef78b
Parents: c6bb4ab
Author: Igor Bondarenko <je...@gmail.com>
Authored: Wed Mar 4 13:50:08 2015 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Mon Mar 30 19:20:41 2015 +0000

----------------------------------------------------------------------
 ForgeSVN/forgesvn/model/svn.py                  | 43 ++++++++++----------
 .../forgesvn/tests/model/test_repository.py     | 11 ++---
 2 files changed, 27 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/b361bdf9/ForgeSVN/forgesvn/model/svn.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index c033f44..28bf132 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -781,28 +781,27 @@ class SVNImplementation(M.RepositoryImplementation):
         return []
 
     def paged_diffs(self, commit_id, start=0, end=None):
-        added, removed, changed, total = [], [], [], 0
+        result = {'added': [], 'removed': [], 'changed': [], 'total': 0}
         rev = self._revision(commit_id)
-        prev_rev = self._revision(self._oid(rev.number - 1))
-        summary = self._svn.diff_summarize(
-            self._url,
-            prev_rev,
-            self._url,
-            rev)
-        total = len(summary)
-        for s in summary:
-            if s.summarize_kind == pysvn.diff_summarize_kind.added:
-                added.append(h.really_unicode(s.path))
-            elif s.summarize_kind == pysvn.diff_summarize_kind.delete:
-                removed.append(h.really_unicode(s.path))
-            elif s.summarize_kind == pysvn.diff_summarize_kind.modified:
-                changed.append(h.really_unicode(s.path))
-        return {
-            'added': added,
-            'removed': removed,
-            'changed': changed,
-            'total': total,
-        }
-
+        try:
+            log_info = self._svn.log(
+                self._url,
+                revision_start=rev,
+                revision_end=rev,
+                discover_changed_paths=True)
+        except pysvn.ClientError:
+            return result
+        if len(log_info) == 0:
+            return result
+        paths = log_info[0].changed_paths
+        result['total'] = len(paths)
+        for p in paths[start:end]:
+            if p['action'] == 'A':
+                result['added'].append(h.really_unicode(p.path))
+            elif p['action'] == 'D':
+                result['removed'].append(h.really_unicode(p.path))
+            elif p['action'] == 'M':
+                result['changed'].append(h.really_unicode(p.path))
+        return result
 
 Mapper.compile_all()

http://git-wip-us.apache.org/repos/asf/allura/blob/b361bdf9/ForgeSVN/forgesvn/tests/model/test_repository.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/tests/model/test_repository.py b/ForgeSVN/forgesvn/tests/model/test_repository.py
index 79005ac..c3a392a 100644
--- a/ForgeSVN/forgesvn/tests/model/test_repository.py
+++ b/ForgeSVN/forgesvn/tests/model/test_repository.py
@@ -373,7 +373,8 @@ class TestSVNRepo(unittest.TestCase, RepoImplTestBase):
         actual = entry.paged_diffs(start=1, end=3)
         self.assertEqual(expected, actual)
 
-        empty = M.repository.Commit().paged_diffs()
+        fake_id = self.repo._impl._oid(100)
+        empty = M.repository.Commit(_id=fake_id, repo=self.repo).paged_diffs()
         self.assertEqual(sorted(actual.keys()), sorted(empty.keys()))
 
     def test_diff_create_file(self):
@@ -1198,7 +1199,7 @@ class TestDirectRepoAccess(object):
     def test_paged_diffs(self):
         diffs = self.rev.diffs
         expected = {
-            'added': [u'ЗРЯЧИЙ_ТА_ПОБАЧИТЬ'],
+            'added': [u'/ЗРЯЧИЙ_ТА_ПОБАЧИТЬ'],
             'removed': [],
             'changed': [],
             'copied': [],
@@ -1209,7 +1210,7 @@ class TestDirectRepoAccess(object):
         _id = self.repo._impl._oid(2)
         diffs = self.repo.commit(_id).diffs
         expected = {
-            'added': [u'a/b/c/hello.txt', u'a/b/c', u'a/b', u'a'],
+            'added': [u'/a', u'/a/b', u'/a/b/c', u'/a/b/c/hello.txt'],
             'removed': [],
             'changed': [],
             'copied': [],
@@ -1222,7 +1223,7 @@ class TestDirectRepoAccess(object):
         expected = {
             'added': [],
             'removed': [],
-            'changed': [u'README'],
+            'changed': [u'/README'],
             'copied': [],
             'total': 1,
         }
@@ -1232,7 +1233,7 @@ class TestDirectRepoAccess(object):
         diffs = self.repo.commit(_id).diffs
         expected = {
             'added': [],
-            'removed': ['a/b/c/hello.txt'],
+            'removed': ['/a/b/c/hello.txt'],
             'changed': [],
             'copied': [],
             'total': 1,