New DiffDelta.status_char()

This commit is contained in:
J. David Ibáñez
2015-03-16 19:12:20 +01:00
parent b2ffc8a8d5
commit 8b05b296c2
3 changed files with 45 additions and 6 deletions

View File

@@ -91,7 +91,7 @@ wrap_diff_delta(const git_diff_delta *delta)
py_delta = PyObject_New(DiffDelta, &DiffDeltaType);
if (py_delta) {
py_delta->status = git_diff_status_char(delta->status);
py_delta->status = delta->status;
py_delta->flags = delta->flags;
py_delta->similarity = delta->similarity;
py_delta->nfiles = delta->nfiles;
@@ -222,6 +222,25 @@ PyTypeObject DiffFileType = {
0, /* tp_new */
};
PyDoc_STRVAR(DiffDelta_status_char__doc__,
"status_char()\n"
"\n"
"Return the single character abbreviation for a delta status code."
);
PyObject *
DiffDelta_status_char(DiffDelta *self)
{
char status = git_diff_status_char(self->status);
#if PY_MAJOR_VERSION == 2
return Py_BuildValue("c", status);
#else
return Py_BuildValue("C", status);
#endif
}
PyDoc_STRVAR(DiffDelta_is_binary__doc__, "True if binary data, False if not.");
PyObject *
@@ -241,8 +260,13 @@ DiffDelta_dealloc(DiffDelta *self)
PyObject_Del(self);
}
static PyMethodDef DiffDelta_methods[] = {
METHOD(DiffDelta, status_char, METH_NOARGS),
{NULL}
};
PyMemberDef DiffDelta_members[] = {
MEMBER(DiffDelta, status, T_CHAR, "A GIT_DELTA_* constant."),
MEMBER(DiffDelta, status, T_UINT, "A GIT_DELTA_* constant."),
MEMBER(DiffDelta, flags, T_UINT, "Combination of GIT_DIFF_FLAG_* flags."),
MEMBER(DiffDelta, similarity, T_USHORT, "For renamed and copied."),
MEMBER(DiffDelta, nfiles, T_USHORT, "Number of files in the delta."),
@@ -286,7 +310,7 @@ PyTypeObject DiffDeltaType = {
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
0, /* tp_methods */
DiffDelta_methods, /* tp_methods */
DiffDelta_members, /* tp_members */
DiffDelta_getseters, /* tp_getset */
0, /* tp_base */

View File

@@ -341,11 +341,23 @@ moduleinit(PyObject* m)
/* --break-rewrites=/M */
ADD_CONSTANT_INT(m, GIT_DIFF_FIND_AND_BREAK_REWRITES)
/* DiffFile.flags */
/* DiffDelta and DiffFile flags */
ADD_CONSTANT_INT(m, GIT_DIFF_FLAG_BINARY)
ADD_CONSTANT_INT(m, GIT_DIFF_FLAG_NOT_BINARY)
ADD_CONSTANT_INT(m, GIT_DIFF_FLAG_VALID_ID)
/* DiffDelta.status */
ADD_CONSTANT_INT(m, GIT_DELTA_UNMODIFIED)
ADD_CONSTANT_INT(m, GIT_DELTA_ADDED)
ADD_CONSTANT_INT(m, GIT_DELTA_DELETED)
ADD_CONSTANT_INT(m, GIT_DELTA_MODIFIED)
ADD_CONSTANT_INT(m, GIT_DELTA_RENAMED)
ADD_CONSTANT_INT(m, GIT_DELTA_COPIED)
ADD_CONSTANT_INT(m, GIT_DELTA_IGNORED)
ADD_CONSTANT_INT(m, GIT_DELTA_UNTRACKED)
ADD_CONSTANT_INT(m, GIT_DELTA_TYPECHANGE)
ADD_CONSTANT_INT(m, GIT_DELTA_UNREADABLE)
/* Config */
ADD_CONSTANT_INT(m, GIT_CONFIG_LEVEL_LOCAL);
ADD_CONSTANT_INT(m, GIT_CONFIG_LEVEL_GLOBAL);

View File

@@ -33,6 +33,7 @@ import unittest
import pygit2
from pygit2 import GIT_DIFF_INCLUDE_UNMODIFIED
from pygit2 import GIT_DIFF_IGNORE_WHITESPACE, GIT_DIFF_IGNORE_WHITESPACE_EOL
from pygit2 import GIT_DELTA_RENAMED
from . import utils
from itertools import chain
@@ -282,9 +283,11 @@ class DiffTest(utils.BareRepoTestCase):
#~ --find-copies-harder during rename transformion...
diff = commit_a.tree.diff_to_tree(commit_b.tree,
GIT_DIFF_INCLUDE_UNMODIFIED)
self.assertAll(lambda x: x.delta.status != 'R', diff)
self.assertAll(lambda x: x.delta.status != GIT_DELTA_RENAMED, diff)
self.assertAll(lambda x: x.delta.status_char() != 'R', diff)
diff.find_similar()
self.assertAny(lambda x: x.delta.status == 'R', diff)
self.assertAny(lambda x: x.delta.status == GIT_DELTA_RENAMED, diff)
self.assertAny(lambda x: x.delta.status_char() == 'R', diff)
if __name__ == '__main__':
unittest.main()