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
PEAR_PackageFileManager