[Bf-blender-cvs] [06a5741f427] master: Silence warnings/assert about invalid embedded IDs for older blendfiles.

Bastien Montagne noreply at git.blender.org
Thu Sep 8 19:13:08 CEST 2022


Commit: 06a5741f427467d671986ca907d47b76d53f3f6e
Author: Bastien Montagne
Date:   Thu Sep 8 16:55:46 2022 +0200
Branches: master
https://developer.blender.org/rB06a5741f427467d671986ca907d47b76d53f3f6e

Silence warnings/assert about invalid embedded IDs for older blendfiles.

there is no point in warning about files that are not supposed to be
'correct' in that regard.

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

M	source/blender/blenkernel/intern/collection.c
M	source/blender/blenkernel/intern/node.cc
M	source/blender/blenloader/BLO_read_write.h
M	source/blender/blenloader/intern/readfile.c

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

diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index dc04eb0dba3..41ec120519b 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -234,8 +234,13 @@ void BKE_collection_compat_blend_read_data(BlendDataReader *reader, SceneCollect
 void BKE_collection_blend_read_data(BlendDataReader *reader, Collection *collection, ID *owner_id)
 {
   /* Special case for this pointer, do not rely on regular `lib_link` process here. Avoids needs
-   * for do_versioning, and ensures coherence of data in any case. */
-  BLI_assert((collection->id.flag & LIB_EMBEDDED_DATA) != 0 || owner_id == NULL);
+   * for do_versioning, and ensures coherence of data in any case.
+   *
+   * NOTE: Old versions are very often 'broken' here, just fix it silently in these cases.
+   */
+  if (BLO_read_fileversion_get(reader) > 300) {
+    BLI_assert((collection->id.flag & LIB_EMBEDDED_DATA) != 0 || owner_id == NULL);
+  }
   BLI_assert(owner_id == NULL || owner_id->lib == collection->id.lib);
   if (owner_id != NULL && (collection->id.flag & LIB_EMBEDDED_DATA) == 0) {
     /* This is unfortunate, but currently a lot of existing files (including startup ones) have
@@ -244,11 +249,13 @@ void BKE_collection_blend_read_data(BlendDataReader *reader, Collection *collect
      * NOTE: Using do_version is not a solution here, since this code will be called before any
      * do_version takes place. Keeping it here also ensures future (or unknown existing) similar
      * bugs won't go easily unnoticed. */
-    CLOG_WARN(&LOG,
-              "Fixing root node tree '%s' owned by '%s' missing EMBEDDED tag, please consider "
-              "re-saving your (startup) file",
-              collection->id.name,
-              owner_id->name);
+    if (BLO_read_fileversion_get(reader) > 300) {
+      CLOG_WARN(&LOG,
+                "Fixing root node tree '%s' owned by '%s' missing EMBEDDED tag, please consider "
+                "re-saving your (startup) file",
+                collection->id.name,
+                owner_id->name);
+    }
     collection->id.flag |= LIB_EMBEDDED_DATA;
   }
   collection->owner_id = owner_id;
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index a78257a250b..fadcceae393 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -652,8 +652,13 @@ static void direct_link_node_socket(BlendDataReader *reader, bNodeSocket *sock)
 void ntreeBlendReadData(BlendDataReader *reader, ID *owner_id, bNodeTree *ntree)
 {
   /* Special case for this pointer, do not rely on regular `lib_link` process here. Avoids needs
-   * for do_versioning, and ensures coherence of data in any case. */
-  BLI_assert((ntree->id.flag & LIB_EMBEDDED_DATA) != 0 || owner_id == nullptr);
+   * for do_versioning, and ensures coherence of data in any case.
+   *
+   * NOTE: Old versions are very often 'broken' here, just fix it silently in these cases.
+   */
+  if (BLO_read_fileversion_get(reader) > 300) {
+    BLI_assert((ntree->id.flag & LIB_EMBEDDED_DATA) != 0 || owner_id == nullptr);
+  }
   BLI_assert(owner_id == NULL || owner_id->lib == ntree->id.lib);
   if (owner_id != nullptr && (ntree->id.flag & LIB_EMBEDDED_DATA) == 0) {
     /* This is unfortunate, but currently a lot of existing files (including startup ones) have
@@ -662,11 +667,13 @@ void ntreeBlendReadData(BlendDataReader *reader, ID *owner_id, bNodeTree *ntree)
      * NOTE: Using do_version is not a solution here, since this code will be called before any
      * do_version takes place. Keeping it here also ensures future (or unknown existing) similar
      * bugs won't go easily unnoticed. */
-    CLOG_WARN(&LOG,
-              "Fixing root node tree '%s' owned by '%s' missing EMBEDDED tag, please consider "
-              "re-saving your (startup) file",
-              ntree->id.name,
-              owner_id->name);
+    if (BLO_read_fileversion_get(reader) > 300) {
+      CLOG_WARN(&LOG,
+                "Fixing root node tree '%s' owned by '%s' missing EMBEDDED tag, please consider "
+                "re-saving your (startup) file",
+                ntree->id.name,
+                owner_id->name);
+    }
     ntree->id.flag |= LIB_EMBEDDED_DATA;
   }
   ntree->owner_id = owner_id;
diff --git a/source/blender/blenloader/BLO_read_write.h b/source/blender/blenloader/BLO_read_write.h
index 536c3989aff..7e2f5e4b0ae 100644
--- a/source/blender/blenloader/BLO_read_write.h
+++ b/source/blender/blenloader/BLO_read_write.h
@@ -237,6 +237,7 @@ void BLO_read_pointer_array(BlendDataReader *reader, void **ptr_p);
 
 /* Misc. */
 
+int BLO_read_fileversion_get(BlendDataReader *reader);
 bool BLO_read_requires_endian_switch(BlendDataReader *reader);
 bool BLO_read_data_is_undo(BlendDataReader *reader);
 void BLO_read_data_globmap_add(BlendDataReader *reader, void *oldaddr, void *newaddr);
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 863f978daaf..c5cf80fe635 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4972,6 +4972,11 @@ ID *BLO_read_get_new_id_address(BlendLibReader *reader, Library *lib, ID *id)
   return newlibadr(reader->fd, lib, id);
 }
 
+int BLO_read_fileversion_get(BlendDataReader *reader)
+{
+  return reader->fd->fileversion;
+}
+
 bool BLO_read_requires_endian_switch(BlendDataReader *reader)
 {
   return (reader->fd->flags & FD_FLAGS_SWITCH_ENDIAN) != 0;



More information about the Bf-blender-cvs mailing list