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:40 UTC
[4/9] allura git commit: [#7836] ticket:739 Find merge base for merge
request and use it to determine what commits will be merged
[#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