Page MenuHomePhabricator

Download raw diff from Differential weirdness regarding diff including binary files additions/deletions
Open, Needs TriagePublic

Description

Download raw diff from Differential generates an incorrect diff if the diff includes binary file additions/deletions, generated by git diff --binary. If this is the intentional behavior, it would be better to document in the documentation for clarity. I understand arc works great and I like to use it, but some people prefer to upload the patch via Web UI for some reason.

Reproducing steps

  • Create a git repo
  • Add a binary file (e.g., on OS X, copy /usr/share/tokenizer/ja/char.bin to the repo) via git add
  • git diff --cached --binary | pbcopy
  • Create Diff via Differential Web UI
  • Paste from clipboard in Raw Diff
  • Create a review
  • Click "Download Raw Diff"

And what we get is something like this:

diff --git a/data.bin b/data.bin
new file mode 100644
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001

literal 0
Hc$@<O00001

Expected result is the exactly same result git diff --cached --binary generated something like

diff --git a/data.bin b/data.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6cda9b61410c8c1dfd93e9d62921c5fc8a330a2e
GIT binary patch
literal 262496
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
RYYZ*+`Ms<5b-rto-yhuL)Aj%W

literal 0
HcmV?d00001

Event Timeline

tetsuok created this task.Nov 15 2015, 11:50 AM
tetsuok updated the task description. (Show Details)
tetsuok added a project: Differential.
tetsuok added a subscriber: tetsuok.

Here is the version of phabricator and libphutil I use:

phabricator: master (HEAD: 50d158a8c4d9180ea0987a8847187567cbf42112)
libphutil: master (HEAD e9ed72483a14b86d6f770dca589443d31523f415)