| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| | |
| | |
| | |
| | | |
Specifically "string_escape" does not exist as an encoding anymore.
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This specifically covers the cases where unsafe chars occur in path
names, and git-diff -p will escape those.
From the git-diff-tree manpage:
> 3. TAB, LF, double quote and backslash characters in pathnames are
> represented as \t, \n, \" and \\, respectively. If there is need
> for such substitution then the whole pathname is put in double
> quotes.
This patch checks whether or not this has happened and will unescape
those paths accordingly.
One thing to note here is that, depending on the position in the patch
format, those paths may be prefixed with an a/ or b/. I've specifically
made sure to never interpret a path that actually starts with a/ or b/
incorrectly.
Example of that subtlety below. Here, the actual file path is
"b/normal". On the diff file that gets encoded as "b/b/normal".
diff --git a/b/normal b/b/normal
new file mode 100644
index 0000000000000000000000000000000000000000..eaf5f7510320b6a327fb308379de2f94d8859a54
--- /dev/null
+++ b/b/normal
@@ -0,0 +1 @@
+dummy content
Here, we prefer the "---" and "+++" lines' values. Note that these
paths start with a/ or b/. The only exception is the value "/dev/null",
which is handled as a special case.
Suppose now the file gets moved "b/moved", the output of that diff would
then be this:
diff --git a/b/normal b/b/moved
similarity index 100%
rename from b/normal
rename to b/moved
We prefer the "rename" lines' values in this case (the "diff" line is
always a last resort). Take note that those lines are not prefixed with
a/ or b/, but the ones in the "diff" line are (just like the ones in
"---" or "+++" lines).
|
|/ |
|
|\
| |
| | |
Support repeated kwargs
|
|/
|
|
|
|
|
|
|
|
|
|
|
| |
Some Git command line options are allowed to be repeated multiple times.
Examples of this are the -C flag which may occur more than once to
"strengthen" its effect, or the -L flag on Git blames, to select
multiple blocks of lines to blame.
$ git diff -C -C HEAD~1 HEAD
$ git blame -L 1-3 -L 12-18 HEAD -- somefile.py
This patch supports passing a list/tuple as the value part for kwargs,
so that the generated Git command contain the repeated options.
|
|\
| |
| | |
Fix diff patch parsing
|
| |
| |
| |
| |
| | |
When both old/new mode and rename from/to lines are found, they will
appear in different order.
|
| | |
|
| |
| |
| |
| |
| |
| | |
This makes sure we're not matching a \n here by accident. It's now
almost the same as the original that used \S+, except that spaces are
not eaten at the end of the string (for files that end in a space).
|
| | |
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The a_path and b_path cannot reliably be read from the first diff line
as it's ambiguous. From the git-diff manpage:
> The a/ and b/ filenames are the same unless rename/copy is involved.
> Especially, **even for a creation or a deletion**, /dev/null is not
> used in place of the a/ or b/ filenames.
This patch changes the a_path and b_path detection to read it from the
more reliable locations further down the diff headers. Two use cases
are fixed by this:
- As the man page snippet above states, for new/deleted files the a
or b path will now be properly None.
- File names with spaces in it are now properly parsed.
Working on this patch, I realized the --- and +++ lines really belong to
the diff header, not the diff contents. This means that when parsing
the patch format, the --- and +++ will now be swallowed, and not end up
anymore as part of the diff contents. The diff contents now always
start with an @@ line.
This may be a breaking change for some users that rely on this
behaviour. However, those users could now access that information more
reliably via the normal Diff properties a_path and b_path now.
|
|\
| |
| | |
Enrich incremental blame output
|
| |\
| |/
|/|
| | |
enrich-incremental-blame-output
|
|\ \
| | |
| | | |
Add support for diffing against root commit
|
| |\ \
| |/ /
|/| | |
|
| | |
| | |
| | |
| | |
| | | |
In response to
https://github.com/gitpython-developers/GitPython/pull/408/files/5de21c7fa2bdd5cd50c4f62ba848af54589167d0..aae2a7328a4d28077a4b4182b4f36f19c953765b#r59722704
|
| | |
| | |
| | |
| | | |
Since support was dropped.
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | |
| | | |
This alternative API does not prevent users from using the valid treeish
"root".
|
| | | |
|
| | |
| | |
| | |
| | | |
This enabled getting diff patches for root commits.
|
| | | |
|
|/ / |
|
| |
| |
| |
| |
| | |
Returning this now to avoid having to change the function's return value
structure later on if we want to emit more information.
|
|/ |
|
|\
| |
| |
| |
| | |
Remove assertion over fetch refspec when explicitly specified
Fixes #396
|
| | |
|
|\ \
| | |
| | | |
Add incremental blame support
|
| | |
| | |
| | |
| | | |
This can be used to pass options like -C or -M.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This adds a sibling method to Repo's blame method:
Repo.blame_incremental(rev, path, **kwargs)
This can alternatively be called using:
Repo.blame(rev, path, incremental=True)
The main difference is that blame incremental is a bit more efficient
and does not return the full file's contents, just the commits and the
line number ranges. The parser is a bit more straight-forward and
faster since the incremental output format is defined a little stricter.
|
|\ \ \
| |/ /
|/| | |
fix(index): avoid recursing endlessly in add()
|
| | | |
|
|/ /
| |
| |
| | |
Issue #407
|
|\ \
| | |
| | | |
Make sure .read() and friends always return bytes
|
| | | |
|
|/ / |
|
|\ \
| |/
|/| |
Support universal wheels
|
|/ |
|
|
|
|
| |
Related to #396
|
|
|
|
| |
Fixes #394
|
|\
| |
| | |
Split diff line by '\t' for metadata and path
|
| |
| |
| |
| |
| |
| | |
This tests the edge case of doing a diff against a single whitespace
filename and returns the proper change type. All other normal usage of
this diff classmethod should remain unchanged.
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This protects against `.split(None)` which uses consecutive whitespace
as a separator to overlook paths where a single space is the filename.
For example, in this diff line:
line = ':100644 000000 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
0000000000000000000000000000000000000000 D '
The deleted file is a file named ' ' (just one space). It's entirely
possible to commit this, remove, and to produce the following output
from `git diff`:
git diff --name-status <SHA1> <SHA2>
D
M path/to/another/file.py
...
This would cause the initial `.split(None, 5)` to fail as it will count
all consecutive whitespace as a separator, disregarding the ' ' (single
space) filename.
|
|\
| |
| | |
Fix it's vs its in tutorial.rst
|
|/ |
|
|\
| |
| | |
config parsers as context mangers can now be reentered for locks
|