Skip to content

Commit

Permalink
New GIT_DIFF_ and GIT_DELTA_ constants
Browse files Browse the repository at this point in the history
And improve the related docs a little bit, this fixes issue #738
  • Loading branch information
jdavid committed Dec 29, 2019
1 parent d01c889 commit d76de97
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 35 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
- New ``settings.disable_pack_keep_file_checks(...)``
`#908 <https://github.com/libgit2/pygit2/pull/908>`_

- New ``GIT_DIFF_`` and ``GIT_DELTA_`` constants
`#738 <https://github.com/libgit2/pygit2/issues/738>`_


1.0.1 (2019-12-21)
-------------------------
Expand Down
14 changes: 8 additions & 6 deletions pygit2/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -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::
Expand Down
18 changes: 15 additions & 3 deletions src/diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -946,18 +946,30 @@ 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)
{
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);
Expand Down
73 changes: 47 additions & 26 deletions src/pygit2.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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);
Expand Down

0 comments on commit d76de97

Please sign in to comment.