From: Dan Brown Date: Sat, 6 May 2023 10:31:20 +0000 (+0100) Subject: Added check and warning for updating non-git-managed instances X-Git-Url: http://source.bookstackapp.com/system-cli/commitdiff_plain/0842d6b266a5457e8ec580d5e43db73bf436e6c1?ds=sidebyside Added check and warning for updating non-git-managed instances Closes #5 Added test to cover. --- diff --git a/src/Commands/UpdateCommand.php b/src/Commands/UpdateCommand.php index 5475aaa..02cf3c6 100644 --- a/src/Commands/UpdateCommand.php +++ b/src/Commands/UpdateCommand.php @@ -5,6 +5,7 @@ namespace Cli\Commands; 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; @@ -30,6 +31,9 @@ class UpdateCommand extends Command $output->writeln("Checking system requirements..."); RequirementsValidator::validate(); + $output->writeln("Checking local Git repository is active..."); + $this->ensureGitRepoExists($appDir); + $output->writeln("Checking composer exists..."); $composerLocator = new ComposerLocator($appDir); $composer = $composerLocator->getProgram(); @@ -91,4 +95,16 @@ class UpdateCommand extends Command 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); + } + } } diff --git a/tests/Commands/UpdateCommandTest.php b/tests/Commands/UpdateCommandTest.php index f60398c..d0d0f2e 100644 --- a/tests/Commands/UpdateCommandTest.php +++ b/tests/Commands/UpdateCommandTest.php @@ -43,6 +43,20 @@ class UpdateCommandTest extends TestCase $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');