mirror of
https://we.phorge.it/source/arcanist.git
synced 2025-02-23 03:59:24 +01:00
Correctly parse Mercurial output for "hg diff --git" when binary files are
removed Summary: Mercurial output diverges from git output when binary files are removed. Parse the Mercurial flavor. Test Plan: - Unit test fails before this change and passes afterward. - Removed a binary file in my hg local and successfully "arc diff --only"'d the change. NOTE: Git can't apply these patches, and reports: $ git apply < ~/Desktop/patch.txt error: removal patch leaves file contents error: level.png: patch does not apply Reviewers: Makinde, btrahan, jungejason, nh, tuomaspelkonen, aran Reviewed By: jungejason CC: aran, jungejason, Makinde Differential Revision: 1126
This commit is contained in:
parent
0f35d03d29
commit
18773682c7
3 changed files with 26 additions and 0 deletions
|
@ -620,6 +620,19 @@ class ArcanistDiffParser {
|
|||
return;
|
||||
}
|
||||
|
||||
// This occurs under "hg diff --git" when a binary file is removed. See
|
||||
// test case "hg-binary-delete.hgdiff". (I believe it never occurs under
|
||||
// git, which reports the "files X and /dev/null differ" string above. Git
|
||||
// can not apply these patches.)
|
||||
$is_hg_binary_delete = preg_match(
|
||||
'/^Binary file .* has changed$/',
|
||||
$line);
|
||||
if ($is_hg_binary_delete) {
|
||||
$this->nextNonemptyLine();
|
||||
$this->markBinary($change);
|
||||
return;
|
||||
}
|
||||
|
||||
// With "git diff --binary" (not a normal mode, but one users may explicitly
|
||||
// invoke and then, e.g., copy-paste into the web console) or "hg diff
|
||||
// --git" (normal under hg workflows), we may encounter a literal binary
|
||||
|
|
|
@ -488,6 +488,16 @@ EOTEXT
|
|||
ArcanistDiffChangeType::FILE_BINARY,
|
||||
$change->getFileType());
|
||||
break;
|
||||
case 'hg-binary-delete.hgdiff':
|
||||
$this->assertEqual(1, count($changes));
|
||||
$change = reset($changes);
|
||||
$this->assertEqual(
|
||||
ArcanistDiffChangeType::TYPE_DELETE,
|
||||
$change->getType());
|
||||
$this->assertEqual(
|
||||
ArcanistDiffChangeType::FILE_BINARY,
|
||||
$change->getFileType());
|
||||
break;
|
||||
case 'git-replace-symlink.gitdiff':
|
||||
$this->assertEqual(1, count($changes));
|
||||
$change = array_shift($changes);
|
||||
|
|
3
src/parser/diff/__tests__/data/hg-binary-delete.hgdiff
Normal file
3
src/parser/diff/__tests__/data/hg-binary-delete.hgdiff
Normal file
|
@ -0,0 +1,3 @@
|
|||
diff --git a/binary.png b/binary.png
|
||||
deleted file mode 100755
|
||||
Binary file binary.png has changed
|
Loading…
Add table
Reference in a new issue