[Bf-blender-cvs] [0385b33f0b3] master: Fix broken 'check/validate libs' code with indirect libs.

Bastien Montagne noreply at git.blender.org
Wed May 9 15:52:37 CEST 2018


Commit: 0385b33f0b3e389ea2a82c4b6bb181c684f0511a
Author: Bastien Montagne
Date:   Wed May 9 15:46:22 2018 +0200
Branches: master
https://developer.blender.org/rB0385b33f0b3e389ea2a82c4b6bb181c684f0511a

Fix broken 'check/validate libs' code with indirect libs.

Readcode always set relative paths of indirectly linked libs relative to
*current* .blend file, not to the library using it.

But BKE_library_filepath_set was then setting them relative to their
parent library, breaking checking code (and saved files even :((( ).

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

M	source/blender/blenkernel/intern/library.c
M	source/blender/blenloader/intern/blend_validate.c

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

diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 292f37b5ce9..ff4780f0605 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -2384,7 +2384,9 @@ void BKE_library_filepath_set(Library *lib, const char *filepath)
 		 * outliner, and its not really supported but allow from here for now
 		 * since making local could cause this to be directly linked - campbell
 		 */
-		const char *basepath = lib->parent ? lib->parent->filepath : G.main->name;
+		/* Never make paths relative to parent lib - reading code (blenloader) always set *all* lib->name relative to
+		 * current G.main, not to their parent for indirectly linked ones. */
+		const char *basepath = G.main->name;
 		BLI_path_abs(lib->filepath, basepath);
 	}
 }
diff --git a/source/blender/blenloader/intern/blend_validate.c b/source/blender/blenloader/intern/blend_validate.c
index d155fcfaa0d..0963fdd78e0 100644
--- a/source/blender/blenloader/intern/blend_validate.c
+++ b/source/blender/blenloader/intern/blend_validate.c
@@ -85,6 +85,8 @@ bool BLO_main_validate_libraries(struct Main *bmain, struct ReportList *reports)
 		BlendHandle *bh = BLO_blendhandle_from_file(curlib->filepath, reports);
 
 		if (bh == NULL) {
+			BKE_reportf(reports, RPT_ERROR,
+			            "Library ID %s not found at expected path %s!\n", curlib->id.name, curlib->filepath);
 			continue;
 		}



More information about the Bf-blender-cvs mailing list