[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41329] trunk/blender/source/blender: use generic path remapping when making all library data local, previously only image paths were getting corrected, now all paths will ( scene image seq strips, pointcache etc)

Campbell Barton ideasman42 at gmail.com
Fri Oct 28 06:45:00 CEST 2011


Revision: 41329
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41329
Author:   campbellbarton
Date:     2011-10-28 04:44:59 +0000 (Fri, 28 Oct 2011)
Log Message:
-----------
use generic path remapping when making all library data local, previously only image paths were getting corrected, now all paths will (scene image seq strips, pointcache etc)

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_library.h
    trunk/blender/source/blender/blenkernel/intern/library.c
    trunk/blender/source/blender/editors/object/object_relations.c
    trunk/blender/source/blender/python/intern/bpy_library.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/source/blender/blenkernel/BKE_library.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_library.h	2011-10-28 04:05:52 UTC (rev 41328)
+++ trunk/blender/source/blender/blenkernel/BKE_library.h	2011-10-28 04:44:59 UTC (rev 41329)
@@ -78,7 +78,7 @@
 void name_uiprefix_id(char *name, struct ID *id);
 void test_idbutton(char *name);
 void text_idbutton(struct ID *id, char *text);
-void all_local(struct Library *lib, int untagged_only);
+void BKE_library_make_local(struct Main *bmain, struct Library *lib, int untagged_only);
 struct ID *find_id(const char *type, const char *name);
 void clear_id_newpoins(void);
 

Modified: trunk/blender/source/blender/blenkernel/intern/library.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/library.c	2011-10-28 04:05:52 UTC (rev 41328)
+++ trunk/blender/source/blender/blenkernel/intern/library.c	2011-10-28 04:44:59 UTC (rev 41329)
@@ -1277,16 +1277,6 @@
 	}
 }
 
-/* only for library fixes */
-static void image_fix_relative_path(Image *ima)
-{
-	if(ima->id.lib==NULL) return;
-	if(strncmp(ima->name, "//", 2)==0) {
-		BLI_path_abs(ima->name, ima->id.lib->filepath);
-		BLI_path_rel(ima->name, G.main->name);
-	}
-}
-
 #define LIBTAG(a)	if(a && a->id.lib) {a->id.flag &=~LIB_INDIRECT; a->id.flag |= LIB_EXTERN;}
 
 static void lib_indirect_test_id(ID *id, Library *lib)
@@ -1361,14 +1351,15 @@
 	}
 }
 
-/* if lib!=NULL, only all from lib local */
-void all_local(Library *lib, int untagged_only)
+/* if lib!=NULL, only all from lib local
+ * bmain is almost certainly G.main */
+void BKE_library_make_local(Main *bmain, Library *lib, int untagged_only)
 {
 	ListBase *lbarray[MAX_LIBARRAY], tempbase={NULL, NULL};
 	ID *id, *idn;
 	int a;
 
-	a= set_listbasepointers(G.main, lbarray);
+	a= set_listbasepointers(bmain, lbarray);
 	while(a--) {
 		id= lbarray[a]->first;
 		
@@ -1385,17 +1376,16 @@
 			  (untagged_only==0 || !(id->flag & LIB_PRE_EXISTING)))
 			{
 				if(lib==NULL || id->lib==lib) {
-					id->flag &= ~(LIB_EXTERN|LIB_INDIRECT|LIB_NEW);
-
 					if(id->lib) {
-						/* relative file patch */
-						if(GS(id->name)==ID_IM)
-							image_fix_relative_path((Image *)id);
-						
-						id->lib= NULL;
-						new_id(lbarray[a], id, NULL);	/* new_id only does it with double names */
+						id_clear_lib_data(bmain, id); /* sets 'id->flag' */
+
+						/* why sort alphabetically here but not in
+						 * id_clear_lib_data() ? - campbell */
 						sort_alpha_id(lbarray[a], id);
 					}
+					else {
+						id->flag &= ~(LIB_EXTERN|LIB_INDIRECT|LIB_NEW);
+					}
 				}
 			}
 			id= idn;
@@ -1410,7 +1400,7 @@
 	}
 
 	/* patch 3: make sure library data isn't indirect falsely... */
-	a= set_listbasepointers(G.main, lbarray);
+	a= set_listbasepointers(bmain, lbarray);
 	while(a--) {
 		for(id= lbarray[a]->first; id; id=id->next)
 			lib_indirect_test_id(id, lib);

Modified: trunk/blender/source/blender/editors/object/object_relations.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_relations.c	2011-10-28 04:05:52 UTC (rev 41328)
+++ trunk/blender/source/blender/editors/object/object_relations.c	2011-10-28 04:44:59 UTC (rev 41329)
@@ -1713,6 +1713,7 @@
 
 static int make_local_exec(bContext *C, wmOperator *op)
 {
+	Main *bmain= CTX_data_main(C);
 	AnimData *adt;
 	ParticleSystem *psys;
 	Material *ma, ***matarar;
@@ -1721,7 +1722,7 @@
 	int a, b, mode= RNA_enum_get(op->ptr, "type");
 	
 	if(mode==3) {
-		all_local(NULL, 0);	/* NULL is all libs */
+		BKE_library_make_local(bmain, NULL, 0);	/* NULL is all libs */
 		WM_event_add_notifier(C, NC_WINDOW, NULL);
 		return OPERATOR_FINISHED;
 	}

Modified: trunk/blender/source/blender/python/intern/bpy_library.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_library.c	2011-10-28 04:05:52 UTC (rev 41328)
+++ trunk/blender/source/blender/python/intern/bpy_library.c	2011-10-28 04:44:59 UTC (rev 41329)
@@ -310,13 +310,14 @@
 
 static PyObject *bpy_lib_exit(BPy_Library *self, PyObject *UNUSED(args))
 {
+	Main *bmain= CTX_data_main(BPy_GetContext());
 	Main *mainl= NULL;
 	int err= 0;
 
 	flag_all_listbases_ids(LIB_PRE_EXISTING, 1);
 
 	/* here appending/linking starts */
-	mainl= BLO_library_append_begin(CTX_data_main(BPy_GetContext()), &(self->blo_handle), self->relpath);
+	mainl= BLO_library_append_begin(bmain, &(self->blo_handle), self->relpath);
 
 	{
 		int i= 0, code;
@@ -399,7 +400,7 @@
 			/* append, rather than linking */
 			if ((self->flag & FILE_LINK)==0) {
 				Library *lib= BLI_findstring(&G.main->library, self->abspath, offsetof(Library, name));
-				if (lib)  all_local(lib, 1);
+				if (lib)  BKE_library_make_local(bmain, lib, 1);
 				else      BLI_assert(!"cant find name of just added library!");
 			}
 		}

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2011-10-28 04:05:52 UTC (rev 41328)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2011-10-28 04:44:59 UTC (rev 41329)
@@ -1745,7 +1745,7 @@
 	/* append, rather than linking */
 	if((flag & FILE_LINK)==0) {
 		Library *lib= BLI_findstring(&bmain->library, libname, offsetof(Library, filepath));
-		if(lib)	all_local(lib, 1);
+		if(lib)	BKE_library_make_local(bmain, lib, 1);
 		else	BLI_assert(!"cant find name of just added library!");
 	}
 




More information about the Bf-blender-cvs mailing list