[Bf-blender-cvs] [f575a148018] blender-v2.83-release: Revert "Fix (unreported) critical mistake in Collection liblink code in readfile.c."

Jeroen Bakker noreply at git.blender.org
Thu Jun 25 12:01:40 CEST 2020


Commit: f575a148018ac943600ee78f1f35c3b9e472476e
Author: Jeroen Bakker
Date:   Thu Jun 25 11:46:30 2020 +0200
Branches: blender-v2.83-release
https://developer.blender.org/rBf575a148018ac943600ee78f1f35c3b9e472476e

Revert "Fix (unreported) critical mistake in Collection liblink code in readfile.c."

This reverts commit 517f32045c282f1031299268ad0ebfa8f934bd1a.

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

M	source/blender/blenloader/intern/readfile.c

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

diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 657d776e57c..3c56ec966d5 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6433,6 +6433,8 @@ static void lib_link_collection_data(FileData *fd, Library *lib, Collection *col
   for (CollectionChild *child = collection->children.first; child != NULL; child = child->next) {
     child->collection = newlibadr(fd, lib, child->collection);
   }
+
+  BKE_collection_parent_relations_rebuild(collection);
 }
 
 static void lib_link_collection(FileData *fd, Main *UNUSED(bmain), Collection *collection)
@@ -10137,9 +10139,18 @@ static void lib_link_all(FileData *fd, Main *bmain)
    * so simpler to just use it directly in this single call. */
   BLO_main_validate_shapekeys(bmain, NULL);
 
-  /* We have to rebuild that runtime information *after* all data-blocks have been properly linked.
-   */
-  BKE_main_collections_parent_relations_rebuild(bmain);
+  if (fd->memfile != NULL) {
+    /* When doing redo, we perform a tremendous amount of esoteric magic tricks to avoid having to
+     * re-read all library data-blocks.
+     * Unfortunately, that means that we do not clear Collections' parents lists, which then get
+     * improperly extended in some cases by lib_link_scene() and lib_link_collection() calls above
+     * (when one local collection is parent of linked ones).
+     * I do not really see a way to address that issue, besides brute force call below which
+     * invalidates and re-creates all parenting relationships between collections. Yet another
+     * example of why it is such a bad idea to keep that kind of double-linked relationships info
+     * 'permanently' in our data structures... */
+    BKE_main_collections_parent_relations_rebuild(bmain);
+  }
 
 #ifndef NDEBUG
   /* Double check we do not have any 'need link' tag remaining, this should never be the case once



More information about the Bf-blender-cvs mailing list