use Cli\Services\AppLocator;
use Cli\Services\ArtisanRunner;
use Cli\Services\ComposerLocator;
+use Cli\Services\Paths;
use Cli\Services\ProgramRunner;
use Cli\Services\RequirementsValidator;
use Symfony\Component\Console\Command\Command;
$output->writeln("<info>Checking system requirements...</info>");
RequirementsValidator::validate();
+ $output->writeln("<info>Checking local Git repository is active...</info>");
+ $this->ensureGitRepoExists($appDir);
+
$output->writeln("<info>Checking composer exists...</info>");
$composerLocator = new ComposerLocator($appDir);
$composer = $composerLocator->getProgram();
throw new CommandError("Failed composer install with errors:\n" . $errors);
}
}
+
+ protected function ensureGitRepoExists(string $appDir): void
+ {
+ $expectedPath = Paths::join($appDir, '.git');
+ if (!is_dir($expectedPath)) {
+ $message = "Could not find a local git repository, it does not look like this instance is managed via common means.\n";
+ $message .= "If you are running BookStack via a docker container, you should update following the advised process for the docker container image in use.\n";
+ $message .= "This typically involves pulling and using an updated docker container image.";
+
+ throw new CommandError($message);
+ }
+ }
}
$result->assertStderrContains('Could not find a valid BookStack installation');
}
+ public function test_command_rejects_on_no_git_repo_found()
+ {
+ exec('cp -r /var/www/bookstack /var/www/bookstack-update-git');
+ exec('rm -rf /var/www/bookstack-update-git/.git');
+ chdir('/var/www/bookstack-update-git');
+
+ $result = $this->runCommand('update');
+ $result->assertErrorExit();
+ $result->assertStderrContains("Could not find a local git repository");
+ $result->assertStderrContains("If you are running BookStack via a docker container");
+
+ exec('rm -rf /var/www/bookstack-update-git');
+ }
+
public function test_command_can_be_provided_app_directory_option()
{
chdir('/home');