From 0cfdf2f74fee79189d121177e6039bc3a8101905 Mon Sep 17 00:00:00 2001 From: vrana Date: Thu, 26 Jul 2012 15:00:24 -0700 Subject: [PATCH] Allow specifying against commit in DiffusionRawDiffQuery Summary: I will need this for tracking line number in Blame previous revision. Test Plan: $ hg diff --rev 0:1 $ svn diff -r 64382:64383 README Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D3083 --- .../query/rawdiff/DiffusionGitRawDiffQuery.php | 9 +++++++-- .../query/rawdiff/DiffusionMercurialRawDiffQuery.php | 8 +++++++- .../diffusion/query/rawdiff/DiffusionRawDiffQuery.php | 10 ++++++++++ .../query/rawdiff/DiffusionSvnRawDiffQuery.php | 8 +++++++- 4 files changed, 31 insertions(+), 4 deletions(-) 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());