-
-
Notifications
You must be signed in to change notification settings - Fork 403
Closed
Description
The libgit2 api allows you to set, among others, the rename_threshold when calling git_diff_find_similar but this doesn't seem to be supported in pygit2.
Would be great if this could be implemented!
I tried to change it myself but I can't seem to do this without getting a "ValueError: Invalid version 0 on git_diff_find_options" error when trying to call it... Probably just my lack of C++ skills. Diff of my changes is below.
diff --git a/src/diff.c b/src/diff.c
index 83fcb51..886f169 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -438,19 +438,27 @@ Diff_merge(Diff *self, PyObject *args)
PyDoc_STRVAR(Diff_find_similar__doc__,
- "find_similar([flags])\n"
+ "find_similar([flags, rename_threshold, copy_threshold, rename_from_rewrite_threshold, break_rewrite_threshold])\n"
"\n"
"Find renamed files in diff and updates them in-place in the diff itself.");
PyObject *
-Diff_find_similar(Diff *self, PyObject *args)
+Diff_find_similar(Diff *self, PyObject *args, PyObject *kwds)
{
int err;
git_diff_find_options opts = GIT_DIFF_FIND_OPTIONS_INIT;
- if (!PyArg_ParseTuple(args, "|i", &opts.flags))
+ uint16_t rename_threshold, copy_threshold, rename_from_rewrite_threshold, break_rewrite_threshold;
+ char *keywords[] = {"flags", "rename_threshold", "copy_threshold", "rename_from_rewrite_threshold", "break_rewrite_threshold", NULL};
+
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "|iIIII", keywords, &opts.flags, &rename_threshold, ©_threshold, &rename_from_rewrite_threshold, &break_rewrite_threshold))
return NULL;
+ opts.rename_threshold = rename_threshold;
+ opts.copy_threshold = copy_threshold;
+ opts.rename_from_rewrite_threshold = rename_from_rewrite_threshold;
+ opts.break_rewrite_threshold = break_rewrite_threshold;
+
err = git_diff_find_similar(self->list, &opts);
if (err < 0)
return Error_set(err);
@@ -508,7 +516,7 @@ PyMappingMethods Diff_as_mapping = {
static PyMethodDef Diff_methods[] = {
METHOD(Diff, merge, METH_VARARGS),
- METHOD(Diff, find_similar, METH_VARARGS),
+ METHOD(Diff, find_similar, METH_VARARGS | METH_KEYWORDS),
METHOD(Diff, from_c, METH_STATIC | METH_VARARGS),
{NULL}
};
Metadata
Metadata
Assignees
Labels
No labels