diff options
author | Greg Beaver <cellog@php.net> | 2003-09-18 04:32:56 +0000 |
---|---|---|
committer | Greg Beaver <cellog@php.net> | 2003-09-18 04:32:56 +0000 |
commit | 1433d789a513c43e1f2002c6dfad3c90c8bb2db3 (patch) | |
tree | 4f51dc414407184e60544e6be5845b2fad28c5c3 | |
parent | d560e49713e0016934dfe405ed1d7999d2f2787a (diff) | |
download | php-git-1433d789a513c43e1f2002c6dfad3c90c8bb2db3.tar.gz |
add rollback for installed_as
-rw-r--r-- | pear/PEAR/Installer.php | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/pear/PEAR/Installer.php b/pear/PEAR/Installer.php index 455ca93437..468339464f 100644 --- a/pear/PEAR/Installer.php +++ b/pear/PEAR/Installer.php @@ -492,6 +492,21 @@ class PEAR_Installer extends PEAR_Common break; case 'delete': break; + case 'installed_as': + unset($this->pkginfo['filelist'][$data[0]]['installed_as']); + if (isset($this->pkginfo['filelist']['dirtree'][dirname($data[1])])) { + unset($this->pkginfo['filelist']['dirtree'][dirname($data[1])]); + while(!empty($data[3]) && $data[3] != '/' && $data[3] != '\\' + && $data[3] != '.') { + unset($this->pkginfo['filelist']['dirtree'] + [$this->_prependPath($data[3], $data[2])]); + $data[3] = dirname($data[3]); + } + } + if (!count($this->pkginfo['filelist']['dirtree'])) { + unset($this->pkginfo['filelist']['dirtree']); + } + break; } } $this->file_operations = array(); @@ -1158,6 +1173,9 @@ class PEAR_Installer extends PEAR_Common return $this->raiseError("uninstall failed"); } else { $this->startFileTransaction(); + if (!isset($filelist['dirtree']) || !count($filelist['dirtree'])) { + return $this->registry->deletePackage($package); + } // attempt to delete empty directories uksort($filelist['dirtree'], array($this, '_sortDirs')); foreach($filelist['dirtree'] as $dir => $notused) { |