You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by je...@apache.org on 2015/04/22 12:27:37 UTC

[1/9] allura git commit: [#7836] ticket:739 Delegate MergeRequest._commits to repo implementation

Repository: allura
Updated Branches:
  refs/heads/ib/7836 [created] 5790fd735


[#7836] ticket:739 Delegate MergeRequest._commits to repo implementation

This way we can implement it for Hg, which is quite different from Git (merge
base + log approach doesn't work for it).


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

Branch: refs/heads/ib/7836
Commit: 57e0e94f232947b637470b99ceab3981d375bc1d
Parents: 75056f1
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Apr 21 10:53:50 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Wed Apr 22 09:44:41 2015 +0000

----------------------------------------------------------------------
 Allura/allura/model/repository.py   | 18 +++++++-----------
 ForgeGit/forgegit/model/git_repo.py | 12 ++++++++++++
 ForgeSVN/forgesvn/model/svn.py      |  4 ----
 3 files changed, 19 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/57e0e94f/Allura/allura/model/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index fe280eb..0b35480 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -321,9 +321,9 @@ class RepositoryImplementation(object):
         """
         raise NotImplementedError('paged_diffs')
 
-    def merge_base(self, mr):
-        """Given MergeRequest :param mr: find common ancestor for the merge"""
-        raise NotImplementedError('merge_base')
+    def merge_request_commits(self, mr):
+        """Given MergeRequest :param mr: return list of commits to be merged"""
+        raise NotImplementedError('merge_request_commits')
 
 
 class Repository(Artifact, ActivityObject):
@@ -719,9 +719,9 @@ class Repository(Artifact, ActivityObject):
             self.set_default_branch(branch_name)
         return branch_name
 
-    def merge_base(self, mr):
-        """Given MergeRequest :param mr: find common ancestor for the merge"""
-        return self._impl.merge_base(mr)
+    def merge_request_commits(self, mr):
+        """Given MergeRequest :param mr: return list of commits to be merged"""
+        return self._impl.merge_request_commits(mr)
 
 
 class MergeRequest(VersionedArtifact, ActivityObject):
@@ -790,11 +790,7 @@ class MergeRequest(VersionedArtifact, ActivityObject):
 
     def _commits(self):
         with self.push_downstream_context():
-            base = c.app.repo.merge_base(self)
-            return list(c.app.repo.log(
-                self.downstream.commit_id,
-                exclude=base,
-                id_only=False))
+            return c.app.repo.merge_request_commits(self)
 
     @classmethod
     def upsert(cls, **kw):

http://git-wip-us.apache.org/repos/asf/allura/blob/57e0e94f/ForgeGit/forgegit/model/git_repo.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index a0f3f5a..99c5afe 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -636,6 +636,18 @@ class GitImplementation(M.RepositoryImplementation):
         g.fetch(mr.app.repo.full_fs_path, mr.target_branch)
         return g.merge_base(mr.downstream.commit_id, 'FETCH_HEAD')
 
+    def merge_request_commits(self, mr):
+        """
+        Return list of commits to be merged
+
+        Must be called within mr.push_downstream_context()
+        """
+        base = self.merge_base(mr)
+        return list(mr.app.repo.log(
+            mr.downstream.commit_id,
+            exclude=base,
+            id_only=False))
+
 
 class _OpenedGitBlob(object):
     CHUNK_SIZE = 4096

http://git-wip-us.apache.org/repos/asf/allura/blob/57e0e94f/ForgeSVN/forgesvn/model/svn.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index 53b4190..cd410e3 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -91,10 +91,6 @@ class Repository(M.Repository):
     def rev_to_commit_id(self, rev):
         return self._impl.rev_parse(rev)
 
-    def merge_base(self, mr):
-        rev = self.latest(branch=mr.target_branch)
-        return rev._id if rev else self.head
-
 
 class SVNCalledProcessError(Exception):
 


[2/9] allura git commit: [#7836] ticket:739 Fetch target branch before finding merge base

Posted by je...@apache.org.
[#7836] ticket:739 Fetch target branch before finding merge base

Because if we don't, we get 0 commits if target branch name and source branch
name are the same, even if branches actually differ.


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

Branch: refs/heads/ib/7836
Commit: 23028fd6fbdeb3122df010b7444f4ebcc2798a28
Parents: 3364dd7
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu Mar 5 16:34:20 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Wed Apr 22 09:44:41 2015 +0000

----------------------------------------------------------------------
 ForgeGit/forgegit/model/git_repo.py | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/23028fd6/ForgeGit/forgegit/model/git_repo.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index 5994cd2..a0f3f5a 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -632,12 +632,9 @@ class GitImplementation(M.RepositoryImplementation):
         }
 
     def merge_base(self, mr):
-        # We don't need to fetch latest commits from target branch here,
-        # because merge base will always be a commit that both repos have
-        # seen
-        return self._git.git.merge_base(
-            mr.downstream.commit_id,
-            mr.target_branch)
+        g = self._git.git
+        g.fetch(mr.app.repo.full_fs_path, mr.target_branch)
+        return g.merge_base(mr.downstream.commit_id, 'FETCH_HEAD')
 
 
 class _OpenedGitBlob(object):


[8/9] allura git commit: [#7836] ticket:739 Add/fix tests

Posted by je...@apache.org.
[#7836] ticket:739 Add/fix tests


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

Branch: refs/heads/ib/7836
Commit: 3231c38e006181cfd3b52fe04740a6bb6df52bbd
Parents: 0fb2c76
Author: Igor Bondarenko <je...@gmail.com>
Authored: Wed Apr 22 09:40:12 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Wed Apr 22 09:44:42 2015 +0000

----------------------------------------------------------------------
 .../tests/functional/test_controllers.py        |  6 ++---
 .../forgegit/tests/model/test_repository.py     | 28 +++++++++++++++++++-
 2 files changed, 30 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/3231c38e/ForgeGit/forgegit/tests/functional/test_controllers.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/tests/functional/test_controllers.py b/ForgeGit/forgegit/tests/functional/test_controllers.py
index a6995c3..fd59813 100644
--- a/ForgeGit/forgegit/tests/functional/test_controllers.py
+++ b/ForgeGit/forgegit/tests/functional/test_controllers.py
@@ -683,10 +683,10 @@ class TestFork(_TestCase):
         r = self.app.get('/p/test/src-git/merge-requests').follow()
         assert '<a href="1/">changed summary</a>' in r
 
-    @patch.object(GM.Repository, 'merge_base', autospec=True)
-    def test_merge_base_error(self, merge_base):
+    @patch.object(GM.Repository, 'merge_request_commits', autospec=True)
+    def test_merge_request_commits_error(self, mr_commits):
         r, mr_num = self._request_merge()
-        merge_base.side_effect = Exception
+        mr_commits.side_effect = Exception
         r = self.app.get('/p/test/src-git/merge-requests/%s/' % mr_num)
         err = r.html.find('div', attrs={'class': 'grid-19 error'})
         assert_in("Can't find commits to merge", err.getText())

http://git-wip-us.apache.org/repos/asf/allura/blob/3231c38e/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 b8506c9..e516f35 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -693,9 +693,35 @@ class TestGitRepo(unittest.TestCase, RepoImplTestBase):
             source_branch='zz',
             target_branch='master',
         )
-        res = self.repo.merge_base(mr)
+        res = self.repo._impl.merge_base(mr)
         assert_equal(res, '1e146e67985dcd71c74de79613719bef7bddca4a')
 
+    def test_merge_request_commits(self):
+        mr = M.MergeRequest(
+            downstream={
+                'commit_id': '5c47243c8e424136fd5cdd18cd94d34c66d1955c',
+            },
+            source_branch='zz',
+            target_branch='master',
+        )
+        res = self.repo.merge_request_commits(mr)
+        expected = [
+            {'authored': {
+                'date': datetime.datetime(2013, 3, 28, 18, 54, 16),
+                'email': u'cjohns@slashdotmedia.com',
+                'name': u'Cory Johns'},
+             'committed': {
+                 'date': datetime.datetime(2013, 3, 28, 18, 54, 16),
+                 'email': u'cjohns@slashdotmedia.com',
+                 'name': u'Cory Johns'},
+             'id': '5c47243c8e424136fd5cdd18cd94d34c66d1955c',
+             'message': u'Not repo root\n',
+             'parents': ['1e146e67985dcd71c74de79613719bef7bddca4a'],
+             'refs': ['zz'],
+             'rename_details': {},
+             'size': None}]
+        assert_equals(res, expected)
+
 
 class TestGitImplementation(unittest.TestCase):
 


[7/9] allura git commit: [#7836] ticket:739 Use c.app in the merge_request_commits for git

Posted by je...@apache.org.
[#7836] ticket:739 Use c.app in the merge_request_commits for git

It executes in the downstream context, so we need to use downstream app to
generate a list of commits. If we don't do that, we will see empty list on the
first request to the page (right after user creates merge request).


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

Branch: refs/heads/ib/7836
Commit: 0fb2c76ee57bd9126868f0819f6b75c82ffbf801
Parents: 57e0e94
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Apr 21 14:01:17 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Wed Apr 22 09:44:42 2015 +0000

----------------------------------------------------------------------
 ForgeGit/forgegit/model/git_repo.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/0fb2c76e/ForgeGit/forgegit/model/git_repo.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index 99c5afe..aeb5734 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -643,7 +643,7 @@ class GitImplementation(M.RepositoryImplementation):
         Must be called within mr.push_downstream_context()
         """
         base = self.merge_base(mr)
-        return list(mr.app.repo.log(
+        return list(c.app.repo.log(
             mr.downstream.commit_id,
             exclude=base,
             id_only=False))


[3/9] allura git commit: [#7836] ticket:739 Add/fix some tests

Posted by je...@apache.org.
[#7836] ticket:739 Add/fix some tests


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

Branch: refs/heads/ib/7836
Commit: 3364dd7c516ea0589bf021295ee7f6a11a307f55
Parents: 8286322
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu Mar 5 15:57:23 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Wed Apr 22 09:44:41 2015 +0000

----------------------------------------------------------------------
 ForgeGit/forgegit/tests/functional/test_controllers.py |  8 ++++++++
 ForgeGit/forgegit/tests/model/test_repository.py       | 11 +++++++++++
 ForgeSVN/forgesvn/model/svn.py                         |  4 ++++
 3 files changed, 23 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/3364dd7c/ForgeGit/forgegit/tests/functional/test_controllers.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/tests/functional/test_controllers.py b/ForgeGit/forgegit/tests/functional/test_controllers.py
index dacec3e..a6995c3 100644
--- a/ForgeGit/forgegit/tests/functional/test_controllers.py
+++ b/ForgeGit/forgegit/tests/functional/test_controllers.py
@@ -683,6 +683,14 @@ class TestFork(_TestCase):
         r = self.app.get('/p/test/src-git/merge-requests').follow()
         assert '<a href="1/">changed summary</a>' in r
 
+    @patch.object(GM.Repository, 'merge_base', autospec=True)
+    def test_merge_base_error(self, merge_base):
+        r, mr_num = self._request_merge()
+        merge_base.side_effect = Exception
+        r = self.app.get('/p/test/src-git/merge-requests/%s/' % mr_num)
+        err = r.html.find('div', attrs={'class': 'grid-19 error'})
+        assert_in("Can't find commits to merge", err.getText())
+
 
 class TestDiff(TestController):
 

http://git-wip-us.apache.org/repos/asf/allura/blob/3364dd7c/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 dbc12b0..b8506c9 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -685,6 +685,17 @@ class TestGitRepo(unittest.TestCase, RepoImplTestBase):
         }
         assert_equals(diffs, expected)
 
+    def test_merge_base(self):
+        mr = M.MergeRequest(
+            downstream={
+                'commit_id': '5c47243c8e424136fd5cdd18cd94d34c66d1955c',
+            },
+            source_branch='zz',
+            target_branch='master',
+        )
+        res = self.repo.merge_base(mr)
+        assert_equal(res, '1e146e67985dcd71c74de79613719bef7bddca4a')
+
 
 class TestGitImplementation(unittest.TestCase):
 

http://git-wip-us.apache.org/repos/asf/allura/blob/3364dd7c/ForgeSVN/forgesvn/model/svn.py
----------------------------------------------------------------------
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index cd410e3..53b4190 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -91,6 +91,10 @@ class Repository(M.Repository):
     def rev_to_commit_id(self, rev):
         return self._impl.rev_parse(rev)
 
+    def merge_base(self, mr):
+        rev = self.latest(branch=mr.target_branch)
+        return rev._id if rev else self.head
+
 
 class SVNCalledProcessError(Exception):
 


[9/9] allura git commit: [#7836] ticket:739 Get rid of svn test for merge requests

Posted by je...@apache.org.
[#7836] ticket:739 Get rid of svn test for merge requests

They don't make any sense, since we don't support forking & merging for svn


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

Branch: refs/heads/ib/7836
Commit: 5790fd73506318f002b05b28bab6f325415842b1
Parents: 3231c38
Author: Igor Bondarenko <je...@gmail.com>
Authored: Wed Apr 22 09:41:26 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Wed Apr 22 09:44:42 2015 +0000

----------------------------------------------------------------------
 .../forgesvn/tests/model/test_repository.py     | 59 --------------------
 1 file changed, 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/5790fd73/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 6276df8..744d30a 100644
--- a/ForgeSVN/forgesvn/tests/model/test_repository.py
+++ b/ForgeSVN/forgesvn/tests/model/test_repository.py
@@ -838,16 +838,6 @@ class TestRepo(_TestWithRepo):
                 self.repo.clone_url('https', 'user'),
                 'https://user@foo.com/')
 
-    def test_merge_request(self):
-        M.MergeRequest.upsert(app_config_id=c.app.config._id, status='open')
-        M.MergeRequest.upsert(app_config_id=c.app.config._id, status='closed')
-        session(M.MergeRequest).flush()
-        session(M.MergeRequest).clear()
-        assert self.repo.merge_requests_by_statuses('open').count() == 1
-        assert self.repo.merge_requests_by_statuses('closed').count() == 1
-        assert self.repo.merge_requests_by_statuses(
-            'open', 'closed').count() == 2
-
     def test_guess_type(self):
         assert self.repo.guess_type('foo.txt') == ('text/plain', None)
         assert self.repo.guess_type('foo.gbaer') == (
@@ -932,55 +922,6 @@ class TestRepo(_TestWithRepo):
             M.Project.app_instance = old_app_instance
 
 
-class TestMergeRequest(_TestWithRepoAndCommit):
-
-    def setUp(self):
-        super(TestMergeRequest, self).setUp()
-        c.project.install_app('svn', 'test2')
-        h.set_context('test', 'test2', neighborhood='Projects')
-        self.repo2 = M.Repository(name='test2', tool='svn')
-        self.repo2._impl = mock.Mock(spec=M.RepositoryImplementation())
-        self.repo2._impl.log = lambda *a, **kw: (['foo'], [])
-        self.repo2._impl.all_commit_ids = lambda *a, **kw: []
-        self.repo2._impl._repo = self.repo2
-        self.repo2.init_as_clone('/p/test/', 'test1', '/p/test/test1/')
-        ThreadLocalORMSession.flush_all()
-        ThreadLocalORMSession.close_all()
-
-    def test_upsert(self):
-        h.set_context('test', 'test1', neighborhood='Projects')
-        mr = M.MergeRequest.upsert(
-            downstream=ming.base.Object(
-                project_id=c.project._id,
-                mount_point='test2',
-                commit_id='foo:2'),
-            target_branch='foobranch',
-            summary='summary',
-            description='description')
-        u = M.User.by_username('test-admin')
-        assert_equal(mr.creator, u)
-        assert_equal(mr.creator_name,  u.get_pref('display_name'))
-        assert_equal(mr.creator_url,  u.url())
-        assert_equal(mr.downstream_url,  '/p/test/test2/')
-        assert_equal(mr.downstream_repo_url,
-                     'http://svn.localhost/p/test/test2/')
-        with mock.patch('forgesvn.model.svn.SVNLibWrapper') as _svn,\
-                mock.patch('forgesvn.model.svn.SVNImplementation._map_log') as _map_log:
-            mr.app.repo._impl.head = 1
-            _svn().log.return_value = [mock.Mock(revision=mock.Mock(number=2))]
-            _map_log.return_value = 'bar'
-            assert_equal(mr.commits,  ['bar'])
-            # can't do assert_called_once_with because pysvn.Revision doesn't
-            # compare nicely
-            assert_equal(_svn().log.call_count, 1)
-            assert_equal(_svn().log.call_args[0],
-                         ('file:///tmp/svn/p/test/test2',))
-            assert_equal(_svn().log.call_args[1]['revision_start'].number, 2)
-            assert_equal(_svn().log.call_args[1]['limit'], 25)
-            _map_log.assert_called_once_with(
-                _svn().log.return_value[0], 'file:///tmp/svn/p/test/test2', None)
-
-
 class TestRepoObject(_TestWithRepoAndCommit):
 
     def test_upsert(self):


[4/9] allura git commit: [#7836] ticket:739 Find merge base for merge request and use it to determine what commits will be merged

Posted by je...@apache.org.
[#7836] ticket:739 Find merge base for merge request and use it to determine what commits will be merged


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

Branch: refs/heads/ib/7836
Commit: 07179161e01316e8b91061055f3b0ea6c20ddc37
Parents: cf4d528
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu Mar 5 13:54:42 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Wed Apr 22 09:44:41 2015 +0000

----------------------------------------------------------------------
 Allura/allura/model/repository.py   | 28 +++++++++++++---------------
 ForgeGit/forgegit/model/git_repo.py |  8 ++++++++
 2 files changed, 21 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/07179161/Allura/allura/model/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index 8455395..fe280eb 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -321,6 +321,10 @@ class RepositoryImplementation(object):
         """
         raise NotImplementedError('paged_diffs')
 
+    def merge_base(self, mr):
+        """Given MergeRequest :param mr: find common ancestor for the merge"""
+        raise NotImplementedError('merge_base')
+
 
 class Repository(Artifact, ActivityObject):
     BATCH_SIZE = 100
@@ -715,6 +719,10 @@ class Repository(Artifact, ActivityObject):
             self.set_default_branch(branch_name)
         return branch_name
 
+    def merge_base(self, mr):
+        """Given MergeRequest :param mr: find common ancestor for the merge"""
+        return self._impl.merge_base(mr)
+
 
 class MergeRequest(VersionedArtifact, ActivityObject):
     statuses = ['open', 'merged', 'rejected']
@@ -782,21 +790,11 @@ class MergeRequest(VersionedArtifact, ActivityObject):
 
     def _commits(self):
         with self.push_downstream_context():
-            rev = self.app.repo.latest(branch=self.target_branch)
-            if rev:
-                commit = rev._id
-            else:
-                commit = self.app.repo.head
-            try:
-                return list(c.app.repo.log(
-                    self.downstream.commit_id,
-                    exclude=commit,
-                    id_only=False))
-            except Exception:
-                log.exception(
-                    "Can't get commits for merge request",
-                    self.url())
-                return []
+            base = c.app.repo.merge_base(self)
+            return list(c.app.repo.log(
+                self.downstream.commit_id,
+                exclude=base,
+                id_only=False))
 
     @classmethod
     def upsert(cls, **kw):

http://git-wip-us.apache.org/repos/asf/allura/blob/07179161/ForgeGit/forgegit/model/git_repo.py
----------------------------------------------------------------------
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index 3b3b9e9..5994cd2 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -631,6 +631,14 @@ class GitImplementation(M.RepositoryImplementation):
             'total': total,
         }
 
+    def merge_base(self, mr):
+        # We don't need to fetch latest commits from target branch here,
+        # because merge base will always be a commit that both repos have
+        # seen
+        return self._git.git.merge_base(
+            mr.downstream.commit_id,
+            mr.target_branch)
+
 
 class _OpenedGitBlob(object):
     CHUNK_SIZE = 4096


[6/9] allura git commit: [#7836] ticket:739 Show error to a user if can't find merge base

Posted by je...@apache.org.
[#7836] ticket:739 Show error to a user if can't find merge base


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

Branch: refs/heads/ib/7836
Commit: 82863220a4ecdd11c39e0f7e74cbda654ba55ade
Parents: 0717916
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu Mar 5 14:11:05 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Wed Apr 22 09:44:41 2015 +0000

----------------------------------------------------------------------
 Allura/allura/controllers/repository.py         |  8 +++++++-
 Allura/allura/templates/repo/merge_request.html | 12 ++++++++++--
 2 files changed, 17 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/82863220/Allura/allura/controllers/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/repository.py b/Allura/allura/controllers/repository.py
index ce38b2b..d7b07eb 100644
--- a/Allura/allura/controllers/repository.py
+++ b/Allura/allura/controllers/repository.py
@@ -363,7 +363,7 @@ class MergeRequestController(object):
         c.mr_dispose_form = self.mr_dispose_form
         with self.req.push_downstream_context():
             downstream_app = c.app
-        return dict(
+        result = dict(
             downstream_app=downstream_app,
             req=self.req,
             can_merge=self.req.can_merge(),
@@ -372,6 +372,12 @@ class MergeRequestController(object):
             page=page,
             limit=limit,
             count=self.req.discussion_thread.post_count)
+        try:
+            result['commits'] = self.req.commits
+        except:
+            result['commits'] = []
+            result['error'] = True
+        return result
 
     @property
     def mr_widget_edit(self):

http://git-wip-us.apache.org/repos/asf/allura/blob/82863220/Allura/allura/templates/repo/merge_request.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/repo/merge_request.html b/Allura/allura/templates/repo/merge_request.html
index f87a894..3f5e894 100644
--- a/Allura/allura/templates/repo/merge_request.html
+++ b/Allura/allura/templates/repo/merge_request.html
@@ -56,7 +56,7 @@ Merge Request #{{req.request_number}}: {{req.summary}} ({{req.status}})
   {% if req.downstream_repo %}
     <p>
       <a href="{{req.creator_url}}">{{req.creator_name}}</a>
-      asked you to merge {{h.text.plural(req.commits|count, 'commit', 'commits')}}
+      asked you to merge {{h.text.plural(commits|count, 'commit', 'commits')}}
       from <a href="{{req.downstream_url}}">{{req.downstream_url}}</a>
       to {{ req.target_branch }},
       {{lib.abbr_date(req.mod_date)}}
@@ -64,6 +64,14 @@ Merge Request #{{req.request_number}}: {{req.summary}} ({{req.status}})
 
     <div>{{g.markdown.convert(req.description)}}</div>
 
+    {% if error %}
+      <div class='grid-19 error'>
+        Can't find commits to merge. Please checkout
+        <a href="{{req.downstream_url}}">{{req.downstream_url}}</a>
+        and follow the instructions to merge manually.
+      </div>
+    {% endif %}
+
     {% if req.merge_allowed(c.user) %}
       <div class="grid-19">
         <form action="merge" method="POST">
@@ -82,7 +90,7 @@ Merge Request #{{req.request_number}}: {{req.summary}} ({{req.status}})
       </div>
     {% endif %}
 
-    {{ c.log_widget.display(value=req.commits, app=downstream_app) }}
+    {{ c.log_widget.display(value=commits, app=downstream_app) }}
 
     <div class="grid-19"><a href="#discussion_holder">Discuss</a></div>
 


[5/9] allura git commit: [#7836] ticket:739 Log exception

Posted by je...@apache.org.
[#7836] ticket:739 Log exception


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

Branch: refs/heads/ib/7836
Commit: 75056f1a10b8ca63edc3c60466b494685f49da58
Parents: 23028fd
Author: Igor Bondarenko <je...@gmail.com>
Authored: Mon Apr 6 14:37:48 2015 +0000
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Wed Apr 22 09:44:41 2015 +0000

----------------------------------------------------------------------
 Allura/allura/controllers/repository.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/75056f1a/Allura/allura/controllers/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/repository.py b/Allura/allura/controllers/repository.py
index d7b07eb..2dafa3c 100644
--- a/Allura/allura/controllers/repository.py
+++ b/Allura/allura/controllers/repository.py
@@ -374,7 +374,11 @@ class MergeRequestController(object):
             count=self.req.discussion_thread.post_count)
         try:
             result['commits'] = self.req.commits
-        except:
+        except Exception:
+            log.info(
+                "Can't get commits for merge request %s",
+                self.req.url(),
+                exc_info=True)
             result['commits'] = []
             result['error'] = True
         return result