Permalink
Browse files

Allow specifying custom celerity resource map

Summary:
We have custom static resources.
We currently include them in Phabricator's celerity resource map which is causing some pain - we need to regenerate the file without our custom resources before pushing upstream, we need to discard our changes before pulling from upstream and we need to rebuild with our changes to run Phabricator.

This diff allows writing and reading the map in other location.
The plan is this - I will run `celerity_mapper.php` twice - once to build Phabricator-only resources (to push to upstream) and once to build Phabricator + ours resoruces to put in our directory.

Better solution would be to create a map just with our resources and read and combine it with Phabricator resources.
But it is complicated because we have dependencies on Phabricator resources.

Test Plan:
`celerity_mapper.php webroot`
`celerity_mapper.php webroot ../facebook/src/__celerity_resource_map__.php`
Delete Phabricator's celerity map, set 'celerity.resource-path' and successfully load Phabricator.

Reviewers: epriestley, edward

Reviewed By: epriestley

CC: aran, Koolvin

Maniphest Tasks: T721

Differential Revision: https://secure.phabricator.com/D2630
  • Loading branch information...
1 parent 06b0f0d commit 8883c9494fefa8f75cd91eea998e35f9a230b19a vrana committed May 31, 2012
Showing with 52 additions and 15 deletions.
  1. +1 −0 .gitignore
  2. +5 −0 conf/default.conf.php
  3. +42 −14 scripts/celerity_mapper.php
  4. +4 −1 src/infrastructure/celerity/CelerityResourceMap.php
View
@@ -3,6 +3,7 @@
/docs/
/src/.phutil_module_cache
/conf/custom/*
+/webroot/rsrc/custom
/.divinercache
.#*
*#
View
@@ -973,6 +973,11 @@
// "phd launch <N> taskmaster".
'phd.start-taskmasters' => 4,
+ // Path to custom celerity resource map. Absolute or relative to
+ // 'phabricator/src'. Defaults to '__celerity_resource_map__.php'.
+ // See also `scripts/celerity_mapper.php`.
+ 'celerity.resource-path' => null,
+
// This value is an input to the hash function when building resource hashes.
// It has no security value, but if you accidentally poison user caches (by
// pushing a bad patch or having something go wrong with a CDN, e.g.) you can
@@ -149,27 +149,54 @@
require_once dirname(__FILE__).'/__init_script__.php';
-if ($argc != 2) {
- $self = basename($argv[0]);
- echo "usage: {$self} <webroot>\n";
- exit(1);
+$args = new PhutilArgumentParser($argv);
+$args->setTagline('map static resources');
+$args->setSynopsis(
+ "**celerity_mapper.php** [--output __path__] [--with-custom] <webroot>");
+$args->parse(
+ array(
+ array(
+ 'name' => 'output',
+ 'param' => 'path',
+ 'default' => '../src/__celerity_resource_map__.php',
+ 'help' => "Set the path for resource map. It is usually useful for ".
+ "'celerity.resource-path' configuration.",
+ ),
+ array(
+ 'name' => 'with-custom',
+ 'help' => 'Include resources in <webroot>/rsrc/custom/.',
+ ),
+ array(
+ 'name' => 'webroot',
+ 'wildcard' => true,
+ ),
+ ));
+
+$root = $args->getArg('webroot');
+if (count($root) != 1 || !is_dir(reset($root))) {
+ $args->printHelpAndExit();
}
+$root = Filesystem::resolvePath(reset($root));
-$root = Filesystem::resolvePath($argv[1]);
+$celerity_path = Filesystem::resolvePath($args->getArg('output'), $root);
+$with_custom = $args->getArg('with-custom');
$resource_hash = PhabricatorEnv::getEnvConfig('celerity.resource-hash');
$runtime_map = array();
echo "Finding raw static resources...\n";
-$raw_files = id(new FileFinder($root))
+$finder = id(new FileFinder($root))
->withType('f')
->withSuffix('png')
->withSuffix('jpg')
->withSuffix('gif')
->withSuffix('swf')
->withFollowSymlinks(true)
- ->setGenerateChecksums(true)
- ->find();
+ ->setGenerateChecksums(true);
+if (!$with_custom) {
+ $finder->excludePath('./rsrc/custom');
+}
+$raw_files = $finder->find();
echo "Processing ".count($raw_files)." files";
foreach ($raw_files as $path => $hash) {
@@ -194,13 +221,16 @@
->setRawResourceMap($runtime_map);
echo "Finding transformable static resources...\n";
-$files = id(new FileFinder($root))
+$finder = id(new FileFinder($root))
->withType('f')
->withSuffix('js')
->withSuffix('css')
->withFollowSymlinks(true)
- ->setGenerateChecksums(true)
- ->find();
+ ->setGenerateChecksums(true);
+if (!$with_custom) {
+ $finder->excludePath('./rsrc/custom');
+}
+$files = $finder->find();
echo "Processing ".count($files)." files";
@@ -345,7 +375,5 @@
EOFILE;
echo "Writing map...\n";
-Filesystem::writeFile(
- $root.'/../src/__celerity_resource_map__.php',
- $resource_map);
+Filesystem::writeFile($celerity_path, $resource_map);
echo "Done.\n";
@@ -35,7 +35,10 @@ public static function getInstance() {
if (empty(self::$instance)) {
self::$instance = new CelerityResourceMap();
$root = phutil_get_library_root('phabricator');
- $ok = include_once $root.'/__celerity_resource_map__.php';
+ $path = PhabricatorEnv::getEnvConfig(
+ 'celerity.resource-map',
+ '__celerity_resource_map__.php');
+ $ok = include_once Filesystem::resolvePath($path, $root);
if (!$ok) {
throw new Exception("Failed to load Celerity resource map!");
}

0 comments on commit 8883c94

Please sign in to comment.