From 9ec213d83459ad3b364602e85d9c5dc6354b4b5d Mon Sep 17 00:00:00 2001 From: Jesse Leite Date: Tue, 16 Jul 2024 09:56:50 -0400 Subject: [PATCH 1/4] Track `sites.yaml` path in git config by default. --- config/git.php | 1 + 1 file changed, 1 insertion(+) diff --git a/config/git.php b/config/git.php index 80d2a3b6deb..831ccb42f3d 100644 --- a/config/git.php +++ b/config/git.php @@ -102,6 +102,7 @@ resource_path('forms'), resource_path('users'), resource_path('preferences.yaml'), + resource_path('sites.yaml'), storage_path('forms'), public_path('assets'), ], From c4d705341de862b2a7d13de09c23f2e9ce900045 Mon Sep 17 00:00:00 2001 From: Jesse Leite Date: Tue, 16 Jul 2024 09:57:18 -0400 Subject: [PATCH 2/4] Listen to `SiteSaved` and `SiteDeleted` content file events. --- src/Events/Concerns/ListensForContentEvents.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Events/Concerns/ListensForContentEvents.php b/src/Events/Concerns/ListensForContentEvents.php index 52d2868bedb..5f3c77a258e 100644 --- a/src/Events/Concerns/ListensForContentEvents.php +++ b/src/Events/Concerns/ListensForContentEvents.php @@ -40,6 +40,8 @@ trait ListensForContentEvents \Statamic\Events\RevisionSaved::class, \Statamic\Events\RoleDeleted::class, \Statamic\Events\RoleSaved::class, + \Statamic\Events\SiteDeleted::class, + \Statamic\Events\SiteSaved::class, \Statamic\Events\SubmissionDeleted::class, \Statamic\Events\SubmissionSaved::class, \Statamic\Events\TaxonomyDeleted::class, From 105d4c5def658f31aac41f2bd599c8581aab952c Mon Sep 17 00:00:00 2001 From: Jesse Leite Date: Tue, 16 Jul 2024 09:57:40 -0400 Subject: [PATCH 3/4] Provide commit messages. --- src/Events/SiteDeleted.php | 8 +++++++- src/Events/SiteSaved.php | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Events/SiteDeleted.php b/src/Events/SiteDeleted.php index fcffdff6a52..eeaf9bebb89 100644 --- a/src/Events/SiteDeleted.php +++ b/src/Events/SiteDeleted.php @@ -2,12 +2,18 @@ namespace Statamic\Events; +use Statamic\Contracts\Git\ProvidesCommitMessage; use Statamic\Sites\Site; -class SiteDeleted extends Event +class SiteDeleted extends Event implements ProvidesCommitMessage { public function __construct(public Site $site) { // } + + public function commitMessage() + { + return __('Site deleted', [], config('statamic.git.locale')); + } } diff --git a/src/Events/SiteSaved.php b/src/Events/SiteSaved.php index 1148dc91c3c..7507448e290 100644 --- a/src/Events/SiteSaved.php +++ b/src/Events/SiteSaved.php @@ -2,12 +2,18 @@ namespace Statamic\Events; +use Statamic\Contracts\Git\ProvidesCommitMessage; use Statamic\Sites\Site; -class SiteSaved extends Event +class SiteSaved extends Event implements ProvidesCommitMessage { public function __construct(public Site $site) { // } + + public function commitMessage() + { + return __('Site saved', [], config('statamic.git.locale')); + } } From 7eade19a1f35dfdaee0ffffc623fcf6cd353fc37 Mon Sep 17 00:00:00 2001 From: Jesse Leite Date: Tue, 16 Jul 2024 09:57:48 -0400 Subject: [PATCH 4/4] Test. --- tests/Git/GitEventTest.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/Git/GitEventTest.php b/tests/Git/GitEventTest.php index 8ddc2ad3f3f..28cd7478251 100644 --- a/tests/Git/GitEventTest.php +++ b/tests/Git/GitEventTest.php @@ -376,6 +376,31 @@ public function it_commits_when_default_user_preferences_are_saved() Facades\File::delete(resource_path('preferences.yaml')); } + #[Test] + public function it_commits_when_site_is_saved_and_deleted() + { + // Ensure we have one `en` site to start + Facades\File::put(resource_path('sites.yaml'), Facades\YAML::dump([ + 'en' => [ + 'name' => 'English', + 'url' => 'http://localhost/', + 'locale' => 'en_US', + ], + ])); + + Git::shouldReceive('dispatchCommit')->with('Site saved')->once(); + Git::shouldReceive('dispatchCommit')->with('Site deleted')->once(); + + // Delete the `en` site and save a new `fr` site + Facades\Site::setSites([ + 'fr' => [ + 'name' => 'French', + 'url' => 'http://localhost/', + 'locale' => 'fr_FR', + ], + ])->save(); + } + #[Test] public function it_commits_when_asset_container_is_saved_and_deleted() {