diff --git a/src/applications/repository/engine/PhabricatorRepositoryMirrorEngine.php b/src/applications/repository/engine/PhabricatorRepositoryMirrorEngine.php index 5d69644e7b..d73b2bed0f 100644 --- a/src/applications/repository/engine/PhabricatorRepositoryMirrorEngine.php +++ b/src/applications/repository/engine/PhabricatorRepositoryMirrorEngine.php @@ -55,9 +55,17 @@ final class PhabricatorRepositoryMirrorEngine $this->log(pht('Pushing to remote "%s"...', $mirror->getRemoteURI())); - if (!$proxy->isGit()) { + if ($proxy->isGit()) { + $this->pushToGitRepository($proxy); + } else if ($proxy->isHg()) { + $this->pushToHgRepository($proxy); + } else { throw new Exception(pht('Unsupported VCS!')); } + } + + private function pushToGitRepository( + PhabricatorRepository $proxy) { $future = $proxy->getRemoteCommandFuture( 'push --verbose --mirror -- %P', @@ -68,4 +76,24 @@ final class PhabricatorRepositoryMirrorEngine ->resolvex(); } + private function pushToHgRepository( + PhabricatorRepository $proxy) { + + $future = $proxy->getRemoteCommandFuture( + 'push --verbose --rev tip -- %P', + $proxy->getRemoteURIEnvelope()); + + try { + $future + ->setCWD($proxy->getLocalPath()) + ->resolvex(); + } catch (CommandException $ex) { + if (preg_match('/no changes found/', $ex->getStdOut())) { + // mercurial says nothing changed, but that's good + } else { + throw $ex; + } + } + } + } diff --git a/src/applications/repository/storage/PhabricatorRepository.php b/src/applications/repository/storage/PhabricatorRepository.php index db4bb001b5..d7e229eb1e 100644 --- a/src/applications/repository/storage/PhabricatorRepository.php +++ b/src/applications/repository/storage/PhabricatorRepository.php @@ -1038,7 +1038,7 @@ final class PhabricatorRepository extends PhabricatorRepositoryDAO } public function canMirror() { - if ($this->isGit()) { + if ($this->isGit() || $this->isHg()) { return true; }