diff --git a/src/applications/diffusion/query/rawdiff/DiffusionGitRawDiffQuery.php b/src/applications/diffusion/query/rawdiff/DiffusionGitRawDiffQuery.php index 58cac2a28f..c408044bb6 100644 --- a/src/applications/diffusion/query/rawdiff/DiffusionGitRawDiffQuery.php +++ b/src/applications/diffusion/query/rawdiff/DiffusionGitRawDiffQuery.php @@ -35,13 +35,18 @@ final class DiffusionGitRawDiffQuery extends DiffusionRawDiffQuery { ); $options = implode(' ', $options); + $against = $this->getAgainstCommit(); + if ($against === null) { + $against = $commit.'^'; + } + // If there's no path, get the entire raw diff. $path = nonempty($drequest->getPath(), '.'); $future = $repository->getLocalCommandFuture( - "diff %C %s^ %s -- %s", + "diff %C %s %s -- %s", $options, - $commit, + $against, $commit, $path); diff --git a/src/applications/diffusion/query/rawdiff/DiffusionMercurialRawDiffQuery.php b/src/applications/diffusion/query/rawdiff/DiffusionMercurialRawDiffQuery.php index 9551a1904c..cb03a7b9b9 100644 --- a/src/applications/diffusion/query/rawdiff/DiffusionMercurialRawDiffQuery.php +++ b/src/applications/diffusion/query/rawdiff/DiffusionMercurialRawDiffQuery.php @@ -27,9 +27,15 @@ final class DiffusionMercurialRawDiffQuery extends DiffusionRawDiffQuery { // If there's no path, get the entire raw diff. $path = nonempty($drequest->getPath(), '.'); + $against = $this->getAgainstCommit(); + if ($against === null) { + $against = $commit.'^'; + } + $future = $repository->getLocalCommandFuture( - 'diff -U %d --git --change %s -- %s', + 'diff -U %d --git --rev %s:%s -- %s', $this->getLinesOfContext(), + $against, $commit, $path); diff --git a/src/applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php b/src/applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php index d9eab546ea..eca89d6724 100644 --- a/src/applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php +++ b/src/applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php @@ -21,6 +21,7 @@ abstract class DiffusionRawDiffQuery extends DiffusionQuery { private $request; private $timeout; private $linesOfContext = 65535; + private $againstCommit; final public static function newFromDiffusionRequest( DiffusionRequest $request) { @@ -49,4 +50,13 @@ abstract class DiffusionRawDiffQuery extends DiffusionQuery { return $this->linesOfContext; } + final public function setAgainstCommit($value) { + $this->againstCommit = $value; + return $this; + } + + final public function getAgainstCommit() { + return $this->againstCommit; + } + } diff --git a/src/applications/diffusion/query/rawdiff/DiffusionSvnRawDiffQuery.php b/src/applications/diffusion/query/rawdiff/DiffusionSvnRawDiffQuery.php index f3907ed1d8..8633ae3132 100644 --- a/src/applications/diffusion/query/rawdiff/DiffusionSvnRawDiffQuery.php +++ b/src/applications/diffusion/query/rawdiff/DiffusionSvnRawDiffQuery.php @@ -25,10 +25,16 @@ final class DiffusionSvnRawDiffQuery extends DiffusionRawDiffQuery { $commit = $drequest->getCommit(); $arc_root = phutil_get_library_root('arcanist'); + $against = $this->getAgainstCommit(); + if ($against === null) { + $against = $commit - 1; + } + $future = $repository->getRemoteCommandFuture( - 'diff --diff-cmd %s -x -U%d -c %d %s%s@', + 'diff --diff-cmd %s -x -U%d -r %d:%d %s%s@', $arc_root.'/../scripts/repository/binary_safe_diff.sh', $this->getLinesOfContext(), + $against, $commit, $repository->getRemoteURI(), $drequest->getPath());