diff --git a/src/applications/diffusion/query/diff/base/DiffusionDiffQuery.php b/src/applications/diffusion/query/diff/base/DiffusionDiffQuery.php index 05708cc5ff..c29590ff78 100644 --- a/src/applications/diffusion/query/diff/base/DiffusionDiffQuery.php +++ b/src/applications/diffusion/query/diff/base/DiffusionDiffQuery.php @@ -1,7 +1,7 @@ - } - final public static function newFromDiffusionRequest( DiffusionRequest $request) { - - $repository = $request->getRepository(); - - switch ($repository->getVersionControlSystem()) { - case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: - $class = 'DiffusionGitDiffQuery'; - break; - case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: - $class = 'DiffusionMercurialDiffQuery'; - break; - case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: - $class = 'DiffusionSvnDiffQuery'; - break; - default: - throw new Exception("Unsupported VCS!"); - } - - PhutilSymbolLoader::loadClass($class); - $query = new $class(); - - $query->request = $request; - - return $query; - } - - final protected function getRequest() { - return $this->request; + return parent::newQueryObject(__CLASS__, $request); } final public function getRenderingReference() { @@ -64,8 +33,6 @@ abstract class DiffusionDiffQuery { return $this->executeQuery(); } - abstract protected function executeQuery(); - protected function getEffectiveCommit() { $drequest = $this->getRequest(); diff --git a/src/applications/diffusion/query/diff/base/__init__.php b/src/applications/diffusion/query/diff/base/__init__.php index d6ecf69496..bf1f89873f 100644 --- a/src/applications/diffusion/query/diff/base/__init__.php +++ b/src/applications/diffusion/query/diff/base/__init__.php @@ -6,10 +6,8 @@ +phutil_require_module('phabricator', 'applications/diffusion/query/base'); phutil_require_module('phabricator', 'applications/diffusion/query/lastmodified/base'); -phutil_require_module('phabricator', 'applications/repository/constants/repositorytype'); - -phutil_require_module('phutil', 'symbols'); phutil_require_source('DiffusionDiffQuery.php'); diff --git a/src/applications/diffusion/query/diff/svn/DiffusionSvnDiffQuery.php b/src/applications/diffusion/query/diff/svn/DiffusionSvnDiffQuery.php index e56be33a90..3824c74df1 100644 --- a/src/applications/diffusion/query/diff/svn/DiffusionSvnDiffQuery.php +++ b/src/applications/diffusion/query/diff/svn/DiffusionSvnDiffQuery.php @@ -22,15 +22,14 @@ final class DiffusionSvnDiffQuery extends DiffusionDiffQuery { $drequest = $this->getRequest(); $repository = $drequest->getRepository(); - if (!$drequest->getRawCommit()) { - $effective_commit = $this->getEffectiveCommit(); - if (!$effective_commit) { - return null; - } - // TODO: Sketchy side effect. - $drequest->setCommit($effective_commit); + $effective_commit = $this->getEffectiveCommit(); + if (!$effective_commit) { + return null; } + $drequest = clone $drequest; + $drequest->setCommit($effective_commit); + $path_change_query = DiffusionPathChangeQuery::newFromDiffusionRequest( $drequest); $path_changes = $path_change_query->loadChanges(); diff --git a/src/applications/diffusion/query/lastmodified/base/DiffusionLastModifiedQuery.php b/src/applications/diffusion/query/lastmodified/base/DiffusionLastModifiedQuery.php index 4f5a3c4aee..9359266952 100644 --- a/src/applications/diffusion/query/lastmodified/base/DiffusionLastModifiedQuery.php +++ b/src/applications/diffusion/query/lastmodified/base/DiffusionLastModifiedQuery.php @@ -1,7 +1,7 @@ - } +abstract class DiffusionLastModifiedQuery extends DiffusionQuery { final public static function newFromDiffusionRequest( DiffusionRequest $request) { - - $repository = $request->getRepository(); - - switch ($repository->getVersionControlSystem()) { - case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: - $class = 'DiffusionGitLastModifiedQuery'; - break; - case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: - $class = 'DiffusionMercurialLastModifiedQuery'; - break; - case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: - $class = 'DiffusionSvnLastModifiedQuery'; - break; - default: - throw new Exception("Unsupported VCS!"); - } - - PhutilSymbolLoader::loadClass($class); - $query = new $class(); - - $query->request = $request; - - return $query; - } - - final protected function getRequest() { - return $this->request; + return parent::newQueryObject(__CLASS__, $request); } final public function loadLastModification() { return $this->executeQuery(); } - abstract protected function executeQuery(); - } diff --git a/src/applications/diffusion/query/lastmodified/base/__init__.php b/src/applications/diffusion/query/lastmodified/base/__init__.php index 201f669215..de060b1f6b 100644 --- a/src/applications/diffusion/query/lastmodified/base/__init__.php +++ b/src/applications/diffusion/query/lastmodified/base/__init__.php @@ -6,9 +6,7 @@ -phutil_require_module('phabricator', 'applications/repository/constants/repositorytype'); - -phutil_require_module('phutil', 'symbols'); +phutil_require_module('phabricator', 'applications/diffusion/query/base'); phutil_require_source('DiffusionLastModifiedQuery.php'); diff --git a/src/applications/diffusion/query/lastmodified/svn/DiffusionSvnLastModifiedQuery.php b/src/applications/diffusion/query/lastmodified/svn/DiffusionSvnLastModifiedQuery.php index 513b72550b..c6c1e4b6f4 100644 --- a/src/applications/diffusion/query/lastmodified/svn/DiffusionSvnLastModifiedQuery.php +++ b/src/applications/diffusion/query/lastmodified/svn/DiffusionSvnLastModifiedQuery.php @@ -1,7 +1,7 @@ needChildChanges(true); $history_query->needDirectChanges(true); $history_array = $history_query->loadHistory(); + + if (!$history_array) { + return array(null, null); + } + $history = reset($history_array); return array($history->getCommit(), $history->getCommitData());