From 802719a568ba0e5edf6087054c1d49beafd1a434 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Fri, 20 Dec 2019 21:47:29 +0000
Subject: [PATCH] Issue #3100496 by amateescu, Donnyboypony, alexpott, Berdir,
 daffie, PapaGrande: Workspaces should only alter non-deprecated path_alias
 services

---
 core/lib/Drupal/Core/CoreServiceProvider.php          |  3 +++
 .../workspaces/src/WorkspacesServiceProvider.php      | 11 ++++++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/core/lib/Drupal/Core/CoreServiceProvider.php b/core/lib/Drupal/Core/CoreServiceProvider.php
index 413c650d4fbd..005d535d0bff 100644
--- a/core/lib/Drupal/Core/CoreServiceProvider.php
+++ b/core/lib/Drupal/Core/CoreServiceProvider.php
@@ -136,6 +136,9 @@ public function alter(ContainerBuilder $container) {
     foreach ($services as $id => $class) {
       if (!$container->hasDefinition($id)) {
         $definition = $container->register($id, $class);
+        // Mark the fallback services as deprecated in order to allow other
+        // modules to provide additional checks before relying or altering them.
+        $definition->setDeprecated(TRUE, 'The "%service_id%" service is in fallback mode. See https://drupal.org/node/3092086');
         switch ($id) {
           case 'path_alias.subscriber':
             $definition->addArgument(new Reference('path.alias_manager'));
diff --git a/core/modules/workspaces/src/WorkspacesServiceProvider.php b/core/modules/workspaces/src/WorkspacesServiceProvider.php
index 4df0da6db565..adc08bbce3ae 100644
--- a/core/modules/workspaces/src/WorkspacesServiceProvider.php
+++ b/core/modules/workspaces/src/WorkspacesServiceProvider.php
@@ -22,9 +22,14 @@ public function alter(ContainerBuilder $container) {
     $container->setParameter('renderer.config', $renderer_config);
 
     // Replace the class of the 'path_alias.repository' service.
-    $container->getDefinition('path_alias.repository')
-      ->setClass(WorkspacesAliasRepository::class)
-      ->addMethodCall('setWorkspacesManager', [new Reference('workspaces.manager')]);
+    if ($container->hasDefinition('path_alias.repository')) {
+      $definition = $container->getDefinition('path_alias.repository');
+      if (!$definition->isDeprecated()) {
+        $definition
+          ->setClass(WorkspacesAliasRepository::class)
+          ->addMethodCall('setWorkspacesManager', [new Reference('workspaces.manager')]);
+      }
+    }
 
     // Ensure that there's no active workspace while running database updates by
     // removing the relevant tag from all workspace negotiator services.
-- 
GitLab