Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions pygit2/index.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,11 @@ def __getitem__(self, key):
def __iter__(self):
return IndexIterator(self)

def __bool__(self):
return True

__nonzero__ = __bool__

def read(self, force=True):
"""Update the contents the Index

Expand Down
38 changes: 37 additions & 1 deletion src/object.c
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,12 @@ Object_peel(Object *self, PyObject *py_type)
return wrap_object(peeled, self->repo);
}

int
Object___nonzero__(PyObject *self)
{
return 1;
}

PyGetSetDef Object_getseters[] = {
GETTER(Object, oid),
GETTER(Object, id),
Expand All @@ -199,6 +205,36 @@ PyMethodDef Object_methods[] = {
{NULL}
};

#if PY_MAJOR_VERSION == 2 || defined(PYPY_VERSION)
static PyNumberMethods Object_as_number = {
0, /* nb_add */
0, /* nb_subtract */
0, /* nb_multiply */
0, /* nb_divide */
0, /* nb_remainder */
0, /* nb_divmod */
0, /* nb_power */
0, /* nb_negative */
0, /* nb_positive */
0, /* nb_absolute */
Object___nonzero__, /* nb_nonzero */
/* There are a lot more, we we don't need any of them */
};
#else
static PyNumberMethods Object_as_number = {
0, /* nb_add */
0, /* nb_subtract */
0, /* nb_divide */
0, /* nb_remainder */
0, /* nb_divmod */
0, /* nb_power */
0, /* nb_negative */
0, /* nb_positive */
0, /* nb_absolute */
Object___nonzero__, /* nb_nonzero */
/* There are a lot more, we we don't need any of them */
};
#endif

PyDoc_STRVAR(Object__doc__, "Base class for Git objects.");

Expand All @@ -213,7 +249,7 @@ PyTypeObject ObjectType = {
0, /* tp_setattr */
0, /* tp_compare */
0, /* tp_repr */
0, /* tp_as_number */
&Object_as_number, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_hash */
Expand Down
3 changes: 3 additions & 0 deletions test/test_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ class IndexTest(utils.RepoTestCase):
def test_index(self):
self.assertNotEqual(None, self.repo.index)

def test_nonzero(self):
self.assertTrue(Index())

def test_read(self):
index = self.repo.index
self.assertEqual(len(index), 2)
Expand Down
9 changes: 8 additions & 1 deletion test/test_object.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import unittest

import pygit2
from pygit2 import GIT_OBJ_TREE, GIT_OBJ_TAG, Tree, Tag
from pygit2 import GIT_OBJ_TREE, GIT_OBJ_TAG, GIT_OBJ_BLOB, Tree, Tag
from . import utils


Expand Down Expand Up @@ -78,5 +78,12 @@ def test_invalid_type(self):

self.assertRaises(ValueError, commit.peel, Tag)

def test_nonzero(self):
empty_tree_id = self.repo.TreeBuilder().write()
self.assertTrue(self.repo[empty_tree_id])

empty_blob_id = self.repo.write(GIT_OBJ_BLOB, '')
self.assertTrue(self.repo[empty_tree_id])

if __name__ == '__main__':
unittest.main()