Add cycle detection to celerity mapper
Summary: create CelerityResourceGraph, which extends AbstractDirectedGraph. since we've done a bunch of work already to load the resource graph into memory CelerityResourceGraph simply stores a copy and makes loadEdges work off that stored copy. Test Plan: made phabricator-prefab require herald-rule-editor ~/code/phabricator> ./scripts/celerity_mapper.php webroot Finding static resources... Processing 154 files.......................................................................................................................................................... [2011-11-22 11:28:29] EXCEPTION: (Exception) Cycle detected in resource graph: phabricator-prefab => herald-rule-editor => phabricator-prefab at [/Users/btrahan/Dropbox/code/phabricator/scripts/celerity_mapper.php:173] fixed phabricator-prefab requiring herald-rule-editor. re-ran celerity_mapper and no errors! Reviewers: epriestley Reviewed By: epriestley CC: aran, btrahan, epriestley Differential Revision: 1132
This commit is contained in:
@@ -130,7 +130,7 @@ foreach ($files as $path => $hash) {
|
||||
echo "\n";
|
||||
|
||||
$runtime_map = array();
|
||||
|
||||
$resource_graph = array();
|
||||
$hash_map = array();
|
||||
|
||||
$parser = new PhutilDocblockParser();
|
||||
@@ -168,6 +168,8 @@ foreach ($file_map as $path => $info) {
|
||||
|
||||
$hash_map[$provides] = $info['hash'];
|
||||
|
||||
$resource_graph[$provides] = $requires;
|
||||
|
||||
$runtime_map[$provides] = array(
|
||||
'uri' => $uri,
|
||||
'type' => $type,
|
||||
@@ -176,6 +178,20 @@ foreach ($file_map as $path => $info) {
|
||||
);
|
||||
}
|
||||
|
||||
$celerity_resource_graph = new CelerityResourceGraph();
|
||||
$celerity_resource_graph->addNodes($resource_graph);
|
||||
$celerity_resource_graph->setResourceGraph($resource_graph);
|
||||
$celerity_resource_graph->loadGraph();
|
||||
|
||||
foreach ($resource_graph as $provides => $requires) {
|
||||
$cycle = $celerity_resource_graph->detectCycles($provides);
|
||||
if ($cycle) {
|
||||
throw new Exception(
|
||||
"Cycle detected in resource graph: ". implode($cycle, " => ")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$package_map = array();
|
||||
foreach ($package_spec as $name => $package) {
|
||||
$hashes = array();
|
||||
|
||||
Reference in New Issue
Block a user