From d76de977cdc48af811b7afd61b6582d8319e5353 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=2E=20David=20Ib=C3=A1=C3=B1ez?= Date: Sun, 29 Dec 2019 11:29:50 +0100 Subject: [PATCH] New ``GIT_DIFF_`` and ``GIT_DELTA_`` constants And improve the related docs a little bit, this fixes issue #738 --- CHANGELOG.rst | 3 ++ pygit2/repository.py | 14 +++++---- src/diff.c | 18 +++++++++-- src/pygit2.c | 73 ++++++++++++++++++++++++++++---------------- 4 files changed, 73 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 99240c2f6..c7300aeb6 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -14,6 +14,9 @@ - New ``settings.disable_pack_keep_file_checks(...)`` `#908 `_ +- New ``GIT_DIFF_`` and ``GIT_DELTA_`` constants + `#738 `_ + 1.0.1 (2019-12-21) ------------------------- diff --git a/pygit2/repository.py b/pygit2/repository.py index f991abacf..f60cfdccf 100644 --- a/pygit2/repository.py +++ b/pygit2/repository.py @@ -422,19 +422,21 @@ def diff(self, a=None, b=None, cached=False, flags=GIT_DIFF_NORMAL, Otherwise the referred object is compared to 'a' cached - if 'b' is None, by default the working directory is compared to 'a'. + If 'b' is None, by default the working directory is compared to 'a'. If 'cached' is set to True, the index/staging area is used for comparing. flag - a GIT_DIFF_* constant + A combination of GIT_DIFF_* constants. For a list of the constants, + with a description, see git_diff_option_t in + https://github.com/libgit2/libgit2/blob/master/include/git2/diff.h context_lines - the number of unchanged lines that define the boundary - of a hunk (and to display before and after) + The number of unchanged lines that define the boundary of a hunk + (and to display before and after) interhunk_lines - the maximum number of unchanged lines between hunk - boundaries before the hunks will be merged into a one + The maximum number of unchanged lines between hunk boundaries + before the hunks will be merged into a one Examples:: diff --git a/src/diff.c b/src/diff.c index da9b0bda2..cdacc2a5d 100644 --- a/src/diff.c +++ b/src/diff.c @@ -946,7 +946,15 @@ Diff_merge(Diff *self, PyObject *args) PyDoc_STRVAR(Diff_find_similar__doc__, "find_similar([flags, rename_threshold, copy_threshold, rename_from_rewrite_threshold, break_rewrite_threshold, rename_limit])\n" "\n" - "Find renamed files in diff and updates them in-place in the diff itself."); + "Transform a diff marking file renames, copies, etc.\n" + "\n" + "This modifies a diff in place, replacing old entries that look like\n" + "renames or copies with new entries reflecting those changes. This also " + "will, if requested, break modified files into add/remove pairs if the " + "amount of change is above a threshold.\n" + "\n" + "flags - Combination of GIT_DIFF_FIND_* and GIT_DIFF_BREAK_* constants." + ); PyObject * Diff_find_similar(Diff *self, PyObject *args, PyObject *kwds) @@ -954,10 +962,14 @@ Diff_find_similar(Diff *self, PyObject *args, PyObject *kwds) int err; git_diff_find_options opts = GIT_DIFF_FIND_OPTIONS_INIT; - char *keywords[] = {"flags", "rename_threshold", "copy_threshold", "rename_from_rewrite_threshold", "break_rewrite_threshold", "rename_limit", NULL}; + char *keywords[] = {"flags", "rename_threshold", "copy_threshold", + "rename_from_rewrite_threshold", + "break_rewrite_threshold", "rename_limit", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwds, "|iHHHHI", keywords, - &opts.flags, &opts.rename_threshold, &opts.copy_threshold, &opts.rename_from_rewrite_threshold, &opts.break_rewrite_threshold, &opts.rename_limit)) + &opts.flags, &opts.rename_threshold, &opts.copy_threshold, + &opts.rename_from_rewrite_threshold, &opts.break_rewrite_threshold, + &opts.rename_limit)) return NULL; err = git_diff_find_similar(self->diff, &opts); diff --git a/src/pygit2.c b/src/pygit2.c index dafa7125a..316d88254 100644 --- a/src/pygit2.c +++ b/src/pygit2.c @@ -456,51 +456,71 @@ moduleinit(PyObject* m) ADD_TYPE(m, DiffLine) ADD_TYPE(m, DiffStats) ADD_TYPE(m, Patch) + + /* (git_diff_options in libgit2) */ ADD_CONSTANT_INT(m, GIT_DIFF_NORMAL) ADD_CONSTANT_INT(m, GIT_DIFF_REVERSE) + ADD_CONSTANT_INT(m, GIT_DIFF_INCLUDE_IGNORED) + ADD_CONSTANT_INT(m, GIT_DIFF_RECURSE_IGNORED_DIRS) + ADD_CONSTANT_INT(m, GIT_DIFF_INCLUDE_UNTRACKED) + ADD_CONSTANT_INT(m, GIT_DIFF_RECURSE_UNTRACKED_DIRS) + ADD_CONSTANT_INT(m, GIT_DIFF_INCLUDE_UNMODIFIED) + ADD_CONSTANT_INT(m, GIT_DIFF_INCLUDE_TYPECHANGE) + ADD_CONSTANT_INT(m, GIT_DIFF_INCLUDE_TYPECHANGE_TREES) + ADD_CONSTANT_INT(m, GIT_DIFF_IGNORE_FILEMODE) + ADD_CONSTANT_INT(m, GIT_DIFF_IGNORE_SUBMODULES) + ADD_CONSTANT_INT(m, GIT_DIFF_IGNORE_CASE) + ADD_CONSTANT_INT(m, GIT_DIFF_INCLUDE_CASECHANGE) + ADD_CONSTANT_INT(m, GIT_DIFF_DISABLE_PATHSPEC_MATCH) + ADD_CONSTANT_INT(m, GIT_DIFF_SKIP_BINARY_CHECK) + ADD_CONSTANT_INT(m, GIT_DIFF_ENABLE_FAST_UNTRACKED_DIRS) + ADD_CONSTANT_INT(m, GIT_DIFF_UPDATE_INDEX) + ADD_CONSTANT_INT(m, GIT_DIFF_INCLUDE_UNREADABLE) + ADD_CONSTANT_INT(m, GIT_DIFF_INCLUDE_UNREADABLE_AS_UNTRACKED) + ADD_CONSTANT_INT(m, GIT_DIFF_INDENT_HEURISTIC) ADD_CONSTANT_INT(m, GIT_DIFF_FORCE_TEXT) + ADD_CONSTANT_INT(m, GIT_DIFF_FORCE_BINARY) ADD_CONSTANT_INT(m, GIT_DIFF_IGNORE_WHITESPACE) ADD_CONSTANT_INT(m, GIT_DIFF_IGNORE_WHITESPACE_CHANGE) ADD_CONSTANT_INT(m, GIT_DIFF_IGNORE_WHITESPACE_EOL) - ADD_CONSTANT_INT(m, GIT_DIFF_IGNORE_SUBMODULES) + ADD_CONSTANT_INT(m, GIT_DIFF_SHOW_UNTRACKED_CONTENT) + ADD_CONSTANT_INT(m, GIT_DIFF_SHOW_UNMODIFIED) ADD_CONSTANT_INT(m, GIT_DIFF_PATIENCE) ADD_CONSTANT_INT(m, GIT_DIFF_MINIMAL) - ADD_CONSTANT_INT(m, GIT_DIFF_INCLUDE_IGNORED) - ADD_CONSTANT_INT(m, GIT_DIFF_INCLUDE_UNTRACKED) - ADD_CONSTANT_INT(m, GIT_DIFF_INCLUDE_UNMODIFIED) - ADD_CONSTANT_INT(m, GIT_DIFF_RECURSE_UNTRACKED_DIRS) - ADD_CONSTANT_INT(m, GIT_DIFF_RECURSE_UNTRACKED_DIRS) - ADD_CONSTANT_INT(m, GIT_DIFF_DISABLE_PATHSPEC_MATCH) - ADD_CONSTANT_INT(m, GIT_DIFF_IGNORE_CASE) - ADD_CONSTANT_INT(m, GIT_DIFF_SHOW_UNTRACKED_CONTENT) - ADD_CONSTANT_INT(m, GIT_DIFF_SKIP_BINARY_CHECK) ADD_CONSTANT_INT(m, GIT_DIFF_SHOW_BINARY) - ADD_CONSTANT_INT(m, GIT_DIFF_INCLUDE_TYPECHANGE) - ADD_CONSTANT_INT(m, GIT_DIFF_INCLUDE_TYPECHANGE_TREES) - ADD_CONSTANT_INT(m, GIT_DIFF_RECURSE_IGNORED_DIRS) + + /* Formatting options for diff stats (git_diff_stats_format_t in libgit2) */ ADD_CONSTANT_INT(m, GIT_DIFF_STATS_NONE) ADD_CONSTANT_INT(m, GIT_DIFF_STATS_FULL) ADD_CONSTANT_INT(m, GIT_DIFF_STATS_SHORT) ADD_CONSTANT_INT(m, GIT_DIFF_STATS_NUMBER) ADD_CONSTANT_INT(m, GIT_DIFF_STATS_INCLUDE_SUMMARY) - /* Flags for diff find similar */ - /* --find-renames */ - ADD_CONSTANT_INT(m, GIT_DIFF_FIND_RENAMES) - /* --break-rewrites=N */ - ADD_CONSTANT_INT(m, GIT_DIFF_FIND_RENAMES_FROM_REWRITES) - /* --find-copies */ - ADD_CONSTANT_INT(m, GIT_DIFF_FIND_COPIES) - /* --find-copies-harder */ - ADD_CONSTANT_INT(m, GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED) - /* --break-rewrites=/M */ - ADD_CONSTANT_INT(m, GIT_DIFF_FIND_AND_BREAK_REWRITES) - /* DiffDelta and DiffFile flags */ + /* Flags for Diff.find_similar (git_diff_find_t in libgit2) */ + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_BY_CONFIG) /** Obey diff.renames */ + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_RENAMES) /* --find-renames */ + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_RENAMES_FROM_REWRITES) /* --break-rewrites=N */ + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_COPIES) /* --find-copies */ + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED) /* --find-copies-harder */ + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_REWRITES) /* --break-rewrites=/M */ + ADD_CONSTANT_INT(m, GIT_DIFF_BREAK_REWRITES) + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_AND_BREAK_REWRITES) + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_FOR_UNTRACKED) + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_ALL) /* Turn on all finding features. */ + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE) + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_IGNORE_WHITESPACE) + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_DONT_IGNORE_WHITESPACE) + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_EXACT_MATCH_ONLY) + ADD_CONSTANT_INT(m, GIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY) + ADD_CONSTANT_INT(m, GIT_DIFF_FIND_REMOVE_UNMODIFIED) + + /* DiffDelta and DiffFile flags (git_diff_flag_t in libgit2) */ 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) + ADD_CONSTANT_INT(m, GIT_DIFF_FLAG_EXISTS) - /* DiffDelta.status */ + /* DiffDelta.status (git_delta_t in libgit2) */ ADD_CONSTANT_INT(m, GIT_DELTA_UNMODIFIED) ADD_CONSTANT_INT(m, GIT_DELTA_ADDED) ADD_CONSTANT_INT(m, GIT_DELTA_DELETED) @@ -511,6 +531,7 @@ moduleinit(PyObject* m) ADD_CONSTANT_INT(m, GIT_DELTA_UNTRACKED) ADD_CONSTANT_INT(m, GIT_DELTA_TYPECHANGE) ADD_CONSTANT_INT(m, GIT_DELTA_UNREADABLE) + ADD_CONSTANT_INT(m, GIT_DELTA_CONFLICTED) /* Config */ ADD_CONSTANT_INT(m, GIT_CONFIG_LEVEL_LOCAL);