diff --git a/src/configuration/ArcanistSettings.php b/src/configuration/ArcanistSettings.php --- a/src/configuration/ArcanistSettings.php +++ b/src/configuration/ArcanistSettings.php @@ -174,6 +174,14 @@ 'help' => pht( 'Configured command aliases. Use "arc alias" to define aliases.'), ), + 'arc.diff.svn.use-internal-diff' => array( + 'type' => 'bool', + 'help' => pht( + 'Use subversion\'s internal diff tool for generating diffs. '. + 'This requires at least subversion version 1.9.'), + 'default' => false, + 'example' => 'false', + ), ); } diff --git a/src/repository/api/ArcanistSubversionAPI.php b/src/repository/api/ArcanistSubversionAPI.php --- a/src/repository/api/ArcanistSubversionAPI.php +++ b/src/repository/api/ArcanistSubversionAPI.php @@ -292,6 +292,18 @@ // directory is newly added (see T5555) so we need to filter the results // out later as well. + $svn_internal_diff = 'arc.diff.svn.use-internal-diff'; + $configmanager = $this->getConfigurationManager(); + $use_svn_diff = $configmanager->getConfigFromAnySource($svn_internal_diff); + if ($use_svn_diff) { + return $this->buildLocalFuture( + array( + 'diff --depth empty --internal-diff -x -U%d %s', + $this->getDiffLinesOfContext(), + $path, + )); + } + if (phutil_is_windows()) { // TODO: Provide a binary_safe_diff script for Windows. // TODO: Provide a diff command which can take lines of context somehow.