go-gitdiff#
A Go library for parsing and applying patches generated by git diff, git show, and git format-patch. It can also parse and apply unified diffs
generated by the standard diff tool.
It supports both standard line-oriented / text patches and Git binary patches.
Status#
In development, most functionality is currently missing, incomplete, or broken.
Why another git/unified diff parser?#
Several packages with similar functionality exist, so why did I write another?
-
No other packages I found support binary diffs, as generated with the
--binaryflag. This is the main reason for writing a new packages, as the format is pretty different from line-oriented diffs and is unique to Git. -
Most other packages only parse patches, so you need another package to apply them (and if they do support applies, it is only for text files.)
-
This package aims to accept anything that
git applyaccepts, and closely follows the logic inapply.c. -
It seemed like a fun thing to write and a good way to learn more about Git.
Known Issues and Differences From Git#
-
Certain types of invalid input that I believe are accepted by
git applygenerate errors in this library. These include:- Numbers immediately followed by non-numeric characters
- Trailing characters on a line after valid or expected content
-
The translation from C to Go may have introduced inconsistencies in the way Unicode file names are handled; these are bugs, so please report any issues of this type.
-
When reading headers, this library does not validate that OIDs present on an
indexline are shorter than or equal to the maximum hash length, as this requires knowing if the repository used SHA1 or SHA256 hashes.