summaryrefslogtreecommitdiff
path: root/pear
diff options
context:
space:
mode:
authorStig Bakken <ssb@php.net>2002-01-02 17:11:34 +0000
committerStig Bakken <ssb@php.net>2002-01-02 17:11:34 +0000
commit4fc3baefd2d141e4487f476ab44c92c32fcfe1d9 (patch)
treea73a04ceb5c7f1b981ebd00e0e949fe739352be6 /pear
parentd379d735fb4c90df47a50ca06f172536be3c6f18 (diff)
downloadphp-git-4fc3baefd2d141e4487f476ab44c92c32fcfe1d9.tar.gz
* start splitting "pear" command into "pear" and "pear-get"
Diffstat (limited to 'pear')
-rw-r--r--pear/Makefile.in5
-rw-r--r--pear/scripts/pear-get.in329
-rw-r--r--pear/scripts/pear.in34
3 files changed, 357 insertions, 11 deletions
diff --git a/pear/Makefile.in b/pear/Makefile.in
index c05c0ef1ae..8a322c2f8a 100644
--- a/pear/Makefile.in
+++ b/pear/Makefile.in
@@ -147,7 +147,7 @@ BUILD_FILES = \
dynlib.m4 \
acinclude.m4
-bin_SCRIPTS = phpize php-config pear pearize phptar
+bin_SCRIPTS = phpize php-config pear pear-get pearize phptar
install-build:
@echo "Installing build environment"
@@ -193,6 +193,9 @@ Makefile: Makefile.in $(top_builddir)/config.status
scripts/pear: scripts/pear.in $(top_builddir)/config.status
(cd ..;CONFIG_FILES=pear/scripts/pear CONFIG_HEADERS= $(top_builddir)/config.status)
+scripts/pear-get: scripts/pear-get.in $(top_builddir)/config.status
+ (cd ..;CONFIG_FILES=pear/scripts/pear-get CONFIG_HEADERS= $(top_builddir)/config.status)
+
scripts/phpize: scripts/phpize.in $(top_builddir)/config.status
(cd ..;CONFIG_FILES=pear/scripts/phpize CONFIG_HEADERS= $(top_builddir)/config.status)
diff --git a/pear/scripts/pear-get.in b/pear/scripts/pear-get.in
new file mode 100644
index 0000000000..7e6ca9fa3d
--- /dev/null
+++ b/pear/scripts/pear-get.in
@@ -0,0 +1,329 @@
+#!@prefix@/bin/php -Cq
+<?php // -*- PHP -*-
+//
+// +----------------------------------------------------------------------+
+// | PHP Version 4 |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2002 The PHP Group |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 2.02 of the PHP license, |
+// | that is bundled with this package in the file LICENSE, and is |
+// | available at through the world-wide-web at |
+// | http://www.php.net/license/2_02.txt. |
+// | If you did not receive a copy of the PHP license and are unable to |
+// | obtain it through the world-wide-web, please send a note to |
+// | license@php.net so we can mail you a copy immediately. |
+// +----------------------------------------------------------------------+
+// | Authors: Stig Bakken <ssb@fast.no> |
+// | Tomas V.V.Cox <cox@idecnet.com> |
+// +----------------------------------------------------------------------+
+//
+
+
+/*
+
+command structure:
+
+* list available packages
+* list not-installed packages
+* list upgrades
+* list packages (by author/category/state)
+
+* installation commands:
+** install latest stable
+** install specific release
+
+* package generation commands:
+
+*/
+
+require_once 'PEAR.php';
+require_once 'PEAR/Common.php';
+require_once 'PEAR/Config.php';
+require_once 'PEAR/Remote.php';
+require_once 'PEAR/Registry.php';
+require_once 'Console/Getopt.php';
+
+error_reporting(E_ALL & ~E_NOTICE);
+
+PEAR::setErrorHandling(PEAR_ERROR_PRINT, "pear: %s\n");
+
+// {{{ config file and option parsing
+
+$options = Console_Getopt::getopt($argv, "c:C:d:D:h?qu:v");
+if (PEAR::isError($options)) {
+ usage($options);
+}
+
+if (OS_WINDOWS) {
+ $pear_default_config = PHP_SYSCONFDIR.DIRECTORY_SEPARATOR.'pearsys.ini';
+ $pear_user_config = PHP_SYSCONFDIR.DIRECTORY_SEPARATOR.'pear.ini';
+} else {
+ $pear_default_config = PHP_SYSCONFDIR.DIRECTORY_SEPARATOR.'pear.conf';
+ $pear_user_config = getenv('HOME').DIRECTORY_SEPARATOR.'.pearrc';
+}
+
+$opts = $options[0];
+
+foreach ($opts as $opt) {
+ switch ($opt[0]) {
+ case 'c':
+ $pear_user_config = $opt[1];
+ break;
+ case 'C':
+ $pear_default_config = $opt[1];
+ break;
+ }
+}
+
+$config = new PEAR_Config($pear_user_config, $pear_default_config);
+$verbose = 1;
+
+foreach ($opts as $opt) {
+ $param = $opt[1];
+ switch ($opt[0]) {
+ case 'd':
+ list($key, $value) = explode('=', $param);
+ $config->set($key, $value);
+ break;
+ case 'D':
+ list($key, $value) = explode('=', $param);
+ $config->set($key, $value, true);
+ break;
+ case 'u':
+ $config->toDefault($param);
+ break;
+ case 'v':
+ $verbose++;
+ break;
+ case 'q':
+ $verbose--;
+ break;
+ }
+}
+
+$fallback_config = array(
+ 'master_server' => 'pear.php.net',
+ 'php_dir' => PEAR_INSTALL_DIR,
+ 'ext_dir' => PEAR_EXTENSION_DIR,
+ 'doc_dir' => '',
+ 'verbose' => true,
+);
+$fallback_done = array();
+
+foreach ($fallback_config as $key => $value) {
+ if (!$config->isDefined($key)) {
+ $config->set($key, $value);
+ $fallback_done[$key] = true;
+ }
+}
+
+//$verbose = $config->get("verbose");
+$script_dir = $config->get("php_dir");
+$ext_dir = $config->get("ext_dir");
+$doc_dir = $config->get("doc_dir");
+
+$command = (isset($options[1][1])) ? $options[1][1] : null;
+$rest = array_slice($options[1], 2);
+
+$command_options = array(
+ "install" => "fr",
+ "uninstall" => "fr",
+ "upgrade" => "fr",
+);
+
+if (isset($command_options[$command])) {
+ $tmp = Console_Getopt::getopt($rest, $command_options[$command]);
+ if (PEAR::isError($tmp)) {
+ usage($tmp);
+ }
+ $cmdopts = $tmp[0];
+ $cmdargs = $tmp[1];
+} else {
+ $cmdopts = array();
+ $cmdargs = $rest;
+}
+
+// }}}
+
+switch ($command) {
+
+ // {{{ install, upgrade
+
+ case 'install': case 'upgrade': {
+ include_once 'PEAR/Installer.php';
+ $pkgfile = $cmdargs[0];
+ $installer =& new PEAR_Installer($script_dir, $ext_dir, $doc_dir);
+ $installer->setErrorHandling(PEAR_ERROR_DIE,
+ basename($pkgfile) . ": %s\n");
+ $installer->debug = $verbose;
+ $install_options = array();
+ if ($command == 'upgrade') {
+ $install_options['upgrade'] = true;
+ }
+ foreach ($cmdopts as $opt) {
+ switch ($opt[0]) {
+ case 'r':
+ // This option is for use by rpm and other package
+ // tools that can install files etc. by itself, but
+ // still needs to register the package as installed in
+ // PEAR's local registry.
+ $install_options['register_only'] = true;
+ break;
+ case 'f':
+ $install_options['force'] = true;
+ break;
+ }
+ }
+ if ($installer->install($pkgfile, $install_options, $config)) {
+ print "install ok\n";
+ } else {
+ print "install failed\n";
+ }
+ break;
+ }
+
+ // }}}
+ // {{{ uninstall
+ case 'uninstall': {
+ include_once 'PEAR/Installer.php';
+ $pkgfile = $cmdargs[0];
+ $installer =& new PEAR_Installer($script_dir, $ext_dir, $doc_dir);
+ $installer->setErrorHandling(PEAR_ERROR_DIE,
+ basename($pkgfile) . ": %s\n");
+ $installer->debug = $verbose;
+ $uninstall_options = array();
+ foreach ($cmdopts as $opt) {
+ switch ($opt[0]) {
+ case 'r':
+ $uninstall_options['register_only'] = true;
+ break;
+ case 'f':
+ $uninstall_options['force'] = true;
+ break;
+ }
+ }
+ if ($installer->uninstall($pkgfile, $uninstall_options)) {
+ print "uninstall ok\n";
+ } else {
+ print "uninstall failed\n";
+ }
+ break;
+ }
+ // }}}
+ // {{{ list
+
+ case 'list': {
+ $remote = new PEAR_Remote($config);
+ $result = $remote->call('package.listAll');
+ $i = $j = 0;
+ heading("Available packages");
+ foreach ($result as $package => $info) {
+ if ($i++ % 20 == 0) {
+ if ($j++ > 0) {
+ print "\n";
+ }
+ printf("%-20s %-10s %-15s %s\n",
+ "Package", "Stable", "Lead", "Category");
+ print str_repeat("-", 75)."\n";
+ }
+ if (empty($info['stable'])) {
+ $info['stable'] = '(none)';
+ }
+ $stable = (string)$info['stable'];
+ printf("%-20s %-10s %-15s %s\n", $package,
+ $info['stable'], $info['lead'], $info['category']);
+ }
+ break;
+ }
+
+ // }}}
+ default: {
+ if (!$store_default_config && !$store_user_config) {
+ usage();
+ }
+ break;
+ }
+}
+
+// {{{ usage()
+
+function usage($error = null)
+{
+ $stderr = fopen('php://stderr', 'w');
+ if (PEAR::isError($error)) {
+ fputs($stderr, $error->getMessage());
+ } elseif ($error !== null) {
+ fputs($stderr, $error);
+ }
+ fputs($stderr,
+ "Usage: pear-get [options] command [command-options] <parameters>\n".
+ "Options:\n".
+ " -v increase verbosity level (default 1)\n".
+ " -q be quiet, decrease verbosity level\n".
+ " -c file find user configuration in `file'\n".
+ " -C file find system configuration in `file'\n".
+ " -d foo=bar set user config variable `foo' to `bar'\n".
+ " -D foo=bar set system config variable `foo' to `bar'\n".
+ " -u foo unset `foo' in the user configuration\n".
+ " -h, -? display help/usage (this message)\n".
+ "Commands:\n".
+ " help [command]\n".
+ " install [-r] <package file>\n".
+ " uninstall [-r] <package name>\n".
+ " list\n".
+ " info\n".
+ "\n");
+ fclose($stderr);
+ exit;
+}
+
+// }}}
+// {{{ present_array()
+
+function present_array(&$arr, $keys = null)
+{
+ if ($keys === null) {
+ $keys = array_keys($arr);
+ }
+ $longest_key = max(array_map("strlen", array_keys($arr))) + 2;
+ $format_string = "%{$longest_key}s : %s\n";
+ foreach ($keys as $k) {
+ if (is_array($arr[$k])) {
+ foreach ($arr[$k] as $i => $value) {
+ $x = "$k #$i";
+ $cont = array();
+ foreach(array_keys($value) as $val) {
+ $cont[] = "$val=" . $value[$val];
+ }
+ $v = implode(", ", $cont);
+ printf($format_string, $x, $v);
+ }
+ continue;
+ } else {
+ $v = $arr[$k];
+ printf($format_string, $k, $v);
+ }
+ }
+}
+
+// }}}
+// {{{ heading()
+
+function heading($text)
+{
+ $l = strlen(trim($text));
+ print rtrim($text) . "\n" . str_repeat("=", $l) . "\n";
+}
+
+// }}}
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
+
+?>
diff --git a/pear/scripts/pear.in b/pear/scripts/pear.in
index 76a365ea57..40c818a860 100644
--- a/pear/scripts/pear.in
+++ b/pear/scripts/pear.in
@@ -52,6 +52,7 @@ error_reporting(E_ALL & ~E_NOTICE);
PEAR::setErrorHandling(PEAR_ERROR_PRINT, "pear: %s\n");
// {{{ config file and option parsing
+
$options = Console_Getopt::getopt($argv, "c:C:d:D:h?sSqu:v");
if (PEAR::isError($options)) {
usage($options);
@@ -168,7 +169,6 @@ if (isset($command_options[$command])) {
$cmdargs = $rest;
}
-
// }}}
switch ($command) {
@@ -288,14 +288,14 @@ switch ($command) {
}
// }}}
- // {{{ list-available
+ // {{{ remote-list
- case 'list-available': {
+ case 'remote-list': {
$remote = new PEAR_Remote($config);
$result = $remote->call('package.listAll');
$i = $j = 0;
heading("Available packages");
- foreach ($result as $package) {
+ foreach ($result as $package => $info) {
if ($i++ % 20 == 0) {
if ($j++ > 0) {
print "\n";
@@ -304,10 +304,12 @@ switch ($command) {
"Package", "Stable", "Lead", "Category");
print str_repeat("-", 75)."\n";
}
- $stable = $package['stable'];
- printf("%-20s %-10s %-15s %s\n", $package['name'],
- $stable ? $stable : "???",
- $package['lead'], $package['category']);
+ if (empty($info['stable'])) {
+ $info['stable'] = '(none)';
+ }
+ $stable = (string)$info['stable'];
+ printf("%-20s %-10s %-15s %s\n", $package,
+ $info['stable'], $info['lead'], $info['category']);
}
break;
}
@@ -332,6 +334,17 @@ switch ($command) {
}
// }}}
+ // {{{ upload-release
+
+ case 'upload-release': {
+ if (sizeof($cmdargs) < 1) {
+
+ }
+ $tarball = $cmdargs[0];
+
+ }
+
+ // }}}
default: {
if (!$store_default_config && !$store_user_config) {
usage();
@@ -360,7 +373,7 @@ function usage($error = null)
" -d foo=bar set user config variable `foo' to `bar'\n".
" -D foo=bar set system config variable `foo' to `bar'\n".
" -s store user configuration\n".
- " -s store system configuration\n".
+ " -S store system configuration\n".
" -u foo unset `foo' in the user configuration\n".
" -h, -? display help/usage (this message)\n".
"Commands:\n".
@@ -369,9 +382,10 @@ function usage($error = null)
" uninstall [-r] <package name>\n".
" package [package info file]\n".
" list-installed\n".
- " list-available\n".
+ " remote-list\n".
" info\n".
" show-config\n".
+ " upload-release\n".
"\n");
fclose($stderr);
exit;