From 54c83b037cb8daed4a75b0038b4c81ba23fdcf62 Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Mon, 28 May 2007 15:20:31 +0000 Subject: [PATCH] - Implement auto/optional for pack -p --- ext/phar/Makefile.frag | 2 +- ext/phar/phar.php | 25 ++++++++++++++++++++++++- ext/phar/phar/pharcommand.inc | 33 +++++++++++++++++++++++++++++++-- 3 files changed, 56 insertions(+), 4 deletions(-) diff --git a/ext/phar/Makefile.frag b/ext/phar/Makefile.frag index 682c8ca07e..734f0e6d58 100755 --- a/ext/phar/Makefile.frag +++ b/ext/phar/Makefile.frag @@ -5,6 +5,6 @@ $(srcdir)/phar_path_check.c: $(srcdir)/phar_path_check.re pharcmd: $(builddir)/phar.phar $(builddir)/phar.phar: $(srcdir)/phar/*.inc $(srcdir)/phar/*.php - php -d phar.readonly=0 $(srcdir)/phar.php pack -f $(builddir)/phar.phar -a pharcommand -c auto -x CVS -s $(srcdir)/phar/phar.php -h sha1 $(srcdir)/phar/ + php -d phar.readonly=0 $(srcdir)/phar.php pack -f $(builddir)/phar.phar -a pharcommand -c auto -x CVS -p optional -s $(srcdir)/phar/phar.php -h sha1 $(srcdir)/phar/ @chmod +x $(builddir)/phar.phar diff --git a/ext/phar/phar.php b/ext/phar/phar.php index 067ecc002d..487e591855 100644 --- a/ext/phar/phar.php +++ b/ext/phar/phar.php @@ -369,6 +369,29 @@ class PharCommand extends CLICommand return substr($haystack, -strlen($needle)) == $needle; } + static function cli_arg_typ_loader($arg) + { + if ($arg == 'auto') + { + $found = NULL; + foreach(split("\n", `pear list-files PHP_Archive`) as $ent) + { + $matches = NULL; + if (preg_match(",^php[ \t]+([^ \t].*pear[\\\\/]PHP[\\\\/]Archive.php)$,", $ent, $matches)) + { + $found = $matches[1]; + break; + } + } + if (!isset($found) && $arg != 'optional') { + echo "Pear package PHP_Archive or Archive.php class file not found.\n"; + exit(1); + } + $arg = $found; + } + return self::cli_arg_typ_file($arg); + } + static function cli_arg_typ_pharnew($arg) { $pharfile = self::cli_arg_typ_filenew($arg); @@ -459,7 +482,7 @@ class PharCommand extends CLICommand 'f' => array('typ'=>'pharnew', 'val'=>NULL, 'required'=>1, 'inf'=>' Specifies the phar file to work on.'), 'h' => array('typ'=>'select', 'val'=>NULL, 'inf'=>' Selects the hash algorithmn.', 'select'=>array('md5'=>'MD5','sha1'=>'SHA1','sha256'=>'SHA256','sha512'=>'SHA512')), 'i' => array('typ'=>'regex', 'val'=>NULL, 'inf'=>' Specifies a regular expression for input files.'), - 'p' => array('typ'=>'file', 'val'=>NULL, 'inf'=>' Location of PHP_Archive class file (pear list-files PHP_Archive).'), + 'p' => array('typ'=>'loader', 'val'=>NULL, 'inf'=>' Location of PHP_Archive class file (pear list-files PHP_Archive). You can use \'auto\' or \'optional\' to locate it automatically using the mentioned pear command. When using \'optional\' the command does not error out when the class file cannot be located.'), 's' => array('typ'=>'file', 'val'=>NULL, 'inf'=>' Select the stub file (excluded from list of input files/dirs).'), 'x' => array('typ'=>'regex', 'val'=>NULL, 'inf'=>' Regular expression for input files to exclude.'), '' => array('typ'=>'any', 'val'=>NULL, 'required'=>1, 'inf'=>' Any number of input files and directories.'), diff --git a/ext/phar/phar/pharcommand.inc b/ext/phar/phar/pharcommand.inc index 2df4189f80..5d19abdec2 100755 --- a/ext/phar/phar/pharcommand.inc +++ b/ext/phar/phar/pharcommand.inc @@ -109,9 +109,9 @@ class PharCommand extends CLICommand 'inf' => ' Meta data to store with entry (serialized php data).' ), 'p' => array( - 'typ' => 'file', + 'typ' => 'loader', 'val' => NULL, - 'inf' => ' Location of PHP_Archive class file (pear list-files PHP_Archive).', + 'inf' => ' Location of PHP_Archive class file (pear list-files PHP_Archive). You can use \'auto\' or \'optional\' to locate it automatically using the mentioned pear command. When using \'optional\' the command does not error out when the class file cannot be located.', ), 's' => array( 'typ' => 'file', @@ -176,6 +176,35 @@ class PharCommand extends CLICommand return substr($haystack, -strlen($needle)) == $needle; } // }}} + // {{{ static function cli_arg_typ_loader + /** + * Argument type loader + * + * @param string $arg Either 'auto' or an filename that contains class + * PHP_Archive + * @param string $cfg Configuration to pass to a new file + * @param string $key The key + * @return string $arg The argument. + */ + static function cli_arg_typ_loader($arg, $cfg, $key) + { + if ($arg == 'auto' || $arg == 'optional') { + $found = NULL; + foreach(split("\n", `pear list-files PHP_Archive`) as $ent) { + $matches = NULL; + if (preg_match(",^php[ \t]+([^ \t].*pear[\\\\/]PHP[\\\\/]Archive.php)$,", $ent, $matches)) { + $found = $matches[1]; + break; + } + } + if (!isset($found) && $arg != 'optional') { + self::error("Pear package PHP_Archive or Archive.php class file not found.\n"); + } + $arg = $found; + } + return self::cli_arg_typ_file($arg); + } + // }}} // {{{ static function cli_arg_typ_pharnew /** * Argument type new phar -- 2.50.1