1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- <?php
- /**
- * Copyright © 2013-2017 Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Update;
- use Magento\Update\Backup\BackupInfo;
- use Magento\Update\Status;
- /**
- * Class for creating Magento codebase backups.
- */
- class Backup
- {
- /**
- * @var BackupInfo
- */
- protected $backupInfo;
- /**
- * @var Status
- */
- protected $status;
- /**
- * Initialize dependencies.
- *
- * @param BackupInfo|null $backupInfo
- * @param Status|null $status
- */
- public function __construct(BackupInfo $backupInfo = null, Status $status = null)
- {
- $this->backupInfo = $backupInfo ? $backupInfo : new BackupInfo();
- $this->status = $status ? $status : new Status();
- }
- /**
- * Create backup archive using unix zip tool.
- *
- * @return $this
- * @throws \RuntimeException
- */
- public function execute()
- {
- $backupFilePath = $this->backupInfo->getBackupPath() . $this->backupInfo->generateBackupFilename();
- $command = $this->buildShellCommand($backupFilePath);
- $this->status->add(sprintf('Creating backup archive "%s" ...', $backupFilePath), \Psr\Log\LogLevel::INFO);
- exec($command, $output, $return);
- if ($return) {
- throw new \RuntimeException(
- sprintf('Cannot create backup with command "%s": %s', $command, implode("\n", $output),
- \Psr\Log\LogLevel::ERROR
- )
- );
- }
- $this->status->add(sprintf('Backup archive "%s" has been created.', $backupFilePath), \Psr\Log\LogLevel::INFO);
- return $this;
- }
- /**
- * Construct shell command for creating backup archive.
- *
- * @param string $backupFilePath
- * @return string
- */
- protected function buildShellCommand($backupFilePath)
- {
- $excludedElements = '';
- foreach ($this->backupInfo->getBlacklist() as $excludedElement) {
- $elementPath = $excludedElement;
- $fullPath = $this->backupInfo->getArchivedDirectory() . '/' . $elementPath;
- $excludedElements .= is_dir($fullPath) ? $elementPath . '\* ' : $elementPath . ' ';
- }
- $changeDirectoryCommand = sprintf("cd %s", $this->backupInfo->getArchivedDirectory());
- $zipCommand = sprintf("zip -r %s . -x %s", $backupFilePath, $excludedElements);
- return $changeDirectoryCommand . ' && ' . $zipCommand;
- }
- }
|