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