The PEAR_PackageFileManager class uses a plugin system to generate the list of files in a package. This allows both standard recursive directory parsing (plugin type file) and more intelligent options such as the CVS browser PEAR_PackageFileManager_Cvs, which grabs all files in a local CVS checkout to create the list, ignoring any other local files.
Other options include specifying roles for file extensions (all .php files are role="php", for example), roles for directories (all directories named "tests" are given role="tests" by default), and exceptions. Exceptions are specific pathnames with * and ? wildcards that match a default role, but should have another. For example, perhaps a debug.tpl template would normally be data, but should be included in the docs role. Along these lines, to exclude files entirely, use the ignore option.
Required options for a release include version, baseinstalldir, state, and packagedirectory (the full path to the local location of the package to create a package.xml file for)
Example usage:
1 <?php 2 require_once('PEAR/PackageFileManager.php'); 3 $packagexml = new PEAR_PackageFileManager; 4 $e = $packagexml->setOptions( 5 array('baseinstalldir' => 'PhpDocumentor', 6 'version' => '1.2.1', 7 'packagedirectory' => 'C:/Web Pages/chiara/phpdoc2/', 8 'state' => 'stable', 9 'filelistgenerator' => 'cvs', // generate from cvs, use file for directory 10 'notes' => 'We\'ve implemented many new and exciting features', 11 'ignore' => array('TODO', 'tests/'), // ignore TODO, all files in tests/ 12 'installexceptions' => array('phpdoc' => '/*'), // baseinstalldir ="/" for phpdoc 13 'dir_roles' => array('tutorials' => 'doc'), 14 'exceptions' => array('README' => 'doc', // README would be data, now is doc 15 'PHPLICENSE.txt' => 'doc'))); // same for the license 16 if (PEAR::isError($e)) { 17 echo $e->getMessage(); 18 die(); 19 } 20 $e = $test->addPlatformException('pear-phpdoc.bat', 'windows'); 21 if (PEAR::isError($e)) { 22 echo $e->getMessage(); 23 exit; 24 } 25 $packagexml->addRole('pkg', 'doc'); // add a new role mapping 26 if (PEAR::isError($e)) { 27 echo $e->getMessage(); 28 exit; 29 } 30 // replace @PHP-BIN@ in this file with the path to php executable! pretty neat 31 $e = $test->addReplacement('pear-phpdoc', 'pear-config', '@PHP-BIN@', 'php_bin'); 32 if (PEAR::isError($e)) { 33 echo $e->getMessage(); 34 exit; 35 } 36 $e = $test->addReplacement('pear-phpdoc.bat', 'pear-config', '@PHP-BIN@', 'php_bin'); 37 if (PEAR::isError($e)) { 38 echo $e->getMessage(); 39 exit; 40 } 41 // note use of debugPackageFile() - this is VERY important 42 if (isset($_GET['make']) || $_SERVER['argv'][1] == 'make') { 43 $e = $packagexml->writePackageFile(); 44 } else { 45 $e = $packagexml->debugPackageFile(); 46 } 47 if (PEAR::isError($e)) { 48 echo $e->getMessage(); 49 die(); 50 } 51 ?> |
In addition, a package.xml file can now be generated from scratch, with the usage of new options package, summary, description, and the use of the addMaintainer() method