summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Beaver <cellog@php.net>2003-09-18 04:32:56 +0000
committerGreg Beaver <cellog@php.net>2003-09-18 04:32:56 +0000
commit1433d789a513c43e1f2002c6dfad3c90c8bb2db3 (patch)
tree4f51dc414407184e60544e6be5845b2fad28c5c3
parentd560e49713e0016934dfe405ed1d7999d2f2787a (diff)
downloadphp-git-1433d789a513c43e1f2002c6dfad3c90c8bb2db3.tar.gz
add rollback for installed_as
-rw-r--r--pear/PEAR/Installer.php18
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) {