[php-pear] move metadata to /var/lib/pear

Remi Collet remi at fedoraproject.org
Wed Oct 24 06:45:46 UTC 2012


commit 0b521dc0957e68850063faec6a843ccc122eb83b
Author: Remi Collet <remi at fedoraproject.org>
Date:   Wed Oct 24 08:45:38 2012 +0200

    move metadata to /var/lib/pear

 install-pear.php        |    9 ++-
 macros.pear             |    1 +
 php-pear-metadata.patch |  244 +++++++++++++++++++++++++++++++++++++++++++++++
 php-pear.spec           |   44 +++++++--
 4 files changed, 286 insertions(+), 12 deletions(-)
---
diff --git a/install-pear.php b/install-pear.php
index c06dc04..facb6ee 100644
--- a/install-pear.php
+++ b/install-pear.php
@@ -72,6 +72,9 @@ for ($i = 0; $i < sizeof($argv); $i++) {
     } elseif ($arg == '-o' || $arg == '--download') {
         $download_dir = $argv[$i+1];
         $i++;
+    } elseif ($arg == '-m' || $arg == '--metadata') {
+        $metadata_dir = $argv[$i+1];
+        $i++;
     } elseif ($arg == '-t' || $arg == '--temp') {
         $temp_dir = $argv[$i+1];
         $i++;
@@ -159,6 +162,10 @@ if (!empty($test_dir)) {
 if (!empty($with_dir)) {
     $ds = DIRECTORY_SEPARATOR;
     $config->set('php_dir', $with_dir, 'default');
+    // Metadata
+    if (!empty($metadata_dir)) {
+        $config->set('metadata_dir', $metadata_dir, 'default');
+    }
     if (empty($doc_dir)) {
         $config->set('doc_dir', $with_dir . $ds . 'doc', 'default');
     }
@@ -230,7 +237,7 @@ $options['upgrade'] = true;
 $install_root = getenv('INSTALL_ROOT');
 if (!empty($install_root)) {
     $options['packagingroot'] = $install_root;
-    $reg = &new PEAR_Registry($options['packagingroot']);
+    $reg = &new PEAR_Registry($options['packagingroot'], false, false, $metadata_dir);
 } else {
     $reg = $config->getRegistry('default');
 }
diff --git a/macros.pear b/macros.pear
index deabb08..5862d80 100644
--- a/macros.pear
+++ b/macros.pear
@@ -13,6 +13,7 @@
 %pear_datadir %(%{__pear} config-get data_dir 2> /dev/null || echo undefined)
 %pear_cfgdir  %(%{__pear} config-get cfg_dir  2> /dev/null || echo undefined)
 %pear_wwwdir  %(%{__pear} config-get www_dir  2> /dev/null || echo undefined)
+%pear_metadir %(%{__pear} config-get metadata_dir 2> /dev/null || echo undefined)
 
 #
 # Define PECL directories used in php-pecl-* spec files:
diff --git a/php-pear-metadata.patch b/php-pear-metadata.patch
new file mode 100644
index 0000000..137edcc
--- /dev/null
+++ b/php-pear-metadata.patch
@@ -0,0 +1,244 @@
+diff -up PEAR/Command/Install.php.metadata PEAR/Command/Install.php
+--- PEAR/Command/Install.php.metadata	2011-07-07 00:11:24.000000000 +0200
++++ PEAR/Command/Install.php	2012-09-26 16:02:29.829393773 +0200
+@@ -556,7 +556,13 @@ Run post-installation scripts in package
+             $packrootphp_dir = $this->installer->_prependPath(
+                 $this->config->get('php_dir', null, 'pear.php.net'),
+                 $options['packagingroot']);
+-            $instreg = new PEAR_Registry($packrootphp_dir); // other instreg!
++            $metadata_dir = $this->config->get('metadata_dir', null, 'pear.php.net');
++            if ($metadata_dir) {
++                $metadata_dir = $this->installer->_prependPath(
++                    $metadata_dir,
++                    $options['packagingroot']);
++            }
++            $instreg = new PEAR_Registry($packrootphp_dir, false, false, $metadata_dir); // other instreg!
+ 
+             if ($this->config->get('verbose') > 2) {
+                 $this->ui->outputData('using package root: ' . $options['packagingroot']);
+diff -up PEAR/Config.php.metadata PEAR/Config.php
+--- PEAR/Config.php.metadata	2011-07-07 00:11:24.000000000 +0200
++++ PEAR/Config.php	2012-09-26 16:02:29.831393779 +0200
+@@ -87,6 +87,13 @@ if (getenv('PHP_PEAR_INSTALL_DIR')) {
+     }
+ }
+ 
++// Default for metadata_dir
++if (getenv('PHP_PEAR_METADATA_DIR')) {
++    define('PEAR_CONFIG_DEFAULT_METADATA_DIR', getenv('PHP_PEAR_METADATA_DIR'));
++} else {
++    define('PEAR_CONFIG_DEFAULT_METADATA_DIR', '');
++}
++
+ // Default for ext_dir
+ if (getenv('PHP_PEAR_EXTENSION_DIR')) {
+     define('PEAR_CONFIG_DEFAULT_EXT_DIR', getenv('PHP_PEAR_EXTENSION_DIR'));
+@@ -398,6 +405,13 @@ class PEAR_Config extends PEAR
+             'prompt' => 'PEAR directory',
+             'group' => 'File Locations',
+             ),
++        'metadata_dir' => array(
++            'type' => 'directory',
++            'default' => PEAR_CONFIG_DEFAULT_METADATA_DIR,
++            'doc' => 'directory where metadata files are installed (registry, filemap, channels, ...)',
++            'prompt' => 'PEAR metadata directory',
++            'group' => 'File Locations',
++            ),
+         'ext_dir' => array(
+             'type' => 'directory',
+             'default' => PEAR_CONFIG_DEFAULT_EXT_DIR,
+@@ -647,7 +661,9 @@ class PEAR_Config extends PEAR
+             $this->configuration['default'][$key] = $info['default'];
+         }
+ 
+-        $this->_registry['default'] = &new PEAR_Registry($this->configuration['default']['php_dir']);
++        $this->_registry['default'] = &new PEAR_Registry(
++            $this->configuration['default']['php_dir'], false, false,
++            $this->configuration['default']['metadata_dir']);
+         $this->_registry['default']->setConfig($this, false);
+         $this->_regInitialized['default'] = false;
+         //$GLOBALS['_PEAR_Config_instance'] = &$this;
+@@ -754,7 +770,9 @@ class PEAR_Config extends PEAR
+         $this->configuration[$layer] = $data;
+         $this->_setupChannels();
+         if (!$this->_noRegistry && ($phpdir = $this->get('php_dir', $layer, 'pear.php.net'))) {
+-            $this->_registry[$layer] = &new PEAR_Registry($phpdir);
++            $this->_registry[$layer] = &new PEAR_Registry(
++                $phpdir, false, false,
++                $this->get('metadata_dir', $layer, 'pear.php.net'));
+             $this->_registry[$layer]->setConfig($this, false);
+             $this->_regInitialized[$layer] = false;
+         } else {
+@@ -911,7 +929,9 @@ class PEAR_Config extends PEAR
+ 
+         $this->_setupChannels();
+         if (!$this->_noRegistry && ($phpdir = $this->get('php_dir', $layer, 'pear.php.net'))) {
+-            $this->_registry[$layer] = &new PEAR_Registry($phpdir);
++            $this->_registry[$layer] = &new PEAR_Registry(
++                $phpdir, false, false,
++                $this->get('metadata_dir', $layer, 'pear.php.net'));
+             $this->_registry[$layer]->setConfig($this, false);
+             $this->_regInitialized[$layer] = false;
+         } else {
+@@ -1604,7 +1624,9 @@ class PEAR_Config extends PEAR
+ 
+                 if (!is_object($this->_registry[$layer])) {
+                     if ($phpdir = $this->get('php_dir', $layer, 'pear.php.net')) {
+-                        $this->_registry[$layer] = &new PEAR_Registry($phpdir);
++                        $this->_registry[$layer] = &new PEAR_Registry(
++                            $phpdir, false, false,
++                            $this->get('metadata_dir', $layer, 'pear.php.net'));
+                         $this->_registry[$layer]->setConfig($this, false);
+                         $this->_regInitialized[$layer] = false;
+                     } else {
+@@ -2087,8 +2109,9 @@ class PEAR_Config extends PEAR
+                 if ($layer == 'ftp' || !isset($this->_registry[$layer])) {
+                     continue;
+                 }
+-                $this->_registry[$layer] =
+-                    &new PEAR_Registry($this->get('php_dir', $layer, 'pear.php.net'));
++                $this->_registry[$layer] = &new PEAR_Registry(
++                    $this->get('php_dir', $layer, 'pear.php.net'), false, false,
++                    $this->get('metadata_dir', $layer, 'pear.php.net'));
+                 $this->_registry[$layer]->setConfig($this, false);
+                 $this->_regInitialized[$layer] = false;
+             }
+diff -up PEAR/DependencyDB.php.metadata PEAR/DependencyDB.php
+--- PEAR/DependencyDB.php.metadata	2011-07-07 00:11:24.000000000 +0200
++++ PEAR/DependencyDB.php	2012-09-26 16:02:29.832393782 +0200
+@@ -122,8 +122,11 @@ class PEAR_DependencyDB
+ 
+         $this->_registry = &$this->_config->getRegistry();
+         if (!$depdb) {
+-            $this->_depdb = $this->_config->get('php_dir', null, 'pear.php.net') .
+-                DIRECTORY_SEPARATOR . '.depdb';
++            $dir = $this->_config->get('metadata_dir', null, 'pear.php.net');
++            if (!$dir) {
++                $dir = $this->_config->get('php_dir', null, 'pear.php.net');
++            }
++            $this->_depdb =  $dir . DIRECTORY_SEPARATOR . '.depdb';
+         } else {
+             $this->_depdb = $depdb;
+         }
+@@ -766,4 +769,4 @@ class PEAR_DependencyDB
+             );
+         }
+     }
+-}
+\ Pas de fin de ligne à la fin du fichier
++}
+diff -up PEAR/Installer.php.metadata PEAR/Installer.php
+--- PEAR/Installer.php.metadata	2011-07-07 00:11:24.000000000 +0200
++++ PEAR/Installer.php	2012-09-26 16:03:15.079556967 +0200
+@@ -1162,15 +1162,6 @@ class PEAR_Installer extends PEAR_Downlo
+ 
+         $pkgname = $pkg->getName();
+         $channel = $pkg->getChannel();
+-        if (isset($this->_options['packagingroot'])) {
+-            $regdir = $this->_prependPath(
+-                $this->config->get('php_dir', null, 'pear.php.net'),
+-                $this->_options['packagingroot']);
+-
+-            $packrootphp_dir = $this->_prependPath(
+-                $this->config->get('php_dir', null, $channel),
+-                $this->_options['packagingroot']);
+-        }
+ 
+         if (isset($options['installroot'])) {
+             $this->config->setInstallRoot($options['installroot']);
+@@ -1182,7 +1173,21 @@ class PEAR_Installer extends PEAR_Downlo
+             $this->config->setInstallRoot(false);
+             $this->_registry = &$this->config->getRegistry();
+             if (isset($this->_options['packagingroot'])) {
+-                $installregistry = &new PEAR_Registry($regdir);
++                $regdir = $this->_prependPath(
++                    $this->config->get('php_dir', null, 'pear.php.net'),
++                    $this->_options['packagingroot']);
++
++                $metadata_dir = $this->config->get('metadata_dir', null, 'pear.php.net');
++                if ($metadata_dir) {
++                    $metadata_dir = $this->_prependPath(
++                        $metadata_dir,
++                        $this->_options['packagingroot']);
++                }
++                $packrootphp_dir = $this->_prependPath(
++                    $this->config->get('php_dir', null, $channel),
++                    $this->_options['packagingroot']);
++
++                $installregistry = &new PEAR_Registry($regdir, false, false, $metadata_dir);
+                 if (!$installregistry->channelExists($channel, true)) {
+                     // we need to fake a channel-discover of this channel
+                     $chanobj = $this->_registry->getChannel($channel, true);
+@@ -1820,4 +1825,4 @@ class PEAR_Installer extends PEAR_Downlo
+     }
+ 
+     // }}}
+-}
+\ Pas de fin de ligne à la fin du fichier
++}
+diff --git a/PEAR/Registry.php b/PEAR/Registry.php
+index 3a7bbb1..17de529 100644
+--- PEAR/Registry.php
++++ PEAR/Registry.php
+@@ -132,23 +132,26 @@ class PEAR_Registry extends PEAR
+      * @access public
+      */
+     function PEAR_Registry($pear_install_dir = PEAR_INSTALL_DIR, $pear_channel = false,
+-                           $pecl_channel = false)
++                           $pecl_channel = false, $pear_metadata_dir = '')
+     {
+         parent::PEAR();
+-        $this->setInstallDir($pear_install_dir);
++        $this->setInstallDir($pear_install_dir, $pear_metadata_dir);
+         $this->_pearChannel = $pear_channel;
+         $this->_peclChannel = $pecl_channel;
+         $this->_config      = false;
+     }
+ 
+-    function setInstallDir($pear_install_dir = PEAR_INSTALL_DIR)
++    function setInstallDir($pear_install_dir = PEAR_INSTALL_DIR, $pear_metadata_dir = '')
+     {
+         $ds = DIRECTORY_SEPARATOR;
+         $this->install_dir = $pear_install_dir;
+-        $this->channelsdir = $pear_install_dir.$ds.'.channels';
+-        $this->statedir    = $pear_install_dir.$ds.'.registry';
+-        $this->filemap     = $pear_install_dir.$ds.'.filemap';
+-        $this->lockfile    = $pear_install_dir.$ds.'.lock';
++        if (!$pear_metadata_dir) {
++            $pear_metadata_dir = $pear_install_dir;
++        }
++        $this->channelsdir = $pear_metadata_dir.$ds.'.channels';
++        $this->statedir    = $pear_metadata_dir.$ds.'.registry';
++        $this->filemap     = $pear_metadata_dir.$ds.'.filemap';
++        $this->lockfile    = $pear_metadata_dir.$ds.'.lock';
+     }
+ 
+     function hasWriteAccess()
+@@ -181,7 +184,7 @@ class PEAR_Registry extends PEAR
+     {
+         $this->_config = &$config;
+         if ($resetInstallDir) {
+-            $this->setInstallDir($config->get('php_dir'));
++            $this->setInstallDir($config->get('php_dir'), $config->get('metadata_dir'));
+         }
+     }
+ 
+@@ -328,9 +331,9 @@ class PEAR_Registry extends PEAR
+                 $this->_dependencyDB = &PEAR_DependencyDB::singleton($this->_config);
+                 if (PEAR::isError($this->_dependencyDB)) {
+                     // attempt to recover by removing the dep db
+-                    if (file_exists($this->_config->get('php_dir', null, 'pear.php.net') .
++                    if (file_exists($this->_config->get('metadata_dir', null, 'pear.php.net') .
+                         DIRECTORY_SEPARATOR . '.depdb')) {
+-                        @unlink($this->_config->get('php_dir', null, 'pear.php.net') .
++                        @unlink($this->_config->get('metadata_dir', null, 'pear.php.net') .
+                             DIRECTORY_SEPARATOR . '.depdb');
+                     }
+ 
+@@ -2328,4 +2331,4 @@ class PEAR_Registry extends PEAR
+         }
+         return $ret;
+     }
+-}
+\ No newline at end of file
++}
diff --git a/php-pear.spec b/php-pear.spec
index 5821595..20de81e 100644
--- a/php-pear.spec
+++ b/php-pear.spec
@@ -1,4 +1,5 @@
 %global peardir %{_datadir}/pear
+%global metadir %{_localstatedir}/lib/pear
 
 %global getoptver 1.3.1
 %global arctarver 1.3.10
@@ -14,7 +15,7 @@
 Summary: PHP Extension and Application Repository framework
 Name: php-pear
 Version: 1.9.4
-Release: 12%{?dist}
+Release: 13%{?dist}
 Epoch: 1
 # PEAR, Archive_Tar, XML_Util are BSD
 # Console_Getopt is PHP
@@ -37,6 +38,8 @@ Source24: http://pear.php.net/get/XML_Util-%{xmlutil}.tgz
 # From RHEL: ignore REST cache creation failures as non-root user (#747361)
 # TODO See https://github.com/pear/pear-core/commit/dfef86e05211d2abc7870209d69064d448ef53b3#PEAR/REST.php
 Patch0: php-pear-1.9.4-restcache.patch
+# Relocate Metadata
+Patch1: php-pear-metadata.patch
 
 BuildArch: noarch
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -74,9 +77,10 @@ do
     [ -f package2.xml ] && mv package2.xml ${file%%-*}.xml \
                         || mv package.xml  ${file%%-*}.xml
 done
+cp %{SOURCE1} .
 
 # apply patches on used PEAR during install
-# -- no patch
+%patch1 -p0 -b .metadata
 
 %build
 # This is an empty build section.
@@ -106,14 +110,16 @@ export INSTALL_ROOT=$RPM_BUILD_ROOT
 
 %{_bindir}/php -n -dmemory_limit=32M -dshort_open_tag=0 -dsafe_mode=0 \
          -derror_reporting=E_ALL -ddetect_unicode=0 \
-      %{SOURCE1} --dir    %{peardir} \
-                 --cache  %{_localstatedir}/cache/php-pear \
-                 --config %{_sysconfdir}/pear \
-                 --bin    %{_bindir} \
-                 --www    %{_localstatedir}/www/html \
-                 --doc    %{_docdir}/pear \
-                 --test   %{_datadir}/tests/pear \
-                 --data   %{_datadir}/pear-data \
+         install-pear.php --force \
+                 --dir      %{peardir} \
+                 --cache    %{_localstatedir}/cache/php-pear \
+                 --config   %{_sysconfdir}/pear \
+                 --bin      %{_bindir} \
+                 --www      %{_localstatedir}/www/html \
+                 --doc      %{_docdir}/pear \
+                 --test     %{_datadir}/tests/pear \
+                 --data     %{_datadir}/pear-data \
+                 --metadata %{metadir} \
                  %{SOURCE0} %{SOURCE21} %{SOURCE22} %{SOURCE23} %{SOURCE24}
 
 # Replace /usr/bin/* with simple scripts:
@@ -136,6 +142,7 @@ pushd $RPM_BUILD_ROOT%{peardir}
  pushd PEAR
   %__patch -s --no-backup --fuzz 0 -p0 < %{PATCH0}
  popd
+  %__patch -s --no-backup --fuzz 0 -p0 < %{PATCH1}
 popd
 
 # Why this file here ?
@@ -177,6 +184,14 @@ rm -rf $RPM_BUILD_ROOT
 rm new-pear.conf
 
 
+%pre
+# Manage relocation of metadata, before update to pear
+if [ -d %{peardir}/.registry -a ! -d %{metadir}/.registry ]; then
+  mkdir -p %{metadir}
+  mv -f %{peardir}/.??* %{metadir}
+fi
+
+
 %post
 # force new value as pear.conf is (noreplace)
 %{_bindir}/pear config-set \
@@ -187,6 +202,10 @@ rm new-pear.conf
     data_dir %{_datadir}/pear-data \
     system >/dev/null || :
 
+%{_bindir}/pear config-set \
+    metadata_dir %{metadir} \
+    system >/dev/null || :
+
 
 %triggerpostun -- php-pear-XML-Util
 # re-register extension unregistered during postun of obsoleted php-pear-XML-Util
@@ -197,6 +216,7 @@ rm new-pear.conf
 %files
 %defattr(-,root,root,-)
 %{peardir}
+%{metadir}
 %{_bindir}/*
 %config(noreplace) %{_sysconfdir}/pear.conf
 %config %{_sysconfdir}/rpm/macros.pear
@@ -209,10 +229,12 @@ rm new-pear.conf
 %dir %{_datadir}/tests
 %{_datadir}/tests/pear
 %{_datadir}/pear-data
-%{_localstatedir}/lib/pear
 
 
 %changelog
+* Wed Sep 26 2012 Remi Collet <remi at fedoraproject.org> 1:1.9.4-13
+- move metadata to /var/lib/pear
+
 * Wed Sep 26 2012 Remi Collet <remi at fedoraproject.org> 1:1.9.4-12
 - drop relocate stuff, no more needed
 


More information about the scm-commits mailing list