summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
...
* | | blame: do not decrement commit refcount in make_originPatrick Steinhardt2016-06-291-8/+18
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we create a blame origin, we try to look up the blob that is to be blamed at a certain revision. When this lookup fails, e.g. because the file did not exist at that certain revision, we fail to create the blame origin and return `NULL`. The blame origin that we have just allocated is thereby free'd with `origin_decref`. The `origin_decref` function does not only decrement reference counts for the blame origin, though, but also for its commit and blob. When this is done in the error case, we will cause an uneven reference count for these objects. This may result in hard-to-debug failures at seemingly unrelated code paths, where we try to access these objects when they in fact have already been free'd. Fix the issue by refactoring `make_origin` such that we only allocate the object after the only function that may fail so that we do not have to call `origin_decref` at all. Also fix the `pass_blame` function, which indirectly calls `make_origin`, to free the commit when `make_origin` failed.
* | Merge pull request #3223 from ethomson/applyEdward Thomson2016-06-2546-2667/+5009
|\ \ | |/ |/| Reading patch files
| * patch: show copy information for identical copiesEdward Thomson2016-06-252-11/+49
| | | | | | | | | | | | | | 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: handle patches with no hunksEdward Thomson2016-06-251-1/+3
| | | | | | | | | | Patches may have no hunks when there's no modifications (for example, in a rename). Handle them.
| * patch: zero id and abbrev length for empty filesEdward Thomson2016-05-261-8/+20
| |
| * patch: identify non-binary patches as `NOT_BINARY`Edward Thomson2016-05-261-4/+3
| |
| * Introduce `git_diff_to_buf`Edward Thomson2016-05-261-0/+9
| | | | | | | | | | Like `git_patch_to_buf`, provide a simple helper method that can print an entire diff directory to a `git_buf`.
| * introduce `git_diff_from_buffer` to parse diffsEdward Thomson2016-05-266-52/+185
| | | | | | | | Parse diff files into a `git_diff` structure.
| * patch: differentiate not found and invalid patchesEdward Thomson2016-05-261-1/+2
| |
| * git_patch_parse_ctx: refcount the contextEdward Thomson2016-05-263-102/+169
| |
| * git_diff_generated: abstract generated diffsEdward Thomson2016-05-2612-1672/+1819
| |
| * parse: introduce parse_ctx_contains_sEdward Thomson2016-05-261-18/+25
| |
| * patch: `patch_diff` -> `patch_generated`Edward Thomson2016-05-266-112/+119
| |
| * vector: more sensible names for `grow_at`/`shrink_at`Edward Thomson2016-05-263-14/+14
| |
| * patch: `git_patch_from_patchfile` -> `git_patch_from_buffer`Edward Thomson2016-05-262-1/+27
| |
| * patch: provide static string `advance_expected`Edward Thomson2016-05-261-10/+13
| |
| * patch: formatting cleanupsEdward Thomson2016-05-262-2/+2
| |
| * git_vector_grow/shrink: correct shrink, and testsEdward Thomson2016-05-261-14/+15
| |
| * git_buf_quote/unquote: handle > \177Edward Thomson2016-05-261-2/+2
| | | | | | | | | | | | Parse values up to and including `\377` (`0xff`) when unquoting. Print octal values as an unsigned char when quoting, lest `printf` think we're talking about negatives.
| * patch application: drop unnecessary `patch_image_init`Edward Thomson2016-05-261-10/+2
| |
| * patch parse: dup the patch from the callersEdward Thomson2016-05-263-11/+28
| |
| * patch parsing: squash some memory leaksEdward Thomson2016-05-261-0/+7
| |
| * patch: drop some warningsEdward Thomson2016-05-262-6/+5
| |
| * patch: use strlen to mean string lengthEdward Thomson2016-05-261-29/+27
| | | | | | | | | | | | | | `oid_strlen` has meant one more than the length of the string. This is mighty confusing. Make it mean only the string length! Whomsoever needs to allocate a buffer to hold a string can null terminate it like normal.
| * patch: show modes when only the mode has changedEdward Thomson2016-05-261-13/+21
| |
| * patch: quote filenames when necessaryEdward Thomson2016-05-261-33/+96
| |
| * git_buf_quote: quote ugly charactersEdward Thomson2016-05-262-1/+68
| |
| * patch: don't print some headers on pure renamesEdward Thomson2016-05-261-4/+13
| |
| * Introduce git_patch_options, handle prefixesEdward Thomson2016-05-261-112/+163
| | | | | | | | | | Handle prefixes (in terms of number of path components) for patch parsing.
| * patch printing: include rename informationEdward Thomson2016-05-262-2/+25
| |
| * patch_parse: don't set new mode when deletedEdward Thomson2016-05-261-4/+4
| |
| * patch_parse: use names from `diff --git` headerEdward Thomson2016-05-262-18/+44
| | | | | | | | | | | | When a text file is added or deleted, use the file names from the `diff --git` header instead of the `---` or `+++` lines. This is for compatibility with git.
| * patch_parse: set binary flagEdward Thomson2016-05-261-0/+1
| | | | | | | | | | We may have parsed binary data, set the `SHOW_BINARY` flag which indicates that we have actually computed a binary diff.
| * patch: when parsing, set nfiles correctly in deltaEdward Thomson2016-05-261-0/+3
| |
| * diff: include oid length in deltasEdward Thomson2016-05-264-8/+37
| | | | | | | | | | | | Now that `git_diff_delta` data can be produced by reading patch file data, which may have an abbreviated oid, allow consumers to know that the id is abbreviated.
| * patch parse: unset path prefixEdward Thomson2016-05-261-0/+4
| |
| * patch: use delta's old_file/new_file membersEdward Thomson2016-05-264-56/+27
| | | | | | | | | | No need to replicate the old_file/new_file members, or plumb them strangely up.
| * patch: abstract patches into diff'ed and parsedEdward Thomson2016-05-2612-1361/+1407
| | | | | | | | | | | | Patches can now come from a variety of sources - either internally generated (from diffing two commits) or as the results of parsing some external data.
| * patch parsing: parse binary patch filesEdward Thomson2016-05-261-9/+145
| |
| * zstream: fail when asked to inflate garbageEdward Thomson2016-05-261-0/+5
| | | | | | | | | | | | | | | | When we are provided some input buffer (with a length) to inflate, and it contains more data than simply the deflated data, fail. zlib will helpfully tell us when it is done reading (via Z_STREAM_END), so if there is data leftover in the input buffer, fail lest we continually try to inflate it.
| * git_buf: decode base85 inputsEdward Thomson2016-05-262-20/+113
| |
| * patch application: apply binary patchesEdward Thomson2016-05-262-4/+94
| | | | | | | | | | | | Handle the application of binary patches. Include tests that produce a binary patch (an in-memory `git_patch` object), then enusre that the patch applies correctly.
| * zstream: offer inflating, `git_zstream_inflatebuf`Edward Thomson2016-05-263-9/+40
| | | | | | | | Introduce `git_zstream_inflatebuf` for simple uses.
| * delta: refactor git_delta functions for consistencyEdward Thomson2016-05-264-144/+138
| | | | | | | | | | Refactor the git_delta functions to have consistent naming and parameters with the rest of the library.
| * delta: move delta application to delta.cEdward Thomson2016-05-268-236/+223
| | | | | | | | | | | | | | Move the delta application functions into `delta.c`, next to the similar delta creation functions. Make the `git__delta_apply` functions adhere to other naming and parameter style within the library.
| * apply: handle empty patchesEdward Thomson2016-05-261-1/+4
| | | | | | | | When a patch is empty, simply copy the source into the destination.
| * Patch parsing from patch filesEdward Thomson2016-05-267-2/+893
| |
| * Introduce git_apply_patchEdward Thomson2016-05-265-1/+347
| | | | | | | | | | The beginnings of patch application from an existing (diff-created) git_patch object: applies the hunks of a git_patch to a buffer.
* | Remove unused static functionsPatrick Steinhardt2016-06-212-83/+0
| |
* | Avoid old-style function definitionsPatrick Steinhardt2016-06-212-4/+4
| | | | | | | | | | | | Avoid declaring old-style functions without any parameters. Functions not accepting any parameters should be declared with `void fn(void)`. See ISO C89 $3.5.4.3.