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/05/27 13:57:52 UTC

[20/50] [abbrv] 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/e48f2361
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/e48f2361
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/e48f2361

Branch: refs/heads/ib/7868
Commit: e48f2361b6910d10b891418ff0cb7fa7d8d0e59e
Parents: 42d3a61
Author: Igor Bondarenko <je...@gmail.com>
Authored: Thu Mar 5 13:54:42 2015 +0000
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Wed May 20 19:43:16 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/e48f2361/Allura/allura/model/repository.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index e4583e5..9162117 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
@@ -713,6 +717,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']
@@ -780,21 +788,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/e48f2361/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