Allow keeping "replace" tasks in the content section of the package.xml.
authorGunnar Wrobel <p@rdus.de>
Tue, 12 Oct 2010 18:32:30 +0000 (20:32 +0200)
committerGunnar Wrobel <p@rdus.de>
Wed, 13 Oct 2010 19:14:43 +0000 (21:14 +0200)
Great, no more manual fixing after the update :)

components/lib/Components/Pear/Package.php
components/package.xml

index 8b93d12..05de3bd 100644 (file)
@@ -203,15 +203,84 @@ class Components_Pear_Package
         return $this->_getPackageFile()->getDescription();
     }
 
-    private function _getUpdatedPackageFile()
+    /**
+     * Update the content listing of the provided package.
+     *
+     * @param PEAR_PackageFileManager2 $package The package to update.
+     *
+     * @return NULL
+     */
+    private function _updateContents(PEAR_PackageFileManager2 $package)
     {
-        $package = $this->_getPackageRwFile();
+        $contents = $package->getContents();
+        $contents = $contents['dir']['file'];
+        $taskfiles = array();
+        foreach ($contents as $file) {
+            $atts = $file['attribs'];
+            unset($file['attribs']);
+            if (count($file)) {
+                $taskfiles[$atts['name']] = $file;
+            }
+        }
+
         /**
          * @todo: Looks like this throws away any <replace /> tags we have in
          * the content list. Needs to be fixed.
          */
         $package->generateContents();
 
+        $updated = $package->getContents();
+        $updated = $updated['dir']['file'];
+        foreach ($updated as $file) {
+            if (isset($taskfiles[$file['attribs']['name']])) {
+                foreach ($taskfiles[$file['attribs']['name']] as $tag => $raw) {
+                    $taskname = $package->getTask($tag) . '_rw';
+                    if (!class_exists($taskname)) {
+                        throw new Components_Exception(
+                            sprintf('Read/write task %s is missing!', $taskname)
+                        );
+                    }
+                    $logger = new stdClass;
+                    $task = new $taskname(
+                        $package,
+                        $this->getEnvironment()->getPearConfig(),
+                        $logger,
+                        ''
+                    );
+                    switch ($tag) {
+                    case 'replace':
+                        $task->setInfo(
+                            $raw['attribs']['from'],
+                            $raw['attribs']['to'],
+                            $raw['attribs']['type']
+                        );
+                        break;
+                    default:
+                        throw new Components_Exceptions(
+                            sprintf('Unsupported task type %s!', $tag)
+                        );
+                    }
+                    $task->init(
+                        $raw,
+                        $file['attribs']
+                    );
+                    $package->addTaskToFile($file['attribs']['name'], $task);
+                }
+            }
+        }
+    }
+
+    /**
+     * Return an updated package description.
+     *
+     * @return PEAR_PackageFileManager2 The updated package.
+     */
+    private function _getUpdatedPackageFile()
+    {
+        $package = $this->_getPackageRwFile();
+
+        $this->_updateContents($package);
+
         /**
          * This is required to clear the <phprelease><filelist></filelist></phprelease>
          * section.
@@ -277,5 +346,6 @@ class Components_Pear_Package
     public function writeUpdatedPackageFile()
     {
         $this->_getUpdatedPackageFile()->writePackageFile();
+        $this->_output->ok('Successfully updated ' . $this->_package_xml_path);
     }    
 }
index 0f5679c..ac9c964 100644 (file)
@@ -24,8 +24,8 @@
   <email>jan@horde.org</email>
   <active>yes</active>
  </lead>
- <date>2010-10-03</date>
- <time>19:38:19</time>
+ <date>2010-10-12</date>
+ <time>14:38:25</time>
  <version>
   <release>0.0.1</release>
   <api>0.0.1</api>
@@ -48,6 +48,7 @@
    <dir name="lib">
     <dir name="Components">
      <dir name="Config">
+      <file name="Application.php" role="php" />
       <file name="Cli.php" role="php" />
      </dir> <!-- /lib/Components/Config -->
      <dir name="Dependencies">
       <file name="PearPackageXml.php" role="php" />
      </dir> <!-- /lib/Components/Module -->
      <dir name="Pear">
+      <file name="Factory.php" role="php" />
       <file name="InstallLocation.php" role="php" />
       <file name="Package.php" role="php" />
      </dir> <!-- /lib/Components/Pear -->
      <dir name="Runner">
+      <file name="CiPrebuild.php" role="php" />
       <file name="CiSetup.php" role="php" />
       <file name="Distribute.php" role="php" />
       <file name="Installer.php" role="php" />
+      <file name="PearPackageXml.php" role="php" />
      </dir> <!-- /lib/Components/Runner -->
      <file name="Config.php" role="php" />
      <file name="Configs.php" role="php" />
      <file name="Constants.php" role="php">
-      <replace from="@data_dir@" to="data_dir" type="pear-config"/>
+      <tasks:replace from="@data_dir@" to="data_dir" type="pear-config" />
      </file>
      <file name="Dependencies.php" role="php" />
      <file name="Exception.php" role="php" />
@@ -85,7 +89,7 @@
    </dir> <!-- /lib -->
    <dir name="script">
     <file name="horde-components.php" role="script">
-     <replace from="@php_dir@" to="php_dir" type="pear-config"/>
+     <tasks:replace from="@php_dir@" to="php_dir" type="pear-config" />
     </file>
    </dir> <!-- /script -->
    <dir name="test">
        <file name="pear.php.net.channel.xml" role="test" />
        <file name="pear.phpunit.de.channel.xml" role="test" />
       </dir> <!-- /test/Components/fixture/channels -->
+      <dir name="framework">
+       <dir name="Dependency">
+        <dir name="lib">
+         <file name="Dependency.php" role="test" />
+        </dir> <!-- /test/Components/fixture/framework/Dependency/lib -->
+       </dir> <!-- /test/Components/fixture/framework/Dependency -->
+       <dir name="Install">
+        <dir name="lib">
+         <file name="Install.php" role="test" />
+        </dir> <!-- /test/Components/fixture/framework/Install/lib -->
+       </dir> <!-- /test/Components/fixture/framework/Install -->
+      </dir> <!-- /test/Components/fixture/framework -->
+      <dir name="packages">
+       <file name="Console_Getopt-1.9.1.tgz" role="test" />
+       <file name="PEAR-1.9.1.tgz" role="test" />
+      </dir> <!-- /test/Components/fixture/packages -->
+      <dir name="pear">
+       <dir name="Console_Getopt">
+        <dir name="lib">
+         <file name="Console.php" role="test" />
+        </dir> <!-- /test/Components/fixture/pear/Console_Getopt/lib -->
+       </dir> <!-- /test/Components/fixture/pear/Console_Getopt -->
+       <dir name="PEAR">
+        <dir name="lib">
+         <file name="PEAR.php" role="test" />
+        </dir> <!-- /test/Components/fixture/pear/PEAR/lib -->
+       </dir> <!-- /test/Components/fixture/pear/PEAR -->
+      </dir> <!-- /test/Components/fixture/pear -->
       <dir name="simple">
        <dir name="lib">
         <file name="New.php" role="test" />
         <file name="Second.php" role="test" />
        </dir> <!-- /test/Components/fixture/simple/lib -->
       </dir> <!-- /test/Components/fixture/simple -->
+      <dir name="templates">
+       <file name="hudson-component-build.xml.template" role="test" />
+       <file name="hudson-component-config.xml.template" role="test" />
+       <file name="hudson-component-phpunit.xml.template" role="test" />
+      </dir> <!-- /test/Components/fixture/templates -->
      </dir> <!-- /test/Components/fixture -->
      <dir name="Integration">
       <dir name="Components">
        <dir name="Module">
         <file name="CiSetupTest.php" role="test" />
+        <file name="InstallerTest.php" role="test" />
+        <file name="PearPackageXmlTest.php" role="test" />
        </dir> <!-- /test/Components/Integration/Components/Module -->
       </dir> <!-- /test/Components/Integration/Components -->
       <file name="ComponentsTest.php" role="test" />
    <install as="Components/Module.php" name="lib/Components/Module.php" />
    <install as="Components/Modules.php" name="lib/Components/Modules.php" />
    <install as="Components/Output.php" name="lib/Components/Output.php" />
+   <install as="Components/Config/Application.php" name="lib/Components/Config/Application.php" />
    <install as="Components/Config/Cli.php" name="lib/Components/Config/Cli.php" />
    <install as="Components/Dependencies/Injector.php" name="lib/Components/Dependencies/Injector.php" />
    <install as="Components/Module/Base.php" name="lib/Components/Module/Base.php" />
    <install as="Components/Module/Distribute.php" name="lib/Components/Module/Distribute.php" />
    <install as="Components/Module/Installer.php" name="lib/Components/Module/Installer.php" />
    <install as="Components/Module/PearPackageXml.php" name="lib/Components/Module/PearPackageXml.php" />
+   <install as="Components/Pear/Factory.php" name="lib/Components/Pear/Factory.php" />
    <install as="Components/Pear/InstallLocation.php" name="lib/Components/Pear/InstallLocation.php" />
    <install as="Components/Pear/Package.php" name="lib/Components/Pear/Package.php" />
+   <install as="Components/Runner/CiPrebuild.php" name="lib/Components/Runner/CiPrebuild.php" />
    <install as="Components/Runner/CiSetup.php" name="lib/Components/Runner/CiSetup.php" />
    <install as="Components/Runner/Distribute.php" name="lib/Components/Runner/Distribute.php" />
    <install as="Components/Runner/Installer.php" name="lib/Components/Runner/Installer.php" />
+   <install as="Components/Runner/PearPackageXml.php" name="lib/Components/Runner/PearPackageXml.php" />
    <install as="horde-components" name="script/horde-components.php" />
    <install as="Components/AllTests.php" name="test/Components/AllTests.php" />
    <install as="Components/Autoload.php" name="test/Components/Autoload.php" />
    <install as="Components/fixture/channels/pear.horde.org.channel.xml" name="test/Components/fixture/channels/pear.horde.org.channel.xml" />
    <install as="Components/fixture/channels/pear.php.net.channel.xml" name="test/Components/fixture/channels/pear.php.net.channel.xml" />
    <install as="Components/fixture/channels/pear.phpunit.de.channel.xml" name="test/Components/fixture/channels/pear.phpunit.de.channel.xml" />
+   <install as="Components/fixture/framework/Dependency/lib/Dependency.php" name="test/Components/fixture/framework/Dependency/lib/Dependency.php" />
+   <install as="Components/fixture/framework/Install/lib/Install.php" name="test/Components/fixture/framework/Install/lib/Install.php" />
+   <install as="Components/fixture/packages/Console_Getopt-1.9.1.tgz" name="test/Components/fixture/packages/Console_Getopt-1.9.1.tgz" />
+   <install as="Components/fixture/packages/PEAR-1.9.1.tgz" name="test/Components/fixture/packages/PEAR-1.9.1.tgz" />
+   <install as="Components/fixture/pear/Console_Getopt/lib/Console.php" name="test/Components/fixture/pear/Console_Getopt/lib/Console.php" />
+   <install as="Components/fixture/pear/PEAR/lib/PEAR.php" name="test/Components/fixture/pear/PEAR/lib/PEAR.php" />
    <install as="Components/fixture/simple/lib/New.php" name="test/Components/fixture/simple/lib/New.php" />
    <install as="Components/fixture/simple/lib/Second.php" name="test/Components/fixture/simple/lib/Second.php" />
+   <install as="Components/fixture/templates/hudson-component-build.xml.template" name="test/Components/fixture/templates/hudson-component-build.xml.template" />
+   <install as="Components/fixture/templates/hudson-component-config.xml.template" name="test/Components/fixture/templates/hudson-component-config.xml.template" />
+   <install as="Components/fixture/templates/hudson-component-phpunit.xml.template" name="test/Components/fixture/templates/hudson-component-phpunit.xml.template" />
    <install as="Components/Integration/ComponentsTest.php" name="test/Components/Integration/ComponentsTest.php" />
    <install as="Components/Integration/Components/Module/CiSetupTest.php" name="test/Components/Integration/Components/Module/CiSetupTest.php" />
+   <install as="Components/Integration/Components/Module/InstallerTest.php" name="test/Components/Integration/Components/Module/InstallerTest.php" />
+   <install as="Components/Integration/Components/Module/PearPackageXmlTest.php" name="test/Components/Integration/Components/Module/PearPackageXmlTest.php" />
    <install as="Components/Stub/Cli.php" name="test/Components/Stub/Cli.php" />
    <install as="Components/Stub/Parser.php" name="test/Components/Stub/Parser.php" />
   </filelist>
     <release>alpha</release>
     <api>alpha</api>
    </stability>
-   <date>2010-10-03</date>
+   <date>2010-10-12</date>
    <license uri="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">LGPL</license>
    <notes>
 * Initial release