Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <mont29>2021-11-29 16:20:58 +0300
committerBastien Montagne <bastien@blender.org>2021-11-29 16:22:38 +0300
commite5e8db73df86ee04260c5f2bd2c61dfa8eb7943f (patch)
tree46a5840efb51a363f17e64b93d5132679a5dbec4 /source/blender/python
parent6ae34bb0714859d9ef0b7fa2aceb16b4531df48f (diff)
Refactor BKE_bpath module.
The main goal of this refactor is to make BPath module use `IDTypeInfo`, and move each ID-specific part of the `foreach_path` looper into their own IDTypeInfo struct, using a new `foreach_path` callback. Additionally, following improvements/cleanups are included: * Attempt to get better, more consistent namings. ** In particular, move from `path_visitor` to more standard `foreach_path`. * Update and extend documentation. ** API doc was moved to header, according to recent discussions on this topic. * Remove `BKE_bpath_relocate_visitor` from API, this is specific callback that belongs in `lib_id.c` user code. NOTE: This commit is expected to be 100% non-behavioral-change. This implies that several potential further changes were only noted as comments (like using a more generic solution for `lib_id_library_local_paths`, addressing inconsistencies like path of packed libraries always being skipped, regardless of the `BKE_BPATH_FOREACH_PATH_SKIP_PACKED` `eBPathForeachFlag` flag value, etc.). NOTE: basic unittests were added to master already in rBdcc500e5a265093bc9cc. Reviewed By: brecht Differential Revision: https://developer.blender.org/D13381
Diffstat (limited to 'source/blender/python')
-rw-r--r--source/blender/python/intern/bpy.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c
index 3377b2c283e..22d54ad72ba 100644
--- a/source/blender/python/intern/bpy.c
+++ b/source/blender/python/intern/bpy.c
@@ -94,10 +94,13 @@ static PyObject *bpy_script_paths(PyObject *UNUSED(self))
return ret;
}
-static bool bpy_blend_paths_visit_cb(void *userdata, char *UNUSED(path_dst), const char *path_src)
+static bool bpy_blend_foreach_path_cb(BPathForeachPathData *bpath_data,
+ char *UNUSED(path_dst),
+ const char *path_src)
{
- PyList_APPEND((PyObject *)userdata, PyC_UnicodeFromByte(path_src));
- return false; /* never edits the path */
+ PyObject *py_list = bpath_data->user_data;
+ PyList_APPEND(py_list, PyC_UnicodeFromByte(path_src));
+ return false; /* Never edits the path. */
}
PyDoc_STRVAR(bpy_blend_paths_doc,
@@ -115,7 +118,7 @@ PyDoc_STRVAR(bpy_blend_paths_doc,
" :rtype: list of strings\n");
static PyObject *bpy_blend_paths(PyObject *UNUSED(self), PyObject *args, PyObject *kw)
{
- int flag = 0;
+ eBPathForeachFlag flag = 0;
PyObject *list;
bool absolute = false;
@@ -137,18 +140,21 @@ static PyObject *bpy_blend_paths(PyObject *UNUSED(self), PyObject *args, PyObjec
}
if (absolute) {
- flag |= BKE_BPATH_TRAVERSE_ABS;
+ flag |= BKE_BPATH_FOREACH_PATH_ABSOLUTE;
}
if (!packed) {
- flag |= BKE_BPATH_TRAVERSE_SKIP_PACKED;
+ flag |= BKE_BPATH_FOREACH_PATH_SKIP_PACKED;
}
if (local) {
- flag |= BKE_BPATH_TRAVERSE_SKIP_LIBRARY;
+ flag |= BKE_BPATH_FOREACH_PATH_SKIP_LINKED;
}
list = PyList_New(0);
- BKE_bpath_traverse_main(G_MAIN, bpy_blend_paths_visit_cb, flag, (void *)list);
+ BKE_bpath_foreach_path_main(&(BPathForeachPathData){.bmain = G_MAIN,
+ .callback_function = bpy_blend_foreach_path_cb,
+ .flag = flag,
+ .user_data = list});
return list;
}