Modified: pear/pear-core/trunk/PEAR/Installer.php =================================================================== --- pear/pear-core/trunk/PEAR/Installer.php 2011-07-05 18:09:07 UTC (rev 312943) +++ pear/pear-core/trunk/PEAR/Installer.php 2011-07-05 18:31:18 UTC (rev 312944) @@ -1272,32 +1272,25 @@ $this->startFileTransaction(); - if (empty($options['upgrade']) && empty($options['soft'])) { - // checks to do only when installing new packages - if ($channel == 'pecl.php.net') { - $test = $installregistry->packageExists($name, $channel); - if (!$test) { - $test = $installregistry->packageExists($name, 'pear.php.net'); - } - } else { - $test = $installregistry->packageExists($name, $channel); + // Figure out what channel to use and if the package exists or not + $usechannel = $channel; + if ($channel == 'pecl.php.net') { + $test = $installregistry->packageExists($name, $channel); + if (!$test) { + $test = $installregistry->packageExists($name, 'pear.php.net'); + $usechannel = 'pear.php.net'; } + } else { + $test = $installregistry->packageExists($name, $channel); + } + // checks to do only when installing new packages + if (empty($options['upgrade']) && empty($options['soft'])) { if (empty($options['force']) && $test) { return $this->raiseError("$channel/$name is already installed"); } } else { - $usechannel = $channel; - if ($channel == 'pecl.php.net') { - $test = $installregistry->packageExists($name, $channel); - if (!$test) { - $test = $installregistry->packageExists($name, 'pear.php.net'); - $usechannel = 'pear.php.net'; - } - } else { - $test = $installregistry->packageExists($name, $channel); - } - + // Upgrade if ($test) { $v1 = $installregistry->packageInfo($name, 'version', $usechannel); $v2 = $pkg->getVersion(); @@ -1305,22 +1298,22 @@ if (empty($options['force']) && !version_compare("$v2", "$v1", 'gt')) { return $this->raiseError("upgrade to a newer version ($v2 is not newer than $v1)"); } + } + } - if (empty($options['register-only'])) { - // when upgrading, remove old release's files first: - if (PEAR::isError($err = $this->_deletePackageFiles($name, $usechannel, - true))) { - if (!isset($options['ignore-errors'])) { - return $this->raiseError($err); - } + // Do cleanups for upgrade and install, remove old release's files first + if ($test && empty($options['register-only'])) { + $err = $this->_deletePackageFiles($name, $usechannel, true); + if (PEAR::isError($err)) { + if (!isset($options['ignore-errors'])) { + return $this->raiseError($err); + } - if (!isset($options['soft'])) { - $this->log(0, 'WARNING: ' . $err->getMessage()); - } - } else { - $backedup = $err; - } + if (!isset($options['soft'])) { + $this->log(0, 'WARNING: ' . $err->getMessage()); } + } else { + $backedup = $err; } } Modified: pear/pear-core/trunk/System.php =================================================================== --- pear/pear-core/trunk/System.php 2011-07-05 18:09:07 UTC (rev 312943) +++ pear/pear-core/trunk/System.php 2011-07-05 18:31:18 UTC (rev 312944) @@ -71,6 +71,23 @@ function _parseArgs($argv, $short_options, $long_options = null) { if (!is_array($argv) && $argv !== null) { + /* + // Quote all items that are a short option + $av = preg_split('/(\A| )--?[a-z0-9]+[ =]?((? + + Test_Package99 + __uri + A test package + Whatever + + Example User + example + example@example.comk + yes + + 2007-02-03 + + 1.0.0 + 1.0 + + + stable + stable + + Foo License + This is the first release. + + + + + + + + + + + 4.3.0 + + + 1.4.0 + + + + + \ No newline at end of file Added: pear/pear-core/trunk/tests/PEAR_Installer/bug17350/Test_Package99-1.0.0/test1.php =================================================================== Added: pear/pear-core/trunk/tests/PEAR_Installer/bug17350/Test_Package99-1.0.0/test2.php =================================================================== Added: pear/pear-core/trunk/tests/PEAR_Installer/bug17350/Test_Package99-1.1.0/package.xml =================================================================== --- pear/pear-core/trunk/tests/PEAR_Installer/bug17350/Test_Package99-1.1.0/package.xml (rev 0) +++ pear/pear-core/trunk/tests/PEAR_Installer/bug17350/Test_Package99-1.1.0/package.xml 2011-07-05 18:31:18 UTC (rev 312944) @@ -0,0 +1,44 @@ + + + Test_Package99 + __uri + A test package + Whatever + + Example User + example + example@example.comk + yes + + 2007-02-03 + + 1.1.0 + 1.0 + + + stable + stable + + Foo License + This is the first release. + + + + + + + + + + 4.3.0 + + + 1.4.0 + + + + + \ No newline at end of file Added: pear/pear-core/trunk/tests/PEAR_Installer/bug17350/Test_Package99-1.1.0/test1.php =================================================================== Added: pear/pear-core/trunk/tests/PEAR_Installer/test_bug17350.phpt =================================================================== --- pear/pear-core/trunk/tests/PEAR_Installer/test_bug17350.phpt (rev 0) +++ pear/pear-core/trunk/tests/PEAR_Installer/test_bug17350.phpt 2011-07-05 18:31:18 UTC (rev 312944) @@ -0,0 +1,66 @@ +--TEST-- +PEAR_Installer - Bug #17350: "pear install --force" doesn't uninstall files from previous pkg versions +--SKIPIF-- + +--FILE-- +setPHPVersion('5.3.0'); +$_test_dep->setPEARVersion('1.9.0'); +$_test_dep->setExtensions(array('pcre' => '1.0')); + + +$dp = &new test_PEAR_Downloader($fakelog, array(), $config); +$phpunit->assertNoErrors('after create'); + +$result = $dp->download(array($p1)); +$dlpackages = $dp->getDownloadedPackages(); + +$installer->setOptions($dp->getOptions()); +$installer->sortPackagesForInstall($result); +$installer->setDownloadedPackages($result); +$phpunit->assertNoErrors('set of downloaded packages'); +$ret = $installer->install($result[0], $dp->getOptions()); +$phpunit->assertNoErrors('after install'); +$fakelog->getLog(); + +$phpunit->assertFileExists($php_dir . DIRECTORY_SEPARATOR . 'test1.php', 'test1.php exists'); +$phpunit->assertFileExists($php_dir . DIRECTORY_SEPARATOR . 'test2.php', 'test2.php exists'); + +$_test_dep->setPHPVersion('5.3.0'); +$_test_dep->setPEARVersion('1.9.0'); +$_test_dep->setExtensions(array('pcre' => '1.0')); + +$dp = &new test_PEAR_Downloader($fakelog, array('force' => true), $config); +$phpunit->assertNoErrors('after create 2'); + +$result = $dp->download(array($p2)); +$dlpackages = $dp->getDownloadedPackages(); + +$installer->setOptions($dp->getOptions()); +$installer->sortPackagesForInstall($result); +$installer->setDownloadedPackages($result); +$phpunit->assertNoErrors('set of downloaded packages 2'); +$ret = $installer->install($result[0], $dp->getOptions()); +$phpunit->assertNoErrors('after install 2'); + +$phpunit->assertFileExists($php_dir . DIRECTORY_SEPARATOR . 'test1.php', 'test1.php exists'); +$phpunit->assertFileNotExists($php_dir . DIRECTORY_SEPARATOR . 'test2.php', 'test2.php does not exists'); + +echo 'tests done'; +?> +--CLEAN-- + +--EXPECT-- +tests done