Guido Günther <[email protected]> writes:

[...]

> You can use args.args to convert it back to a list.

Thanks, I made a new patch rebased on latest experimental with test
case, I include the patch followed by a request-pull.

Regards.

From 5518a77782577810d2f7e8cdb93f6cf02d450f40 Mon Sep 17 00:00:00 2001
From: Daniel Dehennin <[email protected]>
Date: Sat, 12 May 2012 17:00:24 +0200
Subject: [PATCH] Add "git merge-base" wrapper.

* tests/test_GitRepository.py: New test for Repository.get_merge_base.

* gbp/git/repository.py (GitRepository.get_merge_base): New method which
  return SHA1 of a common ancestor between to commits.
---
 gbp/git/repository.py       |   20 ++++++++++++++++++++
 tests/test_GitRepository.py |   18 ++++++++++++++++++
 2 files changed, 38 insertions(+)

diff --git a/gbp/git/repository.py b/gbp/git/repository.py
index 2cc5eda..16bad60 100644
--- a/gbp/git/repository.py
+++ b/gbp/git/repository.py
@@ -299,6 +299,26 @@ class GitRepository(object):
         remote += merge.replace("refs/heads","", 1)
         return remote
 
+    def get_merge_base(self, commit1, commit2):
+        """
+        Get the common ancestor between two commits
+
+        @param commit1: commit SHA1 or name of a branch or tag
+        @type commit1: C{str}
+        @param commit2: commit SHA1 or name of a branch or tag
+        @type commit2: C{str}
+        @return: SHA1 of the common ancestor
+        @rtype: C{str}
+        """
+        args = GitArgs()
+        args.add(commit1)
+        args.add(commit2)
+        sha1, stderr, ret = self._git_inout('merge-base', args.args, 
capture_stderr=True)
+        if not ret:
+            return sha1.strip()
+        else:
+            raise GitRepositoryError("Failed to get common ancestor: %s" % 
stderr.strip())
+
     def merge(self, commit, verbose=False, edit=False):
         """
         Merge changes from the named commit into the current branch
diff --git a/tests/test_GitRepository.py b/tests/test_GitRepository.py
index 4367f93..2157d80 100644
--- a/tests/test_GitRepository.py
+++ b/tests/test_GitRepository.py
@@ -631,6 +631,24 @@ def test_update_submodules():
     >>> repo.update_submodules()
     """
 
+def test_get_merge_base():
+    """
+    Find the common ancestor of two objects
+
+    Methods tested:
+        - L{gbp.git.GitRepository.get_merge_bsae}
+
+    >>> import gbp.git
+    >>> repo = gbp.git.GitRepository(repo_dir)
+    >>> sha1 = repo.get_merge_base('master', 'foo')
+    >>> len(sha1)
+    40
+    >>> repo.get_merge_base('master', 'doesnotexist')
+    Traceback (most recent call last):
+    ...
+    GitRepositoryError: Failed to get common ancestor: fatal: Not a valid 
object name doesnotexist
+    """
+
 def test_teardown():
     """
     Perform the teardown
-- 
1.7.10


The following changes since commit ae850dae9a1dfbe9233275dc11c5f8bb517070e4:

  Config help fix (2012-05-12 16:12:18 +0200)

are available in the git repository at:

  git://git.baby-gnu.org/git-buildpackage tags/dad/add-git-merge-base-wrapper-1

for you to fetch changes up to 5518a77782577810d2f7e8cdb93f6cf02d450f40:

  Add "git merge-base" wrapper. (2012-05-13 20:29:56 +0200)

----------------------------------------------------------------
New patch with test case.

----------------------------------------------------------------
Daniel Dehennin (1):
      Add "git merge-base" wrapper.

 gbp/git/repository.py       |   20 ++++++++++++++++++++
 tests/test_GitRepository.py |   18 ++++++++++++++++++
 2 files changed, 38 insertions(+)

-- 
Daniel Dehennin
Récupérer ma clef GPG:
gpg --keyserver pgp.mit.edu --recv-keys 0x7A6FE2DF

Attachment: pgpdvfNBwpr6M.pgp
Description: PGP signature

Reply via email to