refs: implement reference reload

This commit is contained in:
J. David Ibáñez 2011-12-25 10:46:38 +01:00
parent 73a4a3a649
commit 4a33c7f806
3 changed files with 31 additions and 2 deletions

@ -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.

@ -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)