diff --git a/composer.json b/composer.json index 2453b1a9..6d39a4ee 100644 --- a/composer.json +++ b/composer.json @@ -38,7 +38,7 @@ "require": { "php": "^8.1", "composer-runtime-api": "^2.2", - "orchestra/sidekick": "^1.0.2", + "orchestra/sidekick": "^1.0.5", "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-php83": "^1.31" }, diff --git a/src/Console/Commander.php b/src/Console/Commander.php index 7d761730..c7547bb9 100644 --- a/src/Console/Commander.php +++ b/src/Console/Commander.php @@ -24,6 +24,7 @@ use Symfony\Component\Console\SignalRegistry\SignalRegistry; use Throwable; +use function Orchestra\Sidekick\is_symlink; use function Orchestra\Sidekick\join_paths; use function Orchestra\Sidekick\transform_relative_path; @@ -140,19 +141,19 @@ public function laravel() $APP_BASE_PATH = $this->getApplicationBasePath(); $VENDOR_PATH = join_paths($this->workingPath, 'vendor'); - $filesystem = new Filesystem; - - $hasEnvironmentFile = fn () => is_file(join_paths($APP_BASE_PATH, '.env')); - TerminatingConsole::beforeWhen( - ! $filesystem->isFile(join_paths($VENDOR_PATH, 'autoload.php')), + ! is_symlink(join_paths($APP_BASE_PATH, 'vendor')), static function () use ($APP_BASE_PATH) { static::$testbench::deleteVendorSymlink($APP_BASE_PATH); } ); + $filesystem = new Filesystem; + + $hasEnvironmentFile = static fn () => is_file(join_paths($APP_BASE_PATH, '.env')); + tap( - static::$testbench::createVendorSymlink($APP_BASE_PATH, join_paths($this->workingPath, 'vendor')), + static::$testbench::createVendorSymlink($APP_BASE_PATH, $VENDOR_PATH), function ($app) use ($filesystem, $hasEnvironmentFile) { $this->copyTestbenchConfigurationFile($app, $filesystem, $this->workingPath); diff --git a/src/Foundation/Actions/CreateVendorSymlink.php b/src/Foundation/Actions/CreateVendorSymlink.php index a389f55e..4daaada8 100644 --- a/src/Foundation/Actions/CreateVendorSymlink.php +++ b/src/Foundation/Actions/CreateVendorSymlink.php @@ -5,6 +5,7 @@ use ErrorException; use Illuminate\Contracts\Foundation\Application; use Illuminate\Filesystem\Filesystem; +use Illuminate\Foundation\PackageManifest; use function Orchestra\Sidekick\join_paths; use function Orchestra\Testbench\laravel_vendor_exists; @@ -47,6 +48,8 @@ public function handle(Application $app): void try { $filesystem->link($this->workingPath, $appVendorPath); + $app->make(PackageManifest::class)->build(); + $vendorLinkCreated = true; } catch (ErrorException $e) { // diff --git a/src/Foundation/Actions/DeleteVendorSymlink.php b/src/Foundation/Actions/DeleteVendorSymlink.php index 72ea21e0..2c499423 100644 --- a/src/Foundation/Actions/DeleteVendorSymlink.php +++ b/src/Foundation/Actions/DeleteVendorSymlink.php @@ -4,6 +4,8 @@ use Illuminate\Contracts\Foundation\Application; +use function Orchestra\Sidekick\is_symlink; + /** * @internal */ @@ -18,10 +20,8 @@ final class DeleteVendorSymlink public function handle(Application $app): void { tap($app->basePath('vendor'), static function ($appVendorPath) { - if (windows_os() && is_dir($appVendorPath) && readlink($appVendorPath) !== $appVendorPath) { - @rmdir($appVendorPath); - } elseif (is_link($appVendorPath)) { - @unlink($appVendorPath); + if (is_symlink($appVendorPath)) { + windows_os() ? @rmdir($appVendorPath) : @unlink($appVendorPath); } clearstatcache(false, \dirname($appVendorPath)); diff --git a/src/Workbench/Actions/AddAssetSymlinkFolders.php b/src/Workbench/Actions/AddAssetSymlinkFolders.php index 431eabab..e53d2135 100644 --- a/src/Workbench/Actions/AddAssetSymlinkFolders.php +++ b/src/Workbench/Actions/AddAssetSymlinkFolders.php @@ -7,6 +7,7 @@ use Illuminate\Support\Str; use Orchestra\Testbench\Contracts\Config as ConfigContract; +use function Orchestra\Sidekick\is_symlink; use function Orchestra\Testbench\package_path; /** @@ -61,8 +62,8 @@ public function handle(): void /** @var string $to */ $to = $pair['to']; - if (is_link($to)) { - $this->files->delete($to); + if (is_symlink($to)) { + windows_os() ? $this->files->deleteDirectory($to) : $this->files->delete($to); } elseif ($this->files->isDirectory($to)) { $this->files->deleteDirectory($to); } diff --git a/src/Workbench/Actions/RemoveAssetSymlinkFolders.php b/src/Workbench/Actions/RemoveAssetSymlinkFolders.php index ce372e9c..30f5f130 100644 --- a/src/Workbench/Actions/RemoveAssetSymlinkFolders.php +++ b/src/Workbench/Actions/RemoveAssetSymlinkFolders.php @@ -6,6 +6,7 @@ use Illuminate\Support\Collection; use Orchestra\Testbench\Contracts\Config as ConfigContract; +use function Orchestra\Sidekick\is_symlink; use function Orchestra\Testbench\package_path; /** @@ -37,7 +38,7 @@ public function handle(): void $sync = $this->config->getWorkbenchAttributes()['sync'] ?? []; Collection::make($sync) - ->map(static function ($pair) { + ->map(function ($pair) { /** @var bool $reverse */ $reverse = isset($pair['reverse']) && \is_bool($pair['reverse']) ? $pair['reverse'] : false; @@ -47,13 +48,9 @@ public function handle(): void /** @var string $to */ $to = $reverse === false ? base_path($pair['to']) : package_path($pair['to']); - if (windows_os() && is_dir($to) && readlink($to) !== $to) { - return [$to, static function ($to) { - @rmdir($to); - }]; - } elseif (is_link($to)) { - return [$to, static function ($to) { - @unlink($to); + if (is_symlink($to)) { + return [$to, function ($to) { + windows_os() ? $this->files->deleteDirectory($to) : $this->files->delete($to); }]; } diff --git a/tests/TestCase.php b/tests/TestCase.php index 9e1ac544..548db924 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -4,9 +4,5 @@ abstract class TestCase extends \Orchestra\Testbench\TestCase { - /** {@inheritDoc} */ - protected function getApplicationBasePath() - { - return static::applicationBasePath(); - } + // }