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
|
References
|
||||||
==========
|
==========
|
||||||
- Wrap missing functions: git_reference_foreach, git_reference_is_packed,
|
- Wrap missing functions: git_reference_foreach, git_reference_is_packed.
|
||||||
git_reference_reload
|
|
||||||
- Write more twisted tests. Like accessing a reference deleted by someone
|
- Write more twisted tests. Like accessing a reference deleted by someone
|
||||||
else.
|
else.
|
||||||
|
|
||||||
|
19
pygit2.c
19
pygit2.c
@ -2408,6 +2408,23 @@ Reference_rename(Reference *self, PyObject *py_name)
|
|||||||
Py_RETURN_NONE; /* Return None */
|
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 *
|
static PyObject *
|
||||||
Reference_resolve(Reference *self, PyObject *args)
|
Reference_resolve(Reference *self, PyObject *args)
|
||||||
{
|
{
|
||||||
@ -2563,6 +2580,8 @@ static PyMethodDef Reference_methods[] = {
|
|||||||
"Delete this reference. It will no longer be valid!"},
|
"Delete this reference. It will no longer be valid!"},
|
||||||
{"rename", (PyCFunction)Reference_rename, METH_O,
|
{"rename", (PyCFunction)Reference_rename, METH_O,
|
||||||
"Rename the reference."},
|
"Rename the reference."},
|
||||||
|
{"reload", (PyCFunction)Reference_reload, METH_NOARGS,
|
||||||
|
"Reload the reference from the file-system."},
|
||||||
{"resolve", (PyCFunction)Reference_resolve, METH_NOARGS,
|
{"resolve", (PyCFunction)Reference_resolve, METH_NOARGS,
|
||||||
"Resolve a symbolic reference and return a direct reference."},
|
"Resolve a symbolic reference and return a direct reference."},
|
||||||
{NULL}
|
{NULL}
|
||||||
|
@ -135,6 +135,17 @@ class ReferencesTest(utils.RepoTestCase):
|
|||||||
self.assertEqual(reference.name, 'refs/tags/version2')
|
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):
|
def test_reference_resolve(self):
|
||||||
reference = self.repo.lookup_reference('HEAD')
|
reference = self.repo.lookup_reference('HEAD')
|
||||||
self.assertEqual(reference.type, GIT_REF_SYMBOLIC)
|
self.assertEqual(reference.type, GIT_REF_SYMBOLIC)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user