diff --git a/pygit2.c b/pygit2.c index 760d8a4..ff68f86 100644 --- a/pygit2.c +++ b/pygit2.c @@ -737,6 +737,24 @@ Commit_set_author(Commit *commit, PyObject *value) { return 0; } +static PyObject * +Commit_get_tree(Commit *commit) { + const git_tree *tree; + Tree *py_tree; + + tree = git_commit_tree(commit->commit); + if (tree == NULL) + Py_RETURN_NONE; + + py_tree = PyObject_New(Tree, &TreeType); + Py_INCREF(commit->repo); + py_tree->repo = commit->repo; + py_tree->own_obj = 0; + py_tree->tree = (git_tree*)tree; + + return (PyObject*)py_tree; +} + static PyGetSetDef Commit_getseters[] = { {"message_short", (getter)Commit_get_message_short, NULL, "short message", NULL}, @@ -748,6 +766,7 @@ static PyGetSetDef Commit_getseters[] = { (setter)Commit_set_committer, "committer", NULL}, {"author", (getter)Commit_get_author, (setter)Commit_set_author, "author", NULL}, + {"tree", (getter)Commit_get_tree, NULL, "tree object"}, {NULL} }; diff --git a/test/test_commit.py b/test/test_commit.py index 245490e..640a3fd 100644 --- a/test/test_commit.py +++ b/test/test_commit.py @@ -47,10 +47,13 @@ class CommitTest(utils.BareRepoTestCase): commit.message) commit_time = 1288481576 self.assertEqual(commit_time, commit.commit_time) - self.assertEqual(('Dave Borowitz', 'dborowitz@google.com', commit_time), - commit.committer) + self.assertEqual( + ('Dave Borowitz', 'dborowitz@google.com', commit_time), + commit.committer) self.assertEqual(('Dave Borowitz', 'dborowitz@google.com', 1288477363), commit.author) + self.assertEqual( + '967fce8df97cc71722d3c2a5930ef3e6f1d27b12', commit.tree.sha) def test_new_commit(self): message = 'New commit.\n\nMessage.\n' @@ -71,6 +74,7 @@ class CommitTest(utils.BareRepoTestCase): #self.assertEqual(12346, commit.commit_time) self.assertEqual(committer, commit.committer) self.assertEqual(author, commit.author) + self.assertEqual(None, commit.tree) def test_modify_commit(self): message = 'New commit.\n\nMessage.\n'