From 4b79ca6ba2c40ff58fec3e1be86700c3b2c4d283 Mon Sep 17 00:00:00 2001 From: vlakoff Date: Thu, 3 Mar 2016 18:42:42 +0100 Subject: [PATCH 1/3] Remove duplicate variable --- src/Composer/Command/SelfUpdateCommand.php | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Composer/Command/SelfUpdateCommand.php b/src/Composer/Command/SelfUpdateCommand.php index 030c6bebd..d593bdae6 100644 --- a/src/Composer/Command/SelfUpdateCommand.php +++ b/src/Composer/Command/SelfUpdateCommand.php @@ -268,16 +268,15 @@ TAGSPUBKEY throw new \UnexpectedValueException('Composer rollback failed: no installation to roll back to in "'.$rollbackDir.'"'); } - $old = $rollbackDir . '/' . $rollbackVersion . self::OLD_INSTALL_EXT; + $oldFile = $rollbackDir . '/' . $rollbackVersion . self::OLD_INSTALL_EXT; - if (!is_file($old)) { - throw new FilesystemException('Composer rollback failed: "'.$old.'" could not be found'); + if (!is_file($oldFile)) { + throw new FilesystemException('Composer rollback failed: "'.$oldFile.'" could not be found'); } - if (!is_readable($old)) { - throw new FilesystemException('Composer rollback failed: "'.$old.'" could not be read'); + if (!is_readable($oldFile)) { + throw new FilesystemException('Composer rollback failed: "'.$oldFile.'" could not be read'); } - $oldFile = $rollbackDir . "/{$rollbackVersion}" . self::OLD_INSTALL_EXT; $io = $this->getIO(); $io->writeError(sprintf("Rolling back to version %s.", $rollbackVersion)); if ($err = $this->setLocalPhar($localFilename, $oldFile)) { From 496d29a79332360ebf149a2c0c82902e3a9c4396 Mon Sep 17 00:00:00 2001 From: vlakoff Date: Thu, 3 Mar 2016 18:44:23 +0100 Subject: [PATCH 2/3] Move code to new method cleanBackups() --- src/Composer/Command/SelfUpdateCommand.php | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/Composer/Command/SelfUpdateCommand.php b/src/Composer/Command/SelfUpdateCommand.php index d593bdae6..32dae3baa 100644 --- a/src/Composer/Command/SelfUpdateCommand.php +++ b/src/Composer/Command/SelfUpdateCommand.php @@ -192,14 +192,7 @@ TAGSPUBKEY // remove saved installations of composer if ($input->getOption('clean-backups')) { - $finder = $this->getOldInstallationFinder($rollbackDir); - - $fs = new Filesystem; - foreach ($finder as $file) { - $file = (string) $file; - $io->writeError('Removing: '.$file.''); - $fs->remove($file); - } + $this->cleanBackups($rollbackDir); } if ($err = $this->setLocalPhar($localFilename, $tempFilename, $backupFile)) { @@ -322,6 +315,19 @@ TAGSPUBKEY } } + protected function cleanBackups($rollbackDir) + { + $finder = $this->getOldInstallationFinder($rollbackDir); + $io = $this->getIO(); + $fs = new Filesystem; + + foreach ($finder as $file) { + $file = (string) $file; + $io->writeError('Removing: '.$file.''); + $fs->remove($file); + } + } + protected function getLastBackupVersion($rollbackDir) { $finder = $this->getOldInstallationFinder($rollbackDir); From 93e08fd78e28f8323a8b4f61fd1920542764f598 Mon Sep 17 00:00:00 2001 From: vlakoff Date: Thu, 3 Mar 2016 18:49:21 +0100 Subject: [PATCH 3/3] Also clean backups if no Composer update actually performed --- src/Composer/Command/SelfUpdateCommand.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Composer/Command/SelfUpdateCommand.php b/src/Composer/Command/SelfUpdateCommand.php index 32dae3baa..0562c9b73 100644 --- a/src/Composer/Command/SelfUpdateCommand.php +++ b/src/Composer/Command/SelfUpdateCommand.php @@ -105,6 +105,11 @@ EOT if (Composer::VERSION === $updateVersion) { $io->writeError('You are already using composer version '.$updateVersion.'.'); + // remove all backups except for the most recent, if any + if ($input->getOption('clean-backups')) { + $this->cleanBackups($rollbackDir, $this->getLastBackupVersion()); + } + return 0; } @@ -315,13 +320,16 @@ TAGSPUBKEY } } - protected function cleanBackups($rollbackDir) + protected function cleanBackups($rollbackDir, $except = null) { $finder = $this->getOldInstallationFinder($rollbackDir); $io = $this->getIO(); $fs = new Filesystem; foreach ($finder as $file) { + if ($except && $file->getBasename(self::OLD_INSTALL_EXT) === $except) { + continue; + } $file = (string) $file; $io->writeError('Removing: '.$file.''); $fs->remove($file);