From 65e255676ee95b37e99c81fbcf08ff07c31d9299 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Mon, 4 Mar 2024 10:12:58 +0000
Subject: [PATCH] Issue #3421731 by larowlan, byrond: field_field_config_create
 should check if the config installer is syncing

(cherry picked from commit b32845ead7f6cc0d44ba9acbd2167c473ddc82a4)
---
 core/modules/field/field.module                       |  3 +++
 .../EntityReference/EntityReferenceItemTest.php       | 11 +++++++++++
 2 files changed, 14 insertions(+)

diff --git a/core/modules/field/field.module b/core/modules/field/field.module
index faafebdf521a..534d0718f125 100644
--- a/core/modules/field/field.module
+++ b/core/modules/field/field.module
@@ -392,6 +392,9 @@ function field_field_storage_config_update(FieldStorageConfigInterface $field_st
  * Determine the selection handler plugin ID for an entity reference field.
  */
 function field_field_config_create(FieldConfigInterface $field) {
+  if ($field->isSyncing()) {
+    return;
+  }
   // Act on all sub-types of the entity_reference field type.
   /** @var \Drupal\Core\Field\FieldTypePluginManager $field_type_manager */
   $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
diff --git a/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceItemTest.php b/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceItemTest.php
index 03532ffbce57..ef12736e38f2 100644
--- a/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceItemTest.php
+++ b/core/modules/field/tests/src/Kernel/EntityReference/EntityReferenceItemTest.php
@@ -404,6 +404,17 @@ public function testSelectionHandlerSettings() {
     $field_storage->save();
     $field = FieldConfig::load($field->id());
     $this->assertEquals('views', $field->getSetting('handler'));
+
+    // Check that selection handlers aren't changed during sync.
+    $field = FieldConfig::create([
+      'field_storage' => $field_storage,
+      'bundle' => 'entity_test',
+      'settings' => [
+        'handler' => 'fake:thing',
+      ],
+      'isSyncing' => TRUE,
+    ]);
+    $this->assertEquals('fake:thing', $field->getSetting('handler'));
   }
 
   /**
-- 
GitLab