Fix preserving extra headers and data in diffs.
Review Request #3344 — Created Sept. 23, 2012 and submitted — Latest diff uploaded
Fix preserving extra headers and data in diffs. A long-standing bug in our diffs, which especially affects Git users, is that our diff parser would lose information before the diffs and even lose some within the diffs. Diffs formatted with 'git format-patch' contained headers on the author, description, diffstats, and more, prior to the first 'diff --git' line. We just ignored this, meaning that users who then tried to get their patch out of Review Board would find it all missing. That has been changed in both the standard diff parser and Git's pretty custom parser. We now store this "preamble" and make sure the first file contains it at the beginning of its payload. We also no longer hide the "Binary files have changed" part of a Git diff, which was accidentally being left out. As part of this, we're no longer trying so hard to remove stuff we're afraid patch can't handle. patch can handle a lot of things, so we're just going to include it all. The thought being that if some tool is generating content in a diff, at some point they'd have to have tested that with patch. If it turns out something breaks as a result of this, we can incrementally bring back filtering. Unit tests have been updated for this change, as many of them were expecting not to see certain things, or for smaller payloads. A new unit test testing all the headers in a standard git format-patch has also been added.
Unit tests all pass. I built a diff for this change using git format-patch and uploaded it to my dev server manually. It parsed fine, viewed fine, and when I downloaded the raw diff, it contained all the same data I uploaded.