refs: implement reference reload
This commit is contained in:
parent
73a4a3a649
commit
4a33c7f806
3
TODO.txt
3
TODO.txt
@ -5,8 +5,7 @@ Signature
|
||||
|
||||
References
|
||||
==========
|
||||
- Wrap missing functions: git_reference_foreach, git_reference_is_packed,
|
||||
git_reference_reload
|
||||
- Wrap missing functions: git_reference_foreach, git_reference_is_packed.
|
||||
- Write more twisted tests. Like accessing a reference deleted by someone
|
||||
else.
|
||||
|
||||
|
19
pygit2.c
19
pygit2.c
@ -2408,6 +2408,23 @@ Reference_rename(Reference *self, PyObject *py_name)
|
||||
Py_RETURN_NONE; /* Return None */
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
Reference_reload(Reference *self)
|
||||
{
|
||||
int err;
|
||||
|
||||
CHECK_REFERENCE(self);
|
||||
|
||||
err = git_reference_reload(self->reference);
|
||||
if (err < 0) {
|
||||
self->reference = NULL;
|
||||
return Error_set(err);
|
||||
}
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
||||
static PyObject *
|
||||
Reference_resolve(Reference *self, PyObject *args)
|
||||
{
|
||||
@ -2563,6 +2580,8 @@ static PyMethodDef Reference_methods[] = {
|
||||
"Delete this reference. It will no longer be valid!"},
|
||||
{"rename", (PyCFunction)Reference_rename, METH_O,
|
||||
"Rename the reference."},
|
||||
{"reload", (PyCFunction)Reference_reload, METH_NOARGS,
|
||||
"Reload the reference from the file-system."},
|
||||
{"resolve", (PyCFunction)Reference_resolve, METH_NOARGS,
|
||||
"Resolve a symbolic reference and return a direct reference."},
|
||||
{NULL}
|
||||
|
@ -135,6 +135,17 @@ class ReferencesTest(utils.RepoTestCase):
|
||||
self.assertEqual(reference.name, 'refs/tags/version2')
|
||||
|
||||
|
||||
def test_reload(self):
|
||||
name = 'refs/tags/version1'
|
||||
|
||||
ref = self.repo.create_symbolic_reference(name, "refs/heads/master")
|
||||
ref2 = self.repo.lookup_reference(name)
|
||||
ref.delete()
|
||||
self.assertEqual(ref2.name, name)
|
||||
self.assertRaises(KeyError, ref2.reload)
|
||||
self.assertRaises(GitError, getattr, ref2, 'name')
|
||||
|
||||
|
||||
def test_reference_resolve(self):
|
||||
reference = self.repo.lookup_reference('HEAD')
|
||||
self.assertEqual(reference.type, GIT_REF_SYMBOLIC)
|
||||
|
Loading…
x
Reference in New Issue
Block a user