diff --git a/src/Command/CommandBase.php b/src/Command/CommandBase.php index 70e64e3d0..2f17d3788 100644 --- a/src/Command/CommandBase.php +++ b/src/Command/CommandBase.php @@ -1692,10 +1692,10 @@ protected function createMySqlDumpOnLocal(string $dbHost, string $dbUser, string $outputCallback('out', "Dumping MySQL database to $localFilepath on this machine"); } if ($this->localMachineHelper->commandExists('pv')) { - $command = "MYSQL_PWD={$dbPassword} mysqldump --host={$dbHost} --user={$dbUser} {$dbName} | pv --rate --bytes | gzip -9 > $localFilepath"; + $command = "bash -c \"set -o pipefail; MYSQL_PWD={$dbPassword} mysqldump --host={$dbHost} --user={$dbUser} {$dbName} | pv --rate --bytes | gzip -9 > $localFilepath\""; } else { $this->io->warning('Install `pv` to see progress bar'); - $command = "MYSQL_PWD={$dbPassword} mysqldump --host={$dbHost} --user={$dbUser} {$dbName} | gzip -9 > $localFilepath"; + $command = "bash -c \"set -o pipefail; MYSQL_PWD={$dbPassword} mysqldump --host={$dbHost} --user={$dbUser} {$dbName} | gzip -9 > $localFilepath\""; } $process = $this->localMachineHelper->executeFromCmd($command, $outputCallback, null, ($this->output->getVerbosity() > OutputInterface::VERBOSITY_NORMAL)); diff --git a/tests/phpunit/src/CommandTestBase.php b/tests/phpunit/src/CommandTestBase.php index 285f52ef0..c96fb653c 100644 --- a/tests/phpunit/src/CommandTestBase.php +++ b/tests/phpunit/src/CommandTestBase.php @@ -414,13 +414,17 @@ protected function mockNotificationResponseFromObject(object $responseWithNotifi return $this->mockRequest('getNotificationByUuid', $uuid); } - protected function mockCreateMySqlDumpOnLocal(ObjectProphecy $localMachineHelper, bool $printOutput = true): void + protected function mockCreateMySqlDumpOnLocal(ObjectProphecy $localMachineHelper, bool $printOutput = true, bool $pv = true): void { $localMachineHelper->checkRequiredBinariesExist(["mysqldump", "gzip"]) ->shouldBeCalled(); $process = $this->mockProcess(); $process->getOutput()->willReturn(''); - $command = 'MYSQL_PWD=drupal mysqldump --host=localhost --user=drupal drupal | pv --rate --bytes | gzip -9 > ' . sys_get_temp_dir() . '/acli-mysql-dump-drupal.sql.gz'; + if ($pv) { + $command = 'bash -c "set -o pipefail; MYSQL_PWD=drupal mysqldump --host=localhost --user=drupal drupal | pv --rate --bytes | gzip -9 > ' . sys_get_temp_dir() . '/acli-mysql-dump-drupal.sql.gz"'; + } else { + $command = 'bash -c "set -o pipefail; MYSQL_PWD=drupal mysqldump --host=localhost --user=drupal drupal | gzip -9 > ' . sys_get_temp_dir() . '/acli-mysql-dump-drupal.sql.gz"'; + } $localMachineHelper->executeFromCmd($command, Argument::type('callable'), null, $printOutput) ->willReturn($process->reveal()) ->shouldBeCalled(); diff --git a/tests/phpunit/src/Commands/Push/PushDatabaseCommandTest.php b/tests/phpunit/src/Commands/Push/PushDatabaseCommandTest.php index 54e1c4c4d..522431228 100644 --- a/tests/phpunit/src/Commands/Push/PushDatabaseCommandTest.php +++ b/tests/phpunit/src/Commands/Push/PushDatabaseCommandTest.php @@ -26,8 +26,8 @@ class PushDatabaseCommandTest extends CommandTestBase public function providerTestPushDatabase(): array { return [ - [OutputInterface::VERBOSITY_NORMAL, false], - [OutputInterface::VERBOSITY_VERY_VERBOSE, true], + [OutputInterface::VERBOSITY_NORMAL, false, false], + [OutputInterface::VERBOSITY_VERY_VERBOSE, true, true], ]; } @@ -51,7 +51,7 @@ public function setUp(): void /** * @dataProvider providerTestPushDatabase */ - public function testPushDatabase(int $verbosity, bool $printOutput): void + public function testPushDatabase(int $verbosity, bool $printOutput, bool $pv): void { $applications = $this->mockRequest('getApplications'); $application = $this->mockRequest('getApplicationByUuid', $applications[self::$INPUT_DEFAULT_CHOICE]->uuid); @@ -72,8 +72,8 @@ public function testPushDatabase(int $verbosity, bool $printOutput): void $this->mockGetAcsfSitesLMH($localMachineHelper); // Database. - $this->mockExecutePvExists($localMachineHelper); - $this->mockCreateMySqlDumpOnLocal($localMachineHelper, $printOutput); + $this->mockExecutePvExists($localMachineHelper, $pv); + $this->mockCreateMySqlDumpOnLocal($localMachineHelper, $printOutput, $pv); $this->mockUploadDatabaseDump($localMachineHelper, $process, $printOutput); $this->mockImportDatabaseDumpOnRemote($localMachineHelper, $process, $printOutput);