]> granicus.if.org Git - php/commitdiff
Moved dependecy db code to its own file
authorTomas V.V.Cox <cox@php.net>
Mon, 7 Jul 2003 15:42:58 +0000 (15:42 +0000)
committerTomas V.V.Cox <cox@php.net>
Mon, 7 Jul 2003 15:42:58 +0000 (15:42 +0000)
pear/PEAR/Registry.php

index 27a5f9649c04b357ee7d0b633893d8c6a8fe8810..a93713f1846ebac25c5d5f8cf5acc0c3daaa8ac5 100644 (file)
@@ -522,181 +522,6 @@ class PEAR_Registry extends PEAR
 
     // }}}
 
-    // {{{ rebuildDepsFile()
-
-    /**
-    Experimental dependencies database handling functions (not yet in production)
-
-    TODO:
-        - test it
-        - Think on the "not" dep relation. It's supposed that a package can't
-          be installed if conflicts with another. The problem comes when the
-          user forces the installation and later upgrades it
-    **/
-
-    // XXX Terrible slow, a lot of read, lock, write, unlock
-    function rebuildDepsFile()
-    {
-        // Init the file with empty data
-        $error = $this->_depWriteDepDB(array());
-        if (PEAR::isError($error)) {
-            return $error;
-        }
-        $packages = $this->listPackages();
-        foreach ($packages as $package) {
-            $deps = $this->packageInfo($package, 'release_deps');
-            $error = $this->setPackageDep($package, $deps);
-            if (PEAR::isError($error)) {
-                return $error;
-            }
-        }
-        return true;
-    }
-
-    function &_depGetDepDB()
-    {
-        if (!$fp = fopen($this->depfile, 'r')) {
-            return $this->raiseError("Could not open dependencies file `".$this->depfile."'");
-        }
-        $data = fread($fp, filesize($this->depfile));
-        fclose($fp);
-        return unserialize($data);
-    }
-
-    function _depWriteDepDB(&$deps)
-    {
-        if (PEAR::isError($e = $this->_lock(LOCK_EX))) {
-            return $e;
-        }
-        if (!$fp = fopen($this->depfile, 'wb')) {
-            $this->_unlock();
-            return $this->raiseError("Could not open dependencies file `".$this->depfile."' for writting");
-        }
-        fwrite($fp, serialize($deps));
-        fclose($fp);
-        $this->_unlock();
-        return true;
-    }
-
-    /*
-    The data structure is as follows:
-    $dep_db = array(
-        // Other packages depends in some manner on this packages
-        'deps' => array(
-            'Package Name' => array(
-                0 => array(
-                    // This package depends on 'Package Name'
-                    'depend' => 'Package',
-                    // Which version 'Package' needs of 'Package Name'
-                    'version' => '1.0',
-                    // The requirement (version_compare() operator)
-                    'rel' => 'ge'
-                ),
-            ),
-        )
-        // This packages are dependant on other packages
-        'pkgs' => array(
-            'Package Dependant' => array(
-                // This is a index list with paths over the 'deps' array for quick
-                // searching things like "what dependecies has this package?"
-                // $dep_db['deps']['Package Name'][3]
-                'Package Name' => 3 // key in array ['deps']['Package Name']
-            ),
-        )
-    )
-
-    Note: It only supports package dependencies no other type
-    */
-
-    function removePackageDep($package)
-    {
-        $data = &$this->_depGetDepDB();
-        if (PEAR::isError($data)) {
-            return $data;
-        }
-        // Other packages depends on this package, can't be removed
-        if (isset($data['deps'][$package])) {
-            return $data['deps'][$package];
-        }
-        // The package depends on others, remove those dependencies
-        if (isset($data['pkgs'][$package])) {
-            foreach ($data['pkgs'][$package] as $pkg => $key) {
-                // remove the dependency
-                unset($data['deps'][$pkg][$key]);
-                // if no more dependencies, remove the subject too
-                if (!count($data['deps'][$pkg])) {
-                    unset($data['deps'][$pkg]);
-                }
-            }
-            // remove the package from the index list
-            unset($data['pkgs'][$package]);
-        }
-        return $this->_depWriteDepDB();
-    }
-
-    /**
-    * Update or insert a the dependencies of a package, prechecking
-    * that the package won't break any dependency in the process
-    */
-    function setPackageDep($package, $new_version, $rel_deps = array())
-    {
-        $data = &$this->_depGetDepDB();
-        if (PEAR::isError($deps)) {
-            return $deps;
-        }
-        // Other packages depend on this package, check deps. Mostly for
-        // handling uncommon cases like:
-        // <dep type='pkg' rel='lt' version='1.0'>Foo</dep> and we are trying to
-        // update Foo to version 2.0
-        if (isset($data['deps'][$package])) {
-            foreach ($data['deps'][$package] as $dep) {
-                $require  = $dep['version'];
-                $relation = $dep['rel'];
-                // XXX (cox) Possible problem with changes in the way
-                // PEAR_Dependency::checkPackage() works
-                if ($relation != 'has') {
-                    if (!version_compare("$new_version", "$require", $relation)) {
-                        $fails[] = $dep;
-                    }
-                }
-            }
-            if (isset($fails)) {
-                return $fails;
-            }
-        }
-
-        // This package has no dependencies
-        if (!is_array($rel_deps) || !count($rel_deps)) {
-            return true;
-        }
-
-        // The package depends on others, register that
-        foreach ($rel_deps as $dep) {
-            // We only support deps of type 'pkg's
-            if ($dep && $dep['type'] == 'pkg' && isset($dep['name'])) {
-                $write = array('depend'  => $package,
-                               'version' => $dep['version'],
-                               'rel'     => $dep['rel']);
-                settype($data['deps'][$dep['name']], 'array');
-
-                // The dependency already exists, update it
-                if (isset($data['pkgs'][$package][$dep['name']])) {
-                    $key = $data['pkgs'][$package][$dep['name']];
-                    $data['deps'][$dep['name']][$key] = $write;
-
-                // New dependency, insert it
-                } else {
-                    $data['deps'][$dep['name']][] = $write;
-                    $key = key($data['deps'][$dep['name']]);
-                    settype($data['pkgs'][$package], 'array');
-                    $data['pkgs'][$package][$dep['name']] = $key;
-                }
-            }
-        }
-        return $this->_depWriteDepDB($data);
-    }
-
-    // }}}
 }
 
 ?>