diff --git a/src/pygit2/repository.c b/src/pygit2/repository.c index bd346ce..6182897 100644 --- a/src/pygit2/repository.c +++ b/src/pygit2/repository.c @@ -186,13 +186,13 @@ Repository_head(Repository *self) PyDoc_STRVAR( - Repository_is_detached_doc, + Repository_head_is_detached_doc, "A repository's HEAD is detached when it points directly to a commit\n" "instead of a branch.\n" ); PyObject * -Repository_is_detached(Repository *self) +Repository_head_is_detached(Repository *self) { if(git_repository_head_detached(self->repo) > 0) return Py_True; @@ -201,6 +201,52 @@ Repository_is_detached(Repository *self) } +PyDoc_STRVAR( + Repository_head_is_orphaned_doc, + "An orphan branch is one named from HEAD but which doesn't exist in\n" + "the refs namespace, because it doesn't have any commit to point to.\n" +); + +PyObject * +Repository_head_is_orphaned(Repository *self) +{ + if(git_repository_head_orphan(self->repo) > 0) + return Py_True; + + return Py_False; +} + + +PyDoc_STRVAR( + Repository_is_empty_doc, + "Check if a repository is empty\n" +); + +PyObject * +Repository_is_empty(Repository *self) +{ + if(git_repository_is_empty(self->repo) > 0) + return Py_True; + + return Py_False; +} + + +PyDoc_STRVAR( + Repository_is_bare_doc, + "Check if a repository is a bare repository.\n" +); + +PyObject * +Repository_is_bare(Repository *self) +{ + if(git_repository_is_bare(self->repo) > 0) + return Py_True; + + return Py_False; +} + + PyObject * Repository_getitem(Repository *self, PyObject *value) { @@ -868,8 +914,14 @@ PyGetSetDef Repository_getseters[] = { "The normalized path to the git repository.", NULL}, {"head", (getter)Repository_head, NULL, "Current head reference of the repository.", NULL}, - {"is_detached", (getter)Repository_is_detached, NULL, - Repository_is_detached_doc}, + {"head_is_detached", (getter)Repository_head_is_detached, NULL, + Repository_head_is_detached_doc}, + {"head_is_orphaned", (getter)Repository_head_is_orphaned, NULL, + Repository_head_is_orphaned_doc}, + {"is_empty", (getter)Repository_is_empty, NULL, + Repository_is_empty_doc}, + {"is_bare", (getter)Repository_is_bare, NULL, + Repository_is_bare_doc}, {"config", (getter)Repository_get_config, NULL, "Get the configuration file for this repository.\n\n" "If a configuration file has not been set, the default " diff --git a/test/test_repository.py b/test/test_repository.py index fa3a932..b3b71b6 100644 --- a/test/test_repository.py +++ b/test/test_repository.py @@ -47,10 +47,18 @@ A_BIN_SHA = binascii.unhexlify(A_HEX_SHA.encode('ascii')) class RepositoryTest(utils.BareRepoTestCase): + def test_is_empty(self): + self.assertFalse(self.repo.is_empty) + + def test_is_bare(self): + self.assertTrue(self.repo.is_bare) + def test_head(self): head = self.repo.head self.assertEqual(HEAD_SHA, head.hex) self.assertEqual(type(head), Commit) + self.assertFalse(self.repo.head_is_orphaned) + self.assertFalse(self.repo.head_is_detached) def test_read(self): self.assertRaises(TypeError, self.repo.read, 123) @@ -135,6 +143,12 @@ class RepositoryTest(utils.BareRepoTestCase): class RepositoryTest_II(utils.RepoTestCase): + def test_is_empty(self): + self.assertFalse(self.repo.is_empty) + + def test_is_bare(self): + self.assertFalse(self.repo.is_bare) + def test_get_path(self): directory = realpath(self.repo.path) expected = realpath(join(self._temp_dir, 'testrepo', '.git')) @@ -163,5 +177,18 @@ class DiscoverRepositoryTest(utils.NoRepoTestCase): os.makedirs(subdir) self.assertEqual(repo.path, discover_repository(subdir)) +class EmptyRepositoryTest(utils.EmptyRepoTestCase): + + def test_is_empty(self): + self.assertTrue(self.repo.is_empty) + + def test_is_base(self): + self.assertFalse(self.repo.is_bare) + + def test_head(self): + self.assertTrue(self.repo.head_is_orphaned) + self.assertFalse(self.repo.head_is_detached) + + if __name__ == '__main__': unittest.main()