[Bf-blender-cvs] [7cd9c5cd43c] temp-T94185-id_remapping-experiment-a: Extracted remap to separate function.

Jeroen Bakker noreply at git.blender.org
Mon Jan 3 14:13:14 CET 2022


Commit: 7cd9c5cd43c4f20626cb31237d9f7d673b609062
Author: Jeroen Bakker
Date:   Mon Jan 3 14:12:00 2022 +0100
Branches: temp-T94185-id_remapping-experiment-a
https://developer.blender.org/rB7cd9c5cd43c4f20626cb31237d9f7d673b609062

Extracted remap to separate function.

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

M	source/blender/blenkernel/intern/lib_override.c

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

diff --git a/source/blender/blenkernel/intern/lib_override.c b/source/blender/blenkernel/intern/lib_override.c
index 770c2bde155..6466c80b3a1 100644
--- a/source/blender/blenkernel/intern/lib_override.c
+++ b/source/blender/blenkernel/intern/lib_override.c
@@ -1109,6 +1109,45 @@ void BKE_lib_override_library_main_proxy_convert(Main *bmain, BlendFileReadRepor
   }
 }
 
+static void lib_override_library_remap(Main *bmain,
+                                       const ID *id_root_reference,
+                                       GHash *linkedref_to_old_override)
+{
+  ID *id;
+  struct IDRemapper *remapper = BKE_id_remapper_create();
+  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);
+      if (id_override_old == NULL) {
+        continue;
+      }
+
+      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) == 0) {
+          continue;
+        }
+
+        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);
+      }
+    }
+  }
+  FOREACH_MAIN_ID_END;
+
+  /* Remap all IDs to use the new override. */
+  BKE_libblock_remap_multiple(bmain, remapper, 0);
+  BKE_id_remapper_free(remapper);
+}
+
 bool BKE_lib_override_library_resync(Main *bmain,
                                      Scene *scene,
                                      ViewLayer *view_layer,
@@ -1300,40 +1339,9 @@ bool BKE_lib_override_library_resync(Main *bmain,
   }
   FOREACH_MAIN_LISTBASE_END;
 
-  /* We need to remap old to new override usages in a separate loop, after all new overrides have
+  /* We remap old to new override usages in a separate loop, after all new overrides have
    * been added to Main. */
-  {
-    struct IDRemapper *remapper = BKE_id_remapper_create();
-    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);
-
-        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);
-            }
-          }
-        }
-      }
-    }
-    FOREACH_MAIN_ID_END;
-
-    /* Remap all IDs to use the new override. */
-    BKE_libblock_remap_multiple(bmain, remapper, 0);
-    BKE_id_remapper_free(remapper);
-  }
+  lib_override_library_remap(bmain, id_root_reference, linkedref_to_old_override);
 
   BKE_main_collection_sync(bmain);



More information about the Bf-blender-cvs mailing list