1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-01-10 23:01:04 +01:00

Allow DivinerPublisher to be specified as a flag

Summary: Allow the `DivinerPublisher` subclass to be specified via `./bin/divner generate --publisher ...`. In particular, this allows use of the (mostly broken) `DivinerStaticPublisher`.

Test Plan: Ran `./bin/diviner generate --publisher DivinerStaticPublisher`

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: Korvin, epriestley

Differential Revision: https://secure.phabricator.com/D11588
This commit is contained in:
Joshua Spence 2015-02-01 22:01:04 +11:00
parent ec39649449
commit d4b78af102
2 changed files with 30 additions and 8 deletions

View file

@ -42,6 +42,7 @@ abstract class DivinerPublisher {
$this->atomCache = $cache; $this->atomCache = $cache;
$graph_map = $this->atomCache->getGraphMap(); $graph_map = $this->atomCache->getGraphMap();
$this->atomGraphHashToNodeHashMap = array_flip($graph_map); $this->atomGraphHashToNodeHashMap = array_flip($graph_map);
return $this;
} }
protected function getAtomFromGraphHash($graph_hash) { protected function getAtomFromGraphHash($graph_hash) {

View file

@ -19,6 +19,12 @@ final class DivinerGenerateWorkflow extends DivinerWorkflow {
'param' => 'path', 'param' => 'path',
'help' => pht('Path to a Diviner book configuration.'), 'help' => pht('Path to a Diviner book configuration.'),
), ),
array(
'name' => 'publisher',
'param' => 'class',
'help' => pht('Specify a subclass of %s.', 'DivinerPublisher'),
'default' => 'DivinerLivePublisher',
),
)); ));
} }
@ -164,7 +170,22 @@ final class DivinerGenerateWorkflow extends DivinerWorkflow {
$this->buildAtomCache(); $this->buildAtomCache();
$this->buildGraphCache(); $this->buildGraphCache();
$this->publishDocumentation($args->getArg('clean')); $publisher_class = $args->getArg('publisher');
$symbols = id(new PhutilSymbolLoader())
->setName($publisher_class)
->setConcreteOnly(true)
->setAncestorClass('DivinerPublisher')
->selectAndLoadSymbols();
if (!$symbols) {
throw new Exception(
pht(
"Publisher class '%s' must be a concrete subclass of %s.",
$publisher_class,
'DivinerPublisher'));
}
$publisher = newv($publisher_class, array());
$this->publishDocumentation($args->getArg('clean'), $publisher);
} }
/* -( Atom Cache )--------------------------------------------------------- */ /* -( Atom Cache )--------------------------------------------------------- */
@ -497,18 +518,18 @@ final class DivinerGenerateWorkflow extends DivinerWorkflow {
return md5(serialize($inputs)).'G'; return md5(serialize($inputs)).'G';
} }
private function publishDocumentation($clean) { private function publishDocumentation($clean, DivinerPublisher $publisher) {
$atom_cache = $this->getAtomCache(); $atom_cache = $this->getAtomCache();
$graph_map = $atom_cache->getGraphMap(); $graph_map = $atom_cache->getGraphMap();
$this->log(pht('PUBLISHING DOCUMENTATION')); $this->log(pht('PUBLISHING DOCUMENTATION'));
$publisher = new DivinerLivePublisher(); $publisher
$publisher->setDropCaches($clean); ->setDropCaches($clean)
$publisher->setConfig($this->getAllConfig()); ->setConfig($this->getAllConfig())
$publisher->setAtomCache($atom_cache); ->setAtomCache($atom_cache)
$publisher->setRenderer(new DivinerDefaultRenderer()); ->setRenderer(new DivinerDefaultRenderer())
$publisher->publishAtoms(array_values($graph_map)); ->publishAtoms(array_values($graph_map));
$this->log(pht('Done.')); $this->log(pht('Done.'));
} }