[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/harbormaster/engine/ -> HarbormasterBuildGraph.php (source)

   1  <?php
   2  
   3  /**
   4   * Directed graph representing a build plan
   5   */
   6  final class HarbormasterBuildGraph extends AbstractDirectedGraph {
   7  
   8    private $stepMap;
   9  
  10    public static function determineDependencyExecution(
  11      HarbormasterBuildPlan $plan) {
  12  
  13      $steps = id(new HarbormasterBuildStepQuery())
  14        ->setViewer(PhabricatorUser::getOmnipotentUser())
  15        ->withBuildPlanPHIDs(array($plan->getPHID()))
  16        ->execute();
  17  
  18      $steps_by_phid = mpull($steps, null, 'getPHID');
  19      $step_phids = mpull($steps, 'getPHID');
  20  
  21      if (count($steps) === 0) {
  22        return array();
  23      }
  24  
  25      $graph = id(new HarbormasterBuildGraph($steps_by_phid))
  26        ->addNodes($step_phids);
  27  
  28      $raw_results =
  29        $graph->getBestEffortTopographicallySortedNodes();
  30  
  31      $results = array();
  32      foreach ($raw_results as $node) {
  33        $results[] = array(
  34          'node' => $steps_by_phid[$node['node']],
  35          'depth' => $node['depth'],
  36          'cycle' => $node['cycle'],
  37        );
  38      }
  39  
  40      return $results;
  41    }
  42  
  43    public function __construct($step_map) {
  44      $this->stepMap = $step_map;
  45    }
  46  
  47    protected function loadEdges(array $nodes) {
  48      $map = array();
  49      foreach ($nodes as $node) {
  50        $step = $this->stepMap[$node];
  51        $deps = $step->getStepImplementation()->getDependencies($step);
  52  
  53        $map[$node] = array();
  54        foreach ($deps as $dep) {
  55          $map[$node][] = $dep;
  56        }
  57      }
  58  
  59      return $map;
  60    }
  61  
  62  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1