[Bf-blender-cvs] [cb173d05dc3] master: LibLink Append: Fix 'reused ID' case keeping linked data around.

Bastien Montagne noreply at git.blender.org
Thu Sep 23 13:01:55 CEST 2021


Commit: cb173d05dc3e17f0407ebdeb7d092344242ea4ad
Author: Bastien Montagne
Date:   Thu Sep 23 12:54:23 2021 +0200
Branches: master
https://developer.blender.org/rBcb173d05dc3e17f0407ebdeb7d092344242ea4ad

LibLink Append: Fix 'reused ID' case keeping linked data around.

When we re-use a local ID, we need to delete the matching linked data.

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

M	source/blender/windowmanager/intern/wm_files_link.c

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

diff --git a/source/blender/windowmanager/intern/wm_files_link.c b/source/blender/windowmanager/intern/wm_files_link.c
index 817947f2161..b61337ec8e4 100644
--- a/source/blender/windowmanager/intern/wm_files_link.c
+++ b/source/blender/windowmanager/intern/wm_files_link.c
@@ -805,6 +805,27 @@ static void wm_append_do(WMLinkAppendData *lapp_data,
     BKE_libblock_relink_to_newid_new(bmain, id);
   }
 
+  /* Remove linked IDs when a local existing data has been reused instead. */
+  for (itemlink = lapp_data->items.list; itemlink; itemlink = itemlink->next) {
+    WMLinkAppendDataItem *item = itemlink->link;
+
+    if (item->append_action != WM_APPEND_ACT_REUSE_LOCAL) {
+      continue;
+    }
+
+    ID *id = item->new_id;
+    if (id == NULL) {
+      continue;
+    }
+    BLI_assert(ID_IS_LINKED(id));
+    BLI_assert(id->newid != NULL);
+    BLI_assert((id->tag & LIB_TAG_DOIT) == 0);
+
+    id->tag |= LIB_TAG_DOIT;
+    item->new_id = id->newid;
+  }
+  BKE_id_multi_tagged_delete(bmain);
+
   /* Instantiate newly created (duplicated) IDs as needed. */
   wm_append_loose_data_instantiate(lapp_data, bmain, scene, view_layer, v3d);



More information about the Bf-blender-cvs mailing list