diff options
author | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2014-11-05 15:01:57 +0000 |
---|---|---|
committer | Sam Thursfield <sam.thursfield@codethink.co.uk> | 2014-11-05 18:34:47 +0000 |
commit | b4a4c1a772d80e7fd764ecea878cfa86c07edd7e (patch) | |
tree | 6592dc7205c943d07ae3dd132e01bc03956c987f /morphlib | |
parent | ac9e6787cd2b82bc37b9ba71d09d44aac71f85b1 (diff) | |
download | morph-b4a4c1a772d80e7fd764ecea878cfa86c07edd7e.tar.gz |
Add GitDirectory.ref_exists() method
This allows checking if a ref exists without requiring the caller
to use a try:, except: block.
Diffstat (limited to 'morphlib')
-rw-r--r-- | morphlib/gitdir.py | 7 | ||||
-rw-r--r-- | morphlib/gitdir_tests.py | 7 |
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') |