support setting a detatched HEAD
This commit is contained in:
@@ -179,13 +179,22 @@ Repository_head__get__(Repository *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
Repository_head__set__(Repository *self, PyObject *py_refname)
|
Repository_head__set__(Repository *self, PyObject *py_val)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
if (PyObject_TypeCheck(py_val, &OidType)) {
|
||||||
|
git_oid oid;
|
||||||
|
py_oid_to_git_oid(py_val, &oid);
|
||||||
|
err = git_repository_set_head_detached(self->repo, &oid, NULL, NULL);
|
||||||
|
if (err < 0) {
|
||||||
|
Error_set(err);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
const char *refname;
|
const char *refname;
|
||||||
PyObject *trefname;
|
PyObject *trefname;
|
||||||
|
|
||||||
refname = py_str_borrow_c_str(&trefname, py_refname, NULL);
|
refname = py_str_borrow_c_str(&trefname, py_val, NULL);
|
||||||
if (refname == NULL)
|
if (refname == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@@ -195,6 +204,7 @@ Repository_head__set__(Repository *self, PyObject *py_refname)
|
|||||||
Error_set_str(err, refname);
|
Error_set_str(err, refname);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -70,6 +70,15 @@ class RepositoryTest(utils.BareRepoTestCase):
|
|||||||
self.assertFalse(self.repo.head_is_unborn)
|
self.assertFalse(self.repo.head_is_unborn)
|
||||||
self.assertFalse(self.repo.head_is_detached)
|
self.assertFalse(self.repo.head_is_detached)
|
||||||
|
|
||||||
|
def test_set_head(self):
|
||||||
|
# Test setting a detatched HEAD.
|
||||||
|
self.repo.head = Oid(hex=PARENT_SHA)
|
||||||
|
self.assertEqual(self.repo.head.target.hex, PARENT_SHA)
|
||||||
|
# And test setting a normal HEAD.
|
||||||
|
self.repo.head = "refs/heads/master"
|
||||||
|
self.assertEqual(self.repo.head.name, "refs/heads/master")
|
||||||
|
self.assertEqual(self.repo.head.target.hex, HEAD_SHA)
|
||||||
|
|
||||||
def test_read(self):
|
def test_read(self):
|
||||||
self.assertRaises(TypeError, self.repo.read, 123)
|
self.assertRaises(TypeError, self.repo.read, 123)
|
||||||
self.assertRaisesWithArg(KeyError, '1' * 40, self.repo.read, '1' * 40)
|
self.assertRaisesWithArg(KeyError, '1' * 40, self.repo.read, '1' * 40)
|
||||||
|
Reference in New Issue
Block a user