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
pgpdvfNBwpr6M.pgp
Description: PGP signature

