/** * Executes this task. */ public function main() { if ($this->file === null) { throw new BuildException('The file attribute must be specified'); } $return = getcwd(); try { /* Resolve paths correctly: Everything we do as far as * configuration is concerned should be relative to the * new project file. */ chdir($this->file->getAbsoluteFile()->getParent()); $project = new AgaviProxyProject($this->project); $project->addReference('phing.parsing.context', new AgaviProxyXmlContext($project)); $project->setUserProperty('phing.file', $this->file->getAbsolutePath()); $project->init(); Phing::setCurrentProject($project); ProjectConfigurator::configureProject($project, $this->file); foreach ($project->getTargets() as $name => $target) { /* Make sure we don't add proxy targets back to our own project. */ if ($target instanceof AgaviProxyTarget && $target->getTarget()->getProject() === $this->project) { continue; } if (array_key_exists($name, $this->project->getTargets())) { throw new BuildException(sprintf('Target conflict: %s already exists in project (attempted to add from %s)', $name, $this->file->getAbsolutePath())); } $proxy = new AgaviProxyTarget(); $proxy->setName($name); $proxy->setDescription($target->getDescription()); $proxy->setTarget($target); $this->project->addTarget($name, $proxy); } Phing::setCurrentProject($this->project); $this->log(sprintf('Importing external build file %s', $this->file->getAbsolutePath()), Project::MSG_INFO); } catch (Exception $e) { $this->log(sprintf('Could not read %s: %s (skipping)', $this->file->getAbsolutePath(), $e->getMessage()), Project::MSG_WARN); } /* Go back from whence we came. */ chdir($return); }
/** * Copies the configuration from the proxied project into this project. * * @author Noah Fontes <*****@*****.**> * @since 1.0.4 */ protected function copy() { foreach ($this->proxied->getBuildListeners() as $listener) { parent::addBuildListener($listener); } $this->setInputHandler($this->proxied->getInputHandler()); foreach ($this->proxied->getTaskDefinitions() as $name => $class) { parent::addTaskDefinition($name, $class); } foreach ($this->proxied->getDataTypeDefinitions() as $name => $class) { parent::addDataTypeDefinition($name, $class); } /* Assign properties for consistency. */ $this->proxied->copyUserProperties($this); $this->proxied->copyInheritedProperties($this); foreach ($this->proxied->getProperties() as $name => $property) { if (!AgaviProxyProject::isPropertyProtected($name) && $this->getProperty($name) === null) { parent::setNewProperty($name, $property); } } /* Add proxy targets to the new project. */ foreach ($this->proxied->getTargets() as $name => $target) { $proxy = new AgaviProxyTarget(); $proxy->setName($name); $proxy->setDescription($target->getDescription()); $proxy->setTarget($target); parent::addTarget($name, $proxy); } parent::setUserProperty('phing.version', $this->proxied->getProperty('phing.version')); $this->setSystemProperties(); }