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/02/06 20:35:19 UTC

[2/3] git commit: [#4691] Work-around for old, incorrectly computed DiffInfoDocs

[#4691] Work-around for old, incorrectly computed DiffInfoDocs

Signed-off-by: Cory Johns <jo...@geek.net>


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

Branch: refs/heads/master
Commit: 0a93358e93aaf8d2204bfc1f26a0b4c41a11b9e1
Parents: a7ba577
Author: Cory Johns <jo...@geek.net>
Authored: Wed Feb 6 16:06:46 2013 +0000
Committer: Cory Johns <jo...@geek.net>
Committed: Wed Feb 6 17:24:46 2013 +0000

----------------------------------------------------------------------
 Allura/allura/model/repo.py                      |    7 +++++++
 Allura/allura/model/repository.py                |   12 ++++++++++++
 Allura/allura/tests/model/test_repo.py           |   13 +++++++++++++
 ForgeGit/forgegit/model/git_repo.py              |   14 +++++++++++++-
 ForgeGit/forgegit/tests/model/test_repository.py |   10 ++++++++++
 5 files changed, 55 insertions(+), 1 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/0a93358e/Allura/allura/model/repo.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repo.py b/Allura/allura/model/repo.py
index c97f408..3c48e5e 100644
--- a/Allura/allura/model/repo.py
+++ b/Allura/allura/model/repo.py
@@ -347,6 +347,13 @@ class Commit(RepoObject):
                 cur = cur[part]
         return cur
 
+    def has_path(self, path):
+        try:
+            self.get_path(path)
+            return True
+        except KeyError:
+            return False
+
     @LazyProperty
     def changed_paths(self):
         '''

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/0a93358e/Allura/allura/model/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index fbdb14d..05dc771 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -123,6 +123,18 @@ class RepositoryImplementation(object):
             changed = paths & set(commit.changed_paths)
             result.update({path: commit._id for path in changed})
             paths = paths - changed
+
+            # Hacky work-around for DiffInfoDocs previously having been
+            # computed wrong (not including children of added trees).
+            # Can be removed once all projects have had diffs / LCDs refreshed.
+            parent = commit.get_parent()
+            if parent:
+                changed = set([path for path in paths if not parent.has_path(path)])
+                result.update({path: commit._id for path in changed})
+                paths = paths - changed
+            else:
+                result.update({path: commit._id for path in paths})
+
             commit = commit.get_parent()
         return result
 

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/0a93358e/Allura/allura/tests/model/test_repo.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/model/test_repo.py b/Allura/allura/tests/model/test_repo.py
index 6ce0364..81637a0 100644
--- a/Allura/allura/tests/model/test_repo.py
+++ b/Allura/allura/tests/model/test_repo.py
@@ -284,6 +284,19 @@ class TestLastCommit(unittest.TestCase):
         self.assertEqual(lcd.by_name['file3'], commit3._id)
         self.assertEqual(lcd.by_name['file4'], commit4._id)
 
+    def test_missing_add_record(self):
+        commit1 = self._add_commit('Commit 1', ['file1'])
+        commit2 = self._add_commit('Commit 2', ['file2'])
+        commit2.changed_paths = []
+        result = self.repo.last_commit_ids(commit2, ['file2'])
+        assert_equal(result, {'file2': commit2._id})
+
+    def test_missing_add_record_first_commit(self):
+        commit1 = self._add_commit('Commit 1', ['file1'])
+        commit1.changed_paths = []
+        result = self.repo.last_commit_ids(commit1, ['file1'])
+        assert_equal(result, {'file1': commit1._id})
+
 
 class TestModelCache(unittest.TestCase):
     def setUp(self):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/0a93358e/ForgeGit/forgegit/model/git_repo.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index 3b20706..67a1906 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -243,10 +243,22 @@ class GitImplementation(M.RepositoryImplementation):
             rev = 'HEAD'
         start = skip or 0
         stop = start + limit if limit is not None else None
+
+        def _pred(c):
+            '''
+            Work-around for potentially b0rked changed_paths.
+            This could be replaced with lambda c: path in c.changed_paths
+            once all projects have had their DiffInfoDocs refreshed.'''
+            if path in c.changed_paths:
+                return True
+            parent = c.get_parent()
+            if c.has_path(path) and not (parent and parent.has_path(path)):
+                return True  # added in this commit, inspite of changed_paths
+            return False
         predicate = None
         if path is not None:
             path = path.strip('/')
-            predicate = lambda c: path in c.changed_paths
+            predicate = _pred
 
         iter_tree = self.commit(rev).climb_commit_tree(predicate)
         for commit in itertools.islice(iter_tree, start, stop):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/0a93358e/ForgeGit/forgegit/tests/model/test_repository.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/tests/model/test_repository.py b/ForgeGit/forgegit/tests/model/test_repository.py
index 75ff504..b1a16f5 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -283,6 +283,16 @@ class TestGitCommit(unittest.TestCase):
         assert commits == ['6a45885ae7347f1cac5103b0050cc1be6a1496c8']
         commits = list(self.repo.commits('not/exist/'))
         assert commits == []
+        # with missing add record
+        commit = M.repo.Commit.query.get(_id='df30427c488aeab84b2352bdf88a3b19223f9d7a')
+        commit.changed_paths = []
+        commits = list(self.repo.commits('README', 'df30427c488aeab84b2352bdf88a3b19223f9d7a'))
+        assert_equal(commits, ['df30427c488aeab84b2352bdf88a3b19223f9d7a'])
+        # with missing add record & no parent
+        commit = M.repo.Commit.query.get(_id='9a7df788cf800241e3bb5a849c8870f2f8259d98')
+        commit.changed_paths = ['a']
+        commits = list(self.repo.commits('a/b/c/hello.txt', '9a7df788cf800241e3bb5a849c8870f2f8259d98'))
+        assert_equal(commits, ['9a7df788cf800241e3bb5a849c8870f2f8259d98'])
 
     def test_commits_count(self):
         commits = self.repo.commits_count()