2022-02-11 09:07:11 +11:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
2007-12-20 10:27:13 +00:00
|
|
|
|
2019-02-18 08:08:12 +11:00
|
|
|
/** \file
|
|
|
|
|
* \ingroup bke
|
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
2021-11-29 14:20:58 +01:00
|
|
|
*
|
|
|
|
|
* \warning All paths manipulated by this API are assumed to be either constant char buffers of
|
|
|
|
|
* `FILE_MAX` size, or allocated char buffers not bigger than `FILE_MAX`.
|
2011-02-18 13:58:08 +00:00
|
|
|
*/
|
2007-12-20 10:27:13 +00:00
|
|
|
|
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
2021-11-29 14:20:58 +01:00
|
|
|
/* TODO: Make this module handle a bit more safely string length, instead of assuming buffers are
|
2021-11-30 09:04:50 +11:00
|
|
|
* FILE_MAX length etc. */
|
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
2021-11-29 14:20:58 +01:00
|
|
|
|
2012-12-15 15:31:50 +00:00
|
|
|
#pragma once
|
2010-05-11 07:08:32 +00:00
|
|
|
|
2020-03-02 15:07:49 +01:00
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
#endif
|
|
|
|
|
|
2011-10-23 17:52:20 +00:00
|
|
|
struct ID;
|
2011-10-27 05:34:39 +00:00
|
|
|
struct ListBase;
|
|
|
|
|
struct Main;
|
|
|
|
|
struct ReportList;
|
2008-04-25 16:09:16 +00:00
|
|
|
|
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
2021-11-29 14:20:58 +01:00
|
|
|
/** \name Core `foreach_path` API.
|
|
|
|
|
* \{ */
|
|
|
|
|
|
|
|
|
|
typedef enum eBPathForeachFlag {
|
|
|
|
|
/** Flags controlling the behavior of the generic BPath API. */
|
|
|
|
|
|
|
|
|
|
/** Ensures the `absolute_base_path` member of #BPathForeachPathData is initialized properly with
|
|
|
|
|
* the path of the current .blend file. This can be used by the callbacks to convert relative
|
|
|
|
|
* paths to absolute ones. */
|
|
|
|
|
BKE_BPATH_FOREACH_PATH_ABSOLUTE = (1 << 0),
|
|
|
|
|
/** Skip paths of linked IDs. */
|
|
|
|
|
BKE_BPATH_FOREACH_PATH_SKIP_LINKED = (1 << 1),
|
|
|
|
|
/** Skip paths when their matching data is packed. */
|
|
|
|
|
BKE_BPATH_FOREACH_PATH_SKIP_PACKED = (1 << 2),
|
UDIM: Support virtual filenames
This implements the design detailed in T92696 to support virtual
filenames for UDIM textures. Currently, the following 2 substitution
tokens are supported:
| Token | Meaning |
| ----- | ---- |
| <UDIM> | 1001 + u-tile + v-tile * 10 |
| <UVTILE> | Equivalent to u<u-tile + 1>_v<v-tile + 1> |
Example for u-tile of 3 and v-tile of 1:
filename.<UDIM>_ver0023.png --> filename.1014_ver0023.png
filename.<UVTILE>_ver0023.png --> filename.u4_v2_ver0023.png
For image loading, the existing workflow is unchanged. A user can select
one or more image files, belonging to one or more UDIM tile sets, and
have Blender load them all as it does today. Now the <UVTILE> format is
"guessed" just as the <UDIM> format was guessed before.
If guessing fails, the user can simply go into the Image Editor and type
the proper substitution in the filename. Once typing is complete,
Blender will reload the files and correctly fill the tiles. This
workflow is new as attempting to fix the guessing in current versions
did not really work, and the user was often stuck with a confusing
situation.
For image saving, the existing workflow is changed slightly. Currently,
when saving, a user has to be sure to type the filename of the first
tile (e.g. filename.1001.png) to save the entire UDIM set. The number
could differ if they start at a different tile etc. This is confusing.
Now, the user should type a filename containing the appropriate
substitution token. By default Blender will fill in a default name using
the <UDIM> token but the user is free to save out images using <UVTILE>
if they wish.
Differential Revision: https://developer.blender.org/D13057
2021-12-30 22:06:23 -08:00
|
|
|
/** Resolve tokens within a virtual filepath to a single, concrete, filepath. */
|
|
|
|
|
BKE_BPATH_FOREACH_PATH_RESOLVE_TOKEN = (1 << 3),
|
2021-11-30 10:41:23 +01:00
|
|
|
/* Skip weak reference paths. Those paths are typically 'nice to have' extra information, but are
|
|
|
|
|
* not used as actual source of data by the current .blend file.
|
|
|
|
|
*
|
|
|
|
|
* NOTE: Currently this only concerns the weak reference to a library file stored in
|
|
|
|
|
* `ID::library_weak_reference`. */
|
|
|
|
|
BKE_BPATH_TRAVERSE_SKIP_WEAK_REFERENCES = (1 << 5),
|
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
2021-11-29 14:20:58 +01:00
|
|
|
|
|
|
|
|
/** Flags not affecting the generic BPath API. Those may be used by specific IDTypeInfo
|
|
|
|
|
* `foreach_path` implementations and/or callbacks to implement specific behaviors. */
|
|
|
|
|
|
|
|
|
|
/** Skip paths where a single dir is used with an array of files, eg. sequence strip images or
|
2021-11-30 09:04:50 +11:00
|
|
|
* point-caches. In this case only use the first file path is processed.
|
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
2021-11-29 14:20:58 +01:00
|
|
|
*
|
|
|
|
|
* This is needed for directory manipulation callbacks which might otherwise modify the same
|
|
|
|
|
* directory multiple times. */
|
|
|
|
|
BKE_BPATH_FOREACH_PATH_SKIP_MULTIFILE = (1 << 8),
|
|
|
|
|
/** Reload data (when the path is edited).
|
2021-11-30 09:04:50 +11:00
|
|
|
* \note Only used by Image IDType currently. */
|
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
2021-11-29 14:20:58 +01:00
|
|
|
BKE_BPATH_FOREACH_PATH_RELOAD_EDITED = (1 << 9),
|
|
|
|
|
} eBPathForeachFlag;
|
|
|
|
|
|
|
|
|
|
struct BPathForeachPathData;
|
|
|
|
|
|
|
|
|
|
/** Callback used to iterate over an ID's file paths.
|
|
|
|
|
*
|
|
|
|
|
* \note `path`s parameters should be considered as having a maximal `FILE_MAX` string length.
|
|
|
|
|
*
|
|
|
|
|
* \return `true` if the path has been changed, and in that case, result should be written into
|
|
|
|
|
* `r_path_dst`. */
|
|
|
|
|
typedef bool (*BPathForeachPathFunctionCallback)(struct BPathForeachPathData *bpath_data,
|
|
|
|
|
char *r_path_dst,
|
|
|
|
|
const char *path_src);
|
|
|
|
|
|
2021-11-30 09:04:50 +11:00
|
|
|
/** Storage for common data needed across the BPath 'foreach_path' code. */
|
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
2021-11-29 14:20:58 +01:00
|
|
|
typedef struct BPathForeachPathData {
|
|
|
|
|
struct Main *bmain;
|
|
|
|
|
|
|
|
|
|
BPathForeachPathFunctionCallback callback_function;
|
|
|
|
|
eBPathForeachFlag flag;
|
|
|
|
|
|
|
|
|
|
void *user_data;
|
|
|
|
|
|
|
|
|
|
/* 'Private' data, caller don't need to set those. */
|
|
|
|
|
|
|
|
|
|
/** The root to use as base for relative paths. Only set if `BKE_BPATH_FOREACH_PATH_ABSOLUTE`
|
|
|
|
|
* flag is set, NULL otherwise. */
|
|
|
|
|
const char *absolute_base_path;
|
|
|
|
|
} BPathForeachPathData;
|
|
|
|
|
|
|
|
|
|
/** Run `bpath_data.callback_function` on all paths contained in `id`. */
|
|
|
|
|
void BKE_bpath_foreach_path_id(BPathForeachPathData *bpath_data, struct ID *id);
|
|
|
|
|
|
|
|
|
|
/** Run `bpath_data.callback_function` on all paths of all IDs in `bmain`. */
|
|
|
|
|
void BKE_bpath_foreach_path_main(BPathForeachPathData *bpath_data);
|
|
|
|
|
|
|
|
|
|
/** \} */
|
|
|
|
|
|
|
|
|
|
/** \name Helpers to handle common cases from `IDTypeInfo`'s `foreach_path` functions.
|
|
|
|
|
* \{ */
|
|
|
|
|
|
|
|
|
|
/* TODO: Investigate using macros around those calls to check a bit better about actual
|
|
|
|
|
* strings/buffers length (e,g, with static asserts). */
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Run the callback on a path, replacing the content of the string as needed.
|
|
|
|
|
*
|
|
|
|
|
* \param path: A fixed, FILE_MAX-sized char buffer.
|
|
|
|
|
*
|
|
|
|
|
* \return true is \a path was modified, false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
bool BKE_bpath_foreach_path_fixed_process(struct BPathForeachPathData *bpath_data, char *path);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Run the callback on a (directory + file) path, replacing the content of the two strings as
|
|
|
|
|
* needed.
|
|
|
|
|
*
|
|
|
|
|
* \param path_dir: A fixed, FILE_MAXDIR-sized char buffer.
|
|
|
|
|
* \param path_file: A fixed, FILE_MAXFILE-sized char buffer.
|
|
|
|
|
*
|
|
|
|
|
* \return true is \a path_dir and/or \a path_file were modified, false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
bool BKE_bpath_foreach_path_dirfile_fixed_process(struct BPathForeachPathData *bpath_data,
|
|
|
|
|
char *path_dir,
|
|
|
|
|
char *path_file);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Run the callback on a path, replacing the content of the string as needed.
|
|
|
|
|
*
|
|
|
|
|
* \param path: A pointer to a MEM-allocated string. If modified, it will be freed and replaced by
|
|
|
|
|
* a new allocated string.
|
|
|
|
|
* \note path is expected to be FILE_MAX size or smaller.
|
|
|
|
|
*
|
|
|
|
|
* \return true is \a path was modified and re-allocated, false otherwise.
|
|
|
|
|
*/
|
|
|
|
|
bool BKE_bpath_foreach_path_allocated_process(struct BPathForeachPathData *bpath_data,
|
|
|
|
|
char **path);
|
|
|
|
|
|
|
|
|
|
/** \} */
|
|
|
|
|
|
|
|
|
|
/** \name High level features.
|
|
|
|
|
* \{ */
|
|
|
|
|
|
|
|
|
|
/** Check for missing files. */
|
2012-12-15 15:31:50 +00:00
|
|
|
void BKE_bpath_missing_files_check(struct Main *bmain, struct ReportList *reports);
|
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
2021-11-29 14:20:58 +01:00
|
|
|
|
|
|
|
|
/** Recursively search into given search directory, for all file paths of all IDs in given \a
|
|
|
|
|
* bmain, and replace existing paths as needed.
|
|
|
|
|
*
|
|
|
|
|
* \note The search will happen into the whole search directory tree recursively (with a limit of
|
|
|
|
|
* MAX_DIR_RECURSE), if several files are found matching a searched filename, the biggest one will
|
|
|
|
|
* be used. This is so that things like thumbnails don't get selected instead of the actual image
|
|
|
|
|
* e.g.
|
|
|
|
|
*
|
|
|
|
|
* \param searchpath: The root directory in which the new filepaths should be searched for.
|
|
|
|
|
* \param find_all: If `true`, also search for files which current path is still valid, if `false`
|
|
|
|
|
* skip those still valid paths.
|
|
|
|
|
* */
|
2013-06-24 02:57:06 +00:00
|
|
|
void BKE_bpath_missing_files_find(struct Main *bmain,
|
|
|
|
|
const char *searchpath,
|
|
|
|
|
struct ReportList *reports,
|
2022-01-07 11:38:08 +11:00
|
|
|
bool find_all);
|
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
2021-11-29 14:20:58 +01:00
|
|
|
|
|
|
|
|
/** Rebase all relative file paths in given \a bmain from \a basedir_src to \a basedir_dst. */
|
2020-02-18 22:03:07 +11:00
|
|
|
void BKE_bpath_relative_rebase(struct Main *bmain,
|
|
|
|
|
const char *basedir_src,
|
|
|
|
|
const char *basedir_dst,
|
|
|
|
|
struct ReportList *reports);
|
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
2021-11-29 14:20:58 +01:00
|
|
|
|
|
|
|
|
/** Make all absolute file paths in given \a bmain relative to given \a basedir. */
|
2012-12-15 15:31:50 +00:00
|
|
|
void BKE_bpath_relative_convert(struct Main *bmain,
|
|
|
|
|
const char *basedir,
|
|
|
|
|
struct ReportList *reports);
|
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
2021-11-29 14:20:58 +01:00
|
|
|
|
|
|
|
|
/** Make all relative file paths in given \a bmain absolute, using given \a basedir as root. */
|
2012-12-15 15:31:50 +00:00
|
|
|
void BKE_bpath_absolute_convert(struct Main *bmain,
|
|
|
|
|
const char *basedir,
|
|
|
|
|
struct ReportList *reports);
|
2010-05-11 07:08:32 +00:00
|
|
|
|
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
2021-11-29 14:20:58 +01:00
|
|
|
/** Temp backup of paths from all IDs in given \a bmain.
|
|
|
|
|
*
|
|
|
|
|
* \return An opaque handle to pass to #BKE_bpath_list_restore and #BKE_bpath_list_free.
|
|
|
|
|
*/
|
2022-01-07 11:38:08 +11:00
|
|
|
void *BKE_bpath_list_backup(struct Main *bmain, eBPathForeachFlag flag);
|
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
2021-11-29 14:20:58 +01:00
|
|
|
|
|
|
|
|
/** Restore the temp backup of paths from \a path_list_handle into all IDs in given \a bmain.
|
|
|
|
|
*
|
|
|
|
|
* \note This function assumes that the data in given Main did not change (no
|
|
|
|
|
* addition/deletion/re-ordering of IDs, or their file paths) since the call to
|
|
|
|
|
* #BKE_bpath_list_backup that generated the given \a path_list_handle. */
|
2022-01-07 11:38:08 +11:00
|
|
|
void BKE_bpath_list_restore(struct Main *bmain, eBPathForeachFlag flag, void *path_list_handle);
|
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
2021-11-29 14:20:58 +01:00
|
|
|
|
|
|
|
|
/** Free the temp backup of paths in \a path_list_handle.
|
|
|
|
|
*
|
|
|
|
|
* \note This function assumes that the path list has already been restored with a call to
|
|
|
|
|
* #BKE_bpath_list_restore, and is therefore empty. */
|
|
|
|
|
void BKE_bpath_list_free(void *path_list_handle);
|
|
|
|
|
|
|
|
|
|
/** \} */
|
|
|
|
|
|
2020-03-02 15:07:49 +01:00
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|