Download raw body.
rework the patch parser a bit
Omar Polo <op@omarpolo.com> wrote:
> At a higher level, the patch parser works like this:
>
> while (find_patch()) {
> while (parse_hunk())
> ;
> end_of_patch();
> }
>
> this works for plain diffs and "git diffs", because each patch has a
> header. However, "got diff" is different: it prints some info only at
> the top, like the "diff" and "commit -/+" headers. It's fine IMHO, as
> it avoids some noise, but got patch needs to be tweaked.
>
> Currently "got patch" will read the commit from the first patch, but if
> there is a second (or third, ...) patched file it forgets the commit and
> only read the "blob -" line. This matter because if the diff3 merge
> ends up with a conflict we use a less-useful "blob abc" label instead of
> "commit xyz". (In the future we may also want to use the commit info
> for other things.)
>
> While here it'd be also nice to start making the patch parser a little
> bit strictier.
>
> The following patch splits the parser and introduces a `patch_start'
> routine that finds the "diff" header (if there is). This way, we can
> persist some state (commit id and wether it's a "git diff") while
> processing the content of the diff.
forgot one thing: the diff currently drops the support for reading the
"old style" got-diff with the commit id after the "diff" line and only
looks at "commit -". It's not the end of the world, a diff generated
with a previous version of got can still be applied, just not with the
merge magic :)
(it's easy to take it back eventually, but now that we have a better
output format I'd like to support only that)
rework the patch parser a bit