From 6866a3aac5c4d32f78c2f1328910f61eb946420c Mon Sep 17 00:00:00 2001 From: Nico von Geyso Date: Tue, 28 May 2013 11:23:26 +0200 Subject: [PATCH] Added: Reference.get_object() method get_object() retrieves the object the current reference is pointing to --- docs/references.rst | 3 ++- src/reference.c | 23 +++++++++++++++++++++++ test/test_refs.py | 6 ++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/references.rst b/docs/references.rst index 943c367..c8790ad 100644 --- a/docs/references.rst +++ b/docs/references.rst @@ -11,7 +11,7 @@ Example:: >>> all_refs = repo.listall_references() >>> master_ref = repo.lookup_reference("refs/heads/master") - >>> commit = repo[master_ref.target] + >>> commit = master_ref.get_object() # or repo[master_ref.target] The Reference type @@ -25,6 +25,7 @@ The Reference type .. automethod:: pygit2.Reference.rename .. automethod:: pygit2.Reference.resolve .. automethod:: pygit2.Reference.log +.. automethod:: pygit2.Reference.get_object The HEAD diff --git a/src/reference.c b/src/reference.c index e01eb47..4d11cb5 100644 --- a/src/reference.c +++ b/src/reference.c @@ -29,6 +29,7 @@ #include #include #include +#include "object.h" #include "error.h" #include "types.h" #include "utils.h" @@ -312,6 +313,27 @@ Reference_log(Reference *self) } +PyDoc_STRVAR(Reference_get_object__doc__, + "get_object() -> object\n" + "\n" + "Retrieves the object the current reference is pointing to."); + +PyObject * +Reference_get_object(Reference *self) +{ + int err; + git_object* obj; + + CHECK_REFERENCE(self); + + err = git_reference_peel(&obj, self->reference, GIT_OBJ_ANY); + if (err < 0) + return Error_set(err); + + return wrap_object(obj, self->repo); +} + + PyDoc_STRVAR(RefLogEntry_committer__doc__, "Committer."); PyObject * @@ -404,6 +426,7 @@ PyMethodDef Reference_methods[] = { METHOD(Reference, rename, METH_O), METHOD(Reference, resolve, METH_NOARGS), METHOD(Reference, log, METH_NOARGS), + METHOD(Reference, get_object, METH_NOARGS), {NULL} }; diff --git a/test/test_refs.py b/test/test_refs.py index 3b0a660..11537c9 100644 --- a/test/test_refs.py +++ b/test/test_refs.py @@ -209,5 +209,11 @@ class ReferencesTest(utils.RepoTestCase): # self.repo.packall_references() + def test_get_object(self): + repo = self.repo + ref = repo.lookup_reference('refs/heads/master') + self.assertEqual(repo[ref.target].oid, ref.get_object().oid) + + if __name__ == '__main__': unittest.main()