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