[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