Changeset View
Changeset View
Standalone View
Standalone View
src/ref/symbol/ArcanistSymbolEngine.php
- This file was added.
<?php | |||||
final class ArcanistSymbolEngine | |||||
extends Phobject { | |||||
private $workflow; | |||||
private $refs = array(); | |||||
public function setWorkflow($workflow) { | |||||
$this->workflow = $workflow; | |||||
return $this; | |||||
} | |||||
public function getWorkflow() { | |||||
return $this->workflow; | |||||
} | |||||
public function loadRevisionForSymbol($symbol) { | |||||
$refs = $this->loadRevisionsForSymbols(array($symbol)); | |||||
return head($refs)->getObject(); | |||||
} | |||||
public function loadRevisionsForSymbols(array $symbols) { | |||||
return $this->loadRefsForSymbols( | |||||
new ArcanistRevisionSymbolRef(), | |||||
$symbols); | |||||
} | |||||
public function loadUserForSymbol($symbol) { | |||||
$refs = $this->loadUsersForSymbols(array($symbol)); | |||||
return head($refs)->getObject(); | |||||
} | |||||
public function loadUsersForSymbols(array $symbols) { | |||||
return $this->loadRefsForSymbols( | |||||
new ArcanistUserSymbolRef(), | |||||
$symbols); | |||||
} | |||||
public function loadCommitForSymbol($symbol) { | |||||
$refs = $this->loadCommitsForSymbols(array($symbol)); | |||||
return head($refs)->getObject(); | |||||
} | |||||
public function loadCommitsForSymbols(array $symbols) { | |||||
return $this->loadRefsForSymbols( | |||||
new ArcanistCommitSymbolRef(), | |||||
$symbols); | |||||
} | |||||
public function loadRefsForSymbols( | |||||
ArcanistSymbolRef $template, | |||||
array $symbols) { | |||||
$refs = array(); | |||||
$load_refs = array(); | |||||
foreach ($symbols as $symbol) { | |||||
$ref = id(clone $template) | |||||
->setSymbol($symbol); | |||||
$ref_key = $ref->getSymbolEngineCacheKey(); | |||||
if (!isset($this->refs[$ref_key])) { | |||||
$this->refs[$ref_key] = $ref; | |||||
$load_refs[] = $ref; | |||||
} | |||||
$refs[$symbol] = $ref; | |||||
} | |||||
$workflow = $this->getWorkflow(); | |||||
if ($load_refs) { | |||||
$workflow->loadHardpoints($refs, ArcanistSymbolRef::HARDPOINT_OBJECT); | |||||
} | |||||
return $refs; | |||||
} | |||||
} |