Example #1
0
 /**
  * @param Package $p
  * @param ResourceCollection $collection
  * @return ResourceMap
  */
 public function getMap(Package $p, ResourceCollection $collection)
 {
     $sourceFiles = $collection->get(self::FILTER);
     $filePath = $this->getPath($p);
     $map = new ResourceMap();
     if ($sourceFiles) {
         $map->map($sourceFiles, $filePath);
     }
     return $map;
 }
Example #2
0
 /**
  * Get map of the expected result when this action will be executed
  * @param Package $p
  * @param ResourceCollection $collection
  * @return ResourceMap
  */
 public function getMap(Package $p, ResourceCollection $collection)
 {
     $map = new ResourceMap();
     $sourceFiles = $collection->get($this->filter);
     if (!$sourceFiles) {
         return $map;
     }
     if ($this->getActionType() == GulpActionType::CONCATENATE) {
         $map->map($sourceFiles, $this->generateSingleFileName($p, $sourceFiles));
     } else {
         foreach ($sourceFiles as $filePath) {
             $map->map($filePath, $this->moveToTargetDirectory($p, $filePath));
         }
     }
     return $map;
 }
Example #3
0
 /**
  * @param Package $p
  * @param IGulpAction[] $actions
  * @param ResourceCollection $collection
  * @return CompilerSetup
  */
 private function preCompileActions(Package $p, array $actions, ResourceCollection $collection)
 {
     $modifiedCollection = clone $collection;
     /** @var ResourceMap $modifiedMap */
     $modifiedMap = new ResourceMap();
     // Detect changes.
     foreach ($actions as $action) {
         $action->setTargetDir($this->config->TargetDirectory);
         $map = $action->getMap($p, $modifiedCollection);
         $map->apply($modifiedCollection);
         $modifiedMap->modify($map);
     }
     $modified = $this->getModified($modifiedMap);
     $setup = $this->preCompileHelper->getRecompileTargets($p, $modifiedMap, $modified);
     // All resource files that have an unmodified target resource.
     $unmodifiedSourceFiles = [];
     foreach ($setup->Unchanged as $unmodifiedTarget) {
         $data = $modifiedMap->getMapFor($unmodifiedTarget);
         $unmodifiedSourceFiles = array_merge($unmodifiedSourceFiles, is_array($data) ? $data : [$data]);
     }
     // Upend source resource files that were not used to create any package.
     foreach ($collection as $resource) {
         // File will be used to recompile.
         if ($setup->CompileTarget->hasResource($resource)) {
             continue;
         }
         // File used for a library that was not modified.
         if (in_array($resource, $unmodifiedSourceFiles)) {
             continue;
         }
         // Else file is not modified at all.
         $setup->CompileTarget->add($resource);
     }
     // Rename target files to target files with timestamp.
     if ($this->config->IsAddTimestamp) {
         foreach ($setup->Unchanged->get() as $unchanged) {
             $setup->Unchanged->replace($unchanged, $this->timestampHelper->findFileWithTimestamp($unchanged));
         }
     }
     return $setup;
 }
Example #4
0
 /**
  * @param Package $p
  * @param ResourceMap $compilationMap Aggregated compilation map.
  * @param array $modified Array of final Resource files that must be recompiled.
  * @return CompilerSetup
  */
 public function getRecompileTargets(Package $p, ResourceMap $compilationMap, array $modified)
 {
     $recompileSource = [];
     $unmodifiedFlipped = array_flip(array_keys($compilationMap->getMap()));
     // Key is the original source file
     $recompileSourceFlipped = [];
     foreach ($modified as $resource) {
         unset($unmodifiedFlipped[$resource]);
         $resourceSources = $compilationMap->getMapFor($resource);
         // This should not happen. Modified file that didn't have a map should not be present here.
         if (is_null($resourceSources)) {
             continue;
         }
         $recompileSourceFlipped = array_merge($recompileSourceFlipped, array_flip($resourceSources));
     }
     while (count($recompileSource) < count($recompileSourceFlipped)) {
         $recompileSource = array_keys($recompileSourceFlipped);
         // Find all
         foreach (array_keys($unmodifiedFlipped) as $unmodifiedTarget) {
             $sourceFiles = $compilationMap->getMapFor($unmodifiedTarget);
             if (!is_array($sourceFiles)) {
                 $sourceFiles = [$sourceFiles];
             }
             if (array_intersect($sourceFiles, $recompileSource)) {
                 unset($unmodifiedFlipped[$unmodifiedTarget]);
                 $recompileSourceFlipped = array_merge($recompileSourceFlipped, array_flip($sourceFiles));
             }
         }
     }
     $setup = new CompilerSetup($p);
     if ($unmodifiedFlipped) {
         $setup->Unchanged->add(array_keys($unmodifiedFlipped));
     }
     if ($recompileSource) {
         $setup->CompileTarget->add($recompileSource);
     }
     return $setup;
 }