Make repository discovery partially testable
Summary: Ref T2784. Begins pulling discovery into Engines and covering it with tests. In particular: - Discovery is currently a one-shot process where we find all the new commits and write them to the database in one go. Split it apart so we find and return the new commits first, then write them to the database separately. This makes things simpler and more testable. - This diff only brings SVN into an engine (and only the "find the commits" part), since it's simpler than Git or Mercurial. - Creates a base Engine class and moves common functionality there. - Restores the `--verbose` flag to `repository pull`. Test Plan: Added unit tests. Ran `bin/repository discover`. Ran `bin/phd debug pulllocal`. Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T2784 Differential Revision: https://secure.phabricator.com/D5906
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @task config Configuring Repository Engines
|
||||
* @task internal Internals
|
||||
*/
|
||||
abstract class PhabricatorRepositoryEngine {
|
||||
|
||||
private $repository;
|
||||
private $verbose;
|
||||
|
||||
/**
|
||||
* @task config
|
||||
*/
|
||||
public function setRepository(PhabricatorRepository $repository) {
|
||||
$this->repository = $repository;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @task config
|
||||
*/
|
||||
protected function getRepository() {
|
||||
if ($this->repository === null) {
|
||||
throw new Exception("Call setRepository() to provide a repository!");
|
||||
}
|
||||
|
||||
return $this->repository;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @task config
|
||||
*/
|
||||
public function setVerbose($verbose) {
|
||||
$this->verbose = $verbose;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @task config
|
||||
*/
|
||||
public function getVerbose() {
|
||||
return $this->verbose;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @task internal
|
||||
*/
|
||||
protected function log($pattern /* ... */) {
|
||||
if ($this->getVerbose()) {
|
||||
$console = PhutilConsole::getConsole();
|
||||
$argv = func_get_args();
|
||||
call_user_func_array(array($console, 'writeLog'), $argv);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user