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