summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2014-11-06 15:59:21 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2014-11-06 15:59:21 +0000
commita04cb6cf9e3ad745af8b3c4d4675cfd4c3b12df1 (patch)
tree6ef399b1c85326b42d585a30c10ab71d5be2a48d
parent67afd098cd297b769b1341a460d160a2902ba4e4 (diff)
parentb4a4c1a772d80e7fd764ecea878cfa86c07edd7e (diff)
downloadmorph-a04cb6cf9e3ad745af8b3c4d4675cfd4c3b12df1.tar.gz
Merge branch 'sam/gitdir-ref-exists'
Reviewed-By: Adam Coldrick <adam.coldrick@codethink.co.uk> Reviewed-By: Jim MacArtuhur <jim.macarthur@codethink.co.uk>
-rw-r--r--morphlib/gitdir.py7
-rw-r--r--morphlib/gitdir_tests.py7
2 files changed, 14 insertions, 0 deletions
diff --git a/morphlib/gitdir.py b/morphlib/gitdir.py
index 9fef4f1e..fd7f3808 100644
--- a/morphlib/gitdir.py
+++ b/morphlib/gitdir.py
@@ -537,6 +537,13 @@ class GitDirectory(object):
def resolve_ref_to_tree(self, ref):
return self._rev_parse('%s^{tree}' % ref)
+ def ref_exists(self, ref):
+ try:
+ self._rev_parse('%s^{commit}' % ref)
+ return True
+ except InvalidRefError:
+ return False
+
def _list_files_in_work_tree(self):
for dirpath, subdirs, filenames in os.walk(self.dirname):
if dirpath == self.dirname and '.git' in subdirs:
diff --git a/morphlib/gitdir_tests.py b/morphlib/gitdir_tests.py
index 456e3716..10b3b7e5 100644
--- a/morphlib/gitdir_tests.py
+++ b/morphlib/gitdir_tests.py
@@ -162,6 +162,13 @@ class GitDirectoryContentsTests(unittest.TestCase):
self.assertEqual(len(tree), 40)
self.assertNotEqual(commit, tree)
+ def test_ref_exists(self):
+ gd = morphlib.gitdir.GitDirectory(self.dirname)
+ self.assertFalse(gd.ref_exists('non-existant-ref'))
+ self.assertTrue(gd.ref_exists('master'))
+ self.assertFalse(
+ gd.ref_exists('0000000000000000000000000000000000000000'))
+
def test_store_blob_with_string(self):
gd = morphlib.gitdir.GitDirectory(self.dirname)
sha1 = gd.store_blob('test string')