aboutsummaryrefslogtreecommitdiff
path: root/git
AgeCommit message (Collapse)Author
2016-04-20Merge pull request #414 from nvie/support-full-datetimes-on-commitsSebastian Thiel
Add support for getting "aware" datetime info
2016-04-20Merge pull request #415 from nvie/fix-for-unicode-pathsSebastian Thiel
Fix diff patch parser for paths with unsafe chars
2016-04-20Allow "$" sign in fetch output linesVincent Driessen
2016-04-20Python 3 compat fixesVincent Driessen
Specifically "string_escape" does not exist as an encoding anymore.
2016-04-19Fix diff patch parser for paths with unsafe charsVincent Driessen
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).
2016-04-19Fix accidentally added importVincent Driessen
2016-04-19Add support for getting "aware" datetime infoVincent Driessen
This adds 2 properties to commits. Their values are derived from the existing data stored on them, but this makes them more conveniently queryable: - authored_datetime - committed_datetime These return "aware" datetimes, so they are effectively companions to their raw timestamp equivalents, respectively `authored_date` and `committed_date`. These datetime instances are convenient structures since they show the author-local commit date and their UTC offset.
2016-04-19Support repeated kwargsVincent Driessen
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.
2016-04-19Fix order of regex partsVincent Driessen
When both old/new mode and rename from/to lines are found, they will appear in different order.
2016-04-19Make test stricterVincent Driessen
2016-04-19Fix regexVincent Driessen
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).
2016-04-19Make diff patch parsing more reliableVincent Driessen
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.
2016-04-19Merge remote-tracking branch 'upstream/master' into ↵Vincent Driessen
enrich-incremental-blame-output
2016-04-19Remove Python 2.6 hackVincent Driessen
Since support was dropped.
2016-04-14Perform diff-tree recursively to have the same output as diffVincent Driessen
2016-04-14Return all available data from git-blameVincent Driessen
Returning this now to avoid having to change the function's return value structure later on if we want to emit more information.
2016-04-14Drop dependency on sixVincent Driessen
2016-04-14Drop dependency on sixVincent Driessen
2016-04-14Fix test casesVincent Driessen
2016-04-14Export NULL_TREEVincent Driessen
2016-04-14Use a special object rather than a stringVincent Driessen
This alternative API does not prevent users from using the valid treeish "root".
2016-04-14Fix commentVincent Driessen
2016-04-14Support "root" as a special value in .diff() callsVincent Driessen
This enabled getting diff patches for root commits.
2016-04-14Merge pull request #402 from rrei/masterSebastian Thiel
Remove assertion over fetch refspec when explicitly specified Fixes #396
2016-04-14Merge pull request #409 from nvie/add-incremental-blame-supportSebastian Thiel
Add incremental blame support
2016-04-13fixed unittest of issue #407 for Python3Piotr Pietraszkiewicz
2016-04-13fix(index): avoid recursing endlessly in add()Piotr Pietraszkiewicz
Issue #407
2016-04-13Allow passing args to git-blameVincent Driessen
This can be used to pass options like -C or -M.
2016-04-13Add incremental blame supportVincent Driessen
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.
2016-04-07Fix testsVincent Driessen
2016-04-06Make sure .read() and friends always return bytesVincent Driessen
2016-03-29Remove assertion over fetch refspec when explicitly specifiedrrei
2016-03-28fix(remote): asssertion message formattingSebastian Thiel
Related to #396
2016-03-28fix(refs): don't raise StopIterationSebastian Thiel
Fixes #394
2016-03-16Add test and fixture for diff index from raw formatJonathan Chu
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.
2016-03-15Split diff line by '\t' for metadata and pathJonathan Chu
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.
2016-03-06config parsers as context mangers can now be reentered for locksRaphael Boidol
2016-02-25Merge pull request #389 from csnover/csnover-buffer-readsSebastian Thiel
fix(cmd): Use buffered reads
2016-02-25Merge pull request #385 from yarikoptic/skip-testSebastian Thiel
ENH: skip test_is_ancestor on git versions < 1.8.0 not supporting git merge-base --is-ancestor
2016-02-24fix(cmd): Use buffered readsColin Snover
Popen defaults to using unbuffered reads, which are extremely slow.
2016-02-20enable config parsers to be used as context managersRaphael Boidol
if used as context managers, the parsers will automatically release their file locks.
2016-02-14ENH: skip test_is_ancestor on git versions < 1.8.0 not supporting git ↵Yaroslav Halchenko
merge-base --is-ancestor
2016-02-14fix(cmd): allow improved errors during clone operationSebastian Thiel
Related to #383
2016-02-13fix(cmd): focus !Sebastian Thiel
Thanks travis, once again !
2016-02-13fix(cmd): safely read from stderrSebastian Thiel
Fixes #383
2016-02-11fix(refs): set fixture different versionSebastian Thiel
2016-02-11chore(version): set to next patch releaseSebastian Thiel
2016-02-07fix(cmd): prevent deadlock on clone/fetch/pullSebastian Thiel
We keep stdout closed, which seems to have the side-effect of stdout being connected to your TTY, in case you run a terminal. However, this shold also prevent deadlocks, as only stderr is used. The alternative would have been to try to fetch lines concurrently, and we have been there. For clone(), `communicate()` is used, and with some luck this will just do the right thing. Even though last time I checked, it didn't ... ? Lets see. Stab at #72
2016-02-07chore(flake8): unnused importSebastian Thiel
2016-02-07fix(clone): call communicate if there is no progress handlerSebastian Thiel
Previously, it could have happened that pipes ran full, deadlocking the operation Related to #72