summaryrefslogtreecommitdiff
path: root/test/git/test_repo.py
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2010-07-06 12:09:11 +0200
committerSebastian Thiel <byronimo@gmail.com>2010-07-06 14:19:31 +0200
commit73959f3a2d4f224fbda03c8a8850f66f53d8cb3b (patch)
tree42e1930667a159c90a7f0bacbd83ba35091f6c82 /test/git/test_repo.py
parenta32a6bcd784fca9cb2b17365591c29d15c2f638e (diff)
downloadgitpython-73959f3a2d4f224fbda03c8a8850f66f53d8cb3b.tar.gz
Implemented main rev-parsing, including long hexshas, tags and refs. Short Shas still to be done
Diffstat (limited to 'test/git/test_repo.py')
-rw-r--r--test/git/test_repo.py40
1 files changed, 32 insertions, 8 deletions
diff --git a/test/git/test_repo.py b/test/git/test_repo.py
index 89c7f6b5..b2891378 100644
--- a/test/git/test_repo.py
+++ b/test/git/test_repo.py
@@ -381,6 +381,9 @@ class TestRepo(TestBase):
def _assert_rev_parse_types(self, name, rev_obj):
rev_parse = self.rorepo.rev_parse
+ if rev_obj.type == 'tag':
+ rev_obj = rev_obj.object
+
# tree and blob type
obj = rev_parse(name + '^{tree}')
assert obj == rev_obj.tree
@@ -439,9 +442,6 @@ class TestRepo(TestBase):
def test_rev_parse(self):
rev_parse = self.rorepo.rev_parse
- # it works with tags !
- self._assert_rev_parse('0.1.4')
-
# start from reference
num_resolved = 0
for ref in Reference.iter_items(self.rorepo):
@@ -461,29 +461,53 @@ class TestRepo(TestBase):
# END for each reference
assert num_resolved
+ # it works with tags !
+ tag = self._assert_rev_parse('0.1.4')
+ assert tag.type == 'tag'
+
# try full sha directly ( including type conversion )
+ assert tag.object == rev_parse(tag.object.hexsha)
+ self._assert_rev_parse_types(tag.object.hexsha, tag.object)
# multiple tree types result in the same tree: HEAD^{tree}^{tree}:CHANGES
+ rev = '0.1.4^{tree}^{tree}'
+ assert rev_parse(rev) == tag.object.tree
+ assert rev_parse(rev+':CHANGES') == tag.object.tree['CHANGES']
+
# try to get parents from first revision - it should fail as no such revision
# exists
+ first_rev = "33ebe7acec14b25c5f84f35a664803fcab2f7781"
+ commit = rev_parse(first_rev)
+ assert len(commit.parents) == 0
+ assert commit.hexsha == first_rev
+ self.failUnlessRaises(BadObject, rev_parse, first_rev+"~")
+ self.failUnlessRaises(BadObject, rev_parse, first_rev+"^")
+
+ # short SHA1
+ commit2 = rev_parse(first_rev[:20])
+ assert commit2 == commit
+ commit2 = rev_parse(first_rev[:5])
+ assert commit2 == commit
+
# todo: dereference tag into a blob 0.1.7^{blob} - quite a special one
+ # needs a tag which points to a blob
- # dereference tag using ^{} notation
- # ref^0 returns commit being pointed to, same with ref~0
+ # ref^0 returns commit being pointed to, same with ref~0, and ^{}
tag = rev_parse('0.1.4')
- for token in ('~^'):
- assert tag.object == rev_parse('0.1.4%s0' % token)
+ for token in (('~0', '^0', '^{}')):
+ assert tag.object == rev_parse('0.1.4%s' % token)
# END handle multiple tokens
# missing closing brace commit^{tree
+ self.failUnlessRaises(ValueError, rev_parse, '0.1.4^{tree')
# missing starting brace
+ self.failUnlessRaises(ValueError, rev_parse, '0.1.4^tree}')
- # not enough parents ^10
# cannot handle rev-log for now
self.failUnlessRaises(ValueError, rev_parse, "hi@there")