[Bf-blender-cvs] [5d7b0d415e7] temp-T94185-id_remapping-experiment-a: Add multiple remapping to sync override.

Jeroen Bakker noreply at git.blender.org
Mon Dec 20 15:53:42 CET 2021


Commit: 5d7b0d415e7447e3105f6d580fb80303afc7a6bb
Author: Jeroen Bakker
Date:   Mon Dec 20 15:53:38 2021 +0100
Branches: temp-T94185-id_remapping-experiment-a
https://developer.blender.org/rB5d7b0d415e7447e3105f6d580fb80303afc7a6bb

Add multiple remapping to sync override.

===================================================================

M	release/datafiles/locale
M	release/scripts/addons
M	release/scripts/addons_contrib
M	source/blender/blenkernel/BKE_lib_remap.h
M	source/blender/blenkernel/intern/lib_override.c
M	source/blender/blenkernel/intern/lib_remap.c
M	source/tools

===================================================================

diff --git a/release/datafiles/locale b/release/datafiles/locale
index 9d270fd007f..620b85f16d0 160000
--- a/release/datafiles/locale
+++ b/release/datafiles/locale
@@ -1 +1 @@
-Subproject commit 9d270fd007f628b23ccbcbd87caa2dc35286b26a
+Subproject commit 620b85f16d03a6aadd7cae56969c9c29b06b992d
diff --git a/release/scripts/addons b/release/scripts/addons
index b3c179b2869..503570ad703 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit b3c179b2869d86c44a4b29e2c638ce2a596a820d
+Subproject commit 503570ad703268ef55cfa38beaa28ad15e3ecc57
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
index 16467648282..7936dde9ece 160000
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@ -1 +1 @@
-Subproject commit 16467648282500cc229c271f62201ef897f2c2c3
+Subproject commit 7936dde9ece881d531b1a2ee6c45ddb56d30038c
diff --git a/source/blender/blenkernel/BKE_lib_remap.h b/source/blender/blenkernel/BKE_lib_remap.h
index ed3802f1cc5..7de7e9af659 100644
--- a/source/blender/blenkernel/BKE_lib_remap.h
+++ b/source/blender/blenkernel/BKE_lib_remap.h
@@ -107,8 +107,11 @@ enum {
  */
 void BKE_libblock_remap_multiple_locked(struct Main *bmain,
                                         const struct IDRemapper *mappings,
-                                        const short remap_flags) ATTR_NONNULL(1, 2);
+                                        const short remap_flags);
 
+void BKE_libblock_remap_multiple(struct Main *bmain,
+                                 const struct IDRemapper *mappings,
+                                 const short remap_flags);
 /**
  * Replace all references in given Main to \a old_id by \a new_id
  * (if \a new_id is NULL, it unlinks \a old_id).
diff --git a/source/blender/blenkernel/intern/lib_override.c b/source/blender/blenkernel/intern/lib_override.c
index 6e1bac71d3f..ae18176bf22 100644
--- a/source/blender/blenkernel/intern/lib_override.c
+++ b/source/blender/blenkernel/intern/lib_override.c
@@ -1275,30 +1275,36 @@ bool BKE_lib_override_library_resync(Main *bmain,
 
   /* We need to remap old to new override usages in a separate loop, after all new overrides have
    * been added to Main. */
-  FOREACH_MAIN_ID_BEGIN (bmain, id) {
-    if (id->tag & LIB_TAG_DOIT && id->newid != NULL && id->lib == id_root_reference->lib) {
-      ID *id_override_new = id->newid;
-      ID *id_override_old = BLI_ghash_lookup(linkedref_to_old_override, id);
+  {
+    struct IDRemapper *remapper = BKE_id_remapper_create();
+    FOREACH_MAIN_ID_BEGIN (bmain, id) {
 
-      if (id_override_old != NULL) {
-        /* Remap all IDs to use the new override. */
-        BKE_libblock_remap(bmain, id_override_old, id_override_new, 0);
-        /* Remap no-main override IDs we just created too. */
-        GHashIterator linkedref_to_old_override_iter;
-        GHASH_ITER (linkedref_to_old_override_iter, linkedref_to_old_override) {
-          ID *id_override_old_iter = BLI_ghashIterator_getValue(&linkedref_to_old_override_iter);
-          if (id_override_old_iter->tag & LIB_TAG_NO_MAIN) {
-            BKE_libblock_relink_ex(bmain,
-                                   id_override_old_iter,
-                                   id_override_old,
-                                   id_override_new,
-                                   ID_REMAP_FORCE_USER_REFCOUNT | ID_REMAP_FORCE_NEVER_NULL_USAGE);
+      if (id->tag & LIB_TAG_DOIT && id->newid != NULL && id->lib == id_root_reference->lib) {
+        ID *id_override_new = id->newid;
+        ID *id_override_old = BLI_ghash_lookup(linkedref_to_old_override, id);
+
+        if (id_override_old != NULL) {
+          BKE_id_remapper_add(remapper, id_override_old, id_override_new);
+          /* Remap no-main override IDs we just created too. */
+          GHashIterator linkedref_to_old_override_iter;
+          GHASH_ITER (linkedref_to_old_override_iter, linkedref_to_old_override) {
+            ID *id_override_old_iter = BLI_ghashIterator_getValue(&linkedref_to_old_override_iter);
+            if (id_override_old_iter->tag & LIB_TAG_NO_MAIN) {
+              BKE_libblock_relink_ex(bmain,
+                                     id_override_old_iter,
+                                     id_override_old,
+                                     id_override_new,
+                                     ID_REMAP_FORCE_USER_REFCOUNT |
+                                         ID_REMAP_FORCE_NEVER_NULL_USAGE);
+            }
           }
         }
       }
     }
+    /* Remap all IDs to use the new override. */
+    BKE_libblock_remap_multiple(bmain, remapper, 0);
+    FOREACH_MAIN_ID_END;
   }
-  FOREACH_MAIN_ID_END;
 
   BKE_main_collection_sync(bmain);
 
diff --git a/source/blender/blenkernel/intern/lib_remap.c b/source/blender/blenkernel/intern/lib_remap.c
index 19878a14a71..0472d968adf 100644
--- a/source/blender/blenkernel/intern/lib_remap.c
+++ b/source/blender/blenkernel/intern/lib_remap.c
@@ -587,6 +587,17 @@ void BKE_libblock_remap(Main *bmain, void *old_idv, void *new_idv, const short r
   BKE_main_unlock(bmain);
 }
 
+void BKE_libblock_remap_multiple(Main *bmain,
+                                 const struct IDRemapper *mappings,
+                                 const short remap_flags)
+{
+  BKE_main_lock(bmain);
+
+  BKE_libblock_remap_multiple_locked(bmain, mappings, remap_flags);
+
+  BKE_main_unlock(bmain);
+}
+
 void BKE_libblock_unlink(Main *bmain,
                          void *idv,
                          const bool do_flag_never_null,
diff --git a/source/tools b/source/tools
index b22d19e47f4..26bc78162ec 160000
--- a/source/tools
+++ b/source/tools
@@ -1 +1 @@
-Subproject commit b22d19e47f4d0353082f3d9f30ee8d244c5266d5
+Subproject commit 26bc78162ec89f21453ce3ded7b999bc6649f32b



More information about the Bf-blender-cvs mailing list