summaryrefslogtreecommitdiff
path: root/tests/diff/parse.c
Commit message (Collapse)AuthorAgeFilesLines
* patch_parse: handle absence of "index" header for new/deleted casesDenis Laxalde2020-08-291-0/+23
| | | | | | | | | | This follows up on 11de594f85479e4804b07dc4f7b33cfe9212bea0 which added support for parsing patches without extended headers (the "index <hash>..<hash> <mode>" line); issue #5267. We now allow transition from "file mode" state to "path" state directly if there is no "index", which will happen for patches adding or deleting files as demonstrated in added test case.
* Merge pull request #5541 from libgit2/ethomson/clar_tapEdward Thomson2020-06-051-7/+7
|\ | | | | clar: add tap output option
| * clar: include the function nameethomson/clar_tapEdward Thomson2020-06-051-7/+7
| |
* | diff::parse: don't include `diff.h`ethomson/diff_parseEdward Thomson2020-06-051-1/+0
|/ | | | | We don't call any internal functions in the test; we don't need to include `../src/diff.h`.
* patch_parse: handle patches without extended headersDenis Laxalde2019-10-161-0/+10
| | | | | | | | | Extended header lines (especially the "index <hash>..<hash> <mode>") are not required by "git apply" so it import patches. So we allow the from-file/to-file lines (--- a/file\n+++ b/file) to directly follow the git diff header. This fixes #5267.
* patch_parse: handle patches with new empty filesDenis Laxalde2019-09-281-0/+20
| | | | | | | Patches containing additions of empty files will not contain diff data but will end with the index header line followed by the terminating sequence "-- ". We follow the same logic as in cc4c44a and allow "-- " to immediately follow the index header.
* patch_parse.c: Handle CRLF in parse_header_startDrew DeVault2019-04-051-0/+19
|
* tests: diff: test parsing diffs with a new file with spaces in its pathErik Aigner2019-03-291-0/+18
| | | | | Add a test that verifies that we are able to parse patches which add a new file that has spaces in its path.
* patch_parse: populate line numbers while parsing diffsEtienne Samson2018-06-191-0/+71
|
* Convert usage of `git_buf_free` to new `git_buf_dispose`Patrick Steinhardt2018-06-101-6/+6
|
* patch_parse: fix parsing patches only containing exact renamesPatrick Steinhardt2017-09-011-0/+21
| | | | | | | | Patches which contain exact renames only will not contain an actual diff body, but only a list of files that were renamed. Thus, the patch header is immediately followed by the terminating sequence "-- ". We currently do not recognize this character sequence as a possible terminating sequence. Add it and create a test to catch the failure.
* diff_parse: correctly set options for parsed diffsPatrick Steinhardt2017-03-141-0/+21
| | | | | | | | | | | | The function `diff_parsed_alloc` allocates and initializes a `git_diff_parsed` structure. This structure also contains diff options. While we initialize its flags, we fail to do a real initialization of its values. This bites us when we want to actually use the generated diff as we do not se the option's version field, which is required to operate correctly. Fix the issue by executing `git_diff_init_options` on the embedded struct.
* patch_parse: fix parsing minimal trailing diff linePatrick Steinhardt2017-03-141-0/+21
| | | | | | | | | | | | | | | | | | | | In a diff, the shortest possible hunk with a modification (that is, no deletion) results from a file with only one line with a single character which is removed. Thus the following hunk @@ -1 +1 @@ -a + is the shortest valid hunk modifying a line. The function parsing the hunk body though assumes that there must always be at least 4 bytes present to make up a valid hunk, which is obviously wrong in this case. The absolute minimum number of bytes required for a modification is actually 2 bytes, that is the "+" and the following newline. Note: if there is no trailing newline, the assumption will not be offended as the diff will have a line "\ No trailing newline" at its end. This patch fixes the issue by lowering the amount of bytes required.
* patch_generate: fix `git_diff_foreach` only working with generated diffsPatrick Steinhardt2017-03-141-0/+29
| | | | | | | | | | | | | | | The current logic of `git_diff_foreach` makes the assumption that all diffs passed in are actually derived from generated diffs. With these assumptions we try to derive the actual diff by inspecting either the working directory files or blobs of a repository. This obviously cannot work for diffs parsed from a file, where we do not necessarily have a repository at hand. Since the introduced split of parsed and generated patches, there are multiple functions which help us to handle patches generically, being indifferent from where they stem from. Use these functions and remove the old logic specific to generated patches. This allows re-using the same code for invoking the callbacks on the deltas.
* Teach `git_patch_from_diff` about parsed diffsethomson/patch_from_diffEdward Thomson2016-08-241-0/+45
| | | | | Ensure that `git_patch_from_diff` can return the patch for parsed diffs, not just generate a patch for a generated diff.
* patch: show copy information for identical copiesEdward Thomson2016-06-251-0/+5
| | | | | | | When showing copy information because we are duplicating contents, for example, when performing a `diff --find-copies-harder -M100 -B100`, then show copy from/to lines in a patch, and do not show context. Ensure that we can also parse such patches.
* patch::parse: test diff with exact rename and copyEdward Thomson2016-06-251-0/+5
|
* patch::parse: test diff with simple renameEdward Thomson2016-06-251-12/+27
|
* diff::parse tests: test parsing a diffEdward Thomson2016-06-251-0/+68
| | | | | Test that we can create a diff file, then parse the results and that the two are identical in-memory.
* introduce `git_diff_from_buffer` to parse diffsEdward Thomson2016-05-261-0/+60
Parse diff files into a `git_diff` structure.