|
Blender V4.3
|
#include <sys/stat.h>#include <cstring>#include <dirent.h>#include <unistd.h>#include "MEM_guardedalloc.h"#include "BLI_fileops.h"#include "BLI_path_utils.hh"#include "BLI_string.h"#include "BLI_utildefines.h"#include "DEG_depsgraph.hh"#include "BKE_idtype.hh"#include "BKE_main.hh"#include "BKE_node.hh"#include "BKE_report.hh"#include "BKE_bpath.hh"#include "CLG_log.h"#include "BLI_strict_flags.h"Go to the source code of this file.
Classes | |
| struct | BPathFind_Data |
| struct | BPathRebase_Data |
| struct | BPathRemap_Data |
| struct | PathStore |
Functions | |
Generic Utilities | |
| void | BKE_bpath_summary_report (const BPathSummary &summary, ReportList *reports) |
Generic File Path Traversal API | |
| void | BKE_bpath_foreach_path_id (BPathForeachPathData *bpath_data, ID *id) |
| void | BKE_bpath_foreach_path_main (BPathForeachPathData *bpath_data) |
| bool | BKE_bpath_foreach_path_fixed_process (BPathForeachPathData *bpath_data, char *path, size_t path_maxncpy) |
| bool | BKE_bpath_foreach_path_dirfile_fixed_process (BPathForeachPathData *bpath_data, char *path_dir, size_t path_dir_maxncpy, char *path_file, size_t path_file_maxncpy) |
| bool | BKE_bpath_foreach_path_allocated_process (BPathForeachPathData *bpath_data, char **path) |
Check Missing Files | |
| static bool | check_missing_files_foreach_path_cb (BPathForeachPathData *bpath_data, char *, size_t, const char *path_src) |
| void | BKE_bpath_missing_files_check (Main *bmain, ReportList *reports) |
Rebase Relative Paths | |
| static bool | relative_rebase_foreach_path_cb (BPathForeachPathData *bpath_data, char *path_dst, size_t path_dst_maxncpy, const char *path_src) |
| void | BKE_bpath_relative_rebase (Main *bmain, const char *basedir_src, const char *basedir_dst, ReportList *reports, BPathSummary *r_summary) |
Make Paths Relative Or Absolute | |
| static bool | relative_convert_foreach_path_cb (BPathForeachPathData *bpath_data, char *path_dst, size_t path_dst_maxncpy, const char *path_src) |
| static bool | absolute_convert_foreach_path_cb (BPathForeachPathData *bpath_data, char *path_dst, size_t path_dst_maxncpy, const char *path_src) |
| static void | bpath_absolute_relative_convert (Main *bmain, const char *basedir, ReportList *reports, BPathForeachPathFunctionCallback callback_function, BPathSummary *r_summary) |
| void | BKE_bpath_relative_convert (Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary) |
| void | BKE_bpath_absolute_convert (Main *bmain, const char *basedir, ReportList *reports, BPathSummary *r_summary) |
Backup/Restore/Free paths list functions. | |
| static bool | bpath_list_append (BPathForeachPathData *bpath_data, char *, size_t, const char *path_src) |
| static bool | bpath_list_restore (BPathForeachPathData *bpath_data, char *path_dst, size_t path_dst_maxncpy, const char *path_src) |
| void * | BKE_bpath_list_backup (Main *bmain, const eBPathForeachFlag flag) |
| void | BKE_bpath_list_restore (Main *bmain, const eBPathForeachFlag flag, void *path_list_handle) |
| void | BKE_bpath_list_free (void *path_list_handle) |
Variables | |
| static CLG_LogRef | LOG = {"bke.bpath"} |
Find Missing Files | |
| #define | MAX_DIR_RECURSE 16 |
| #define | FILESIZE_INVALID_DIRECTORY -1 |
| static bool | missing_files_find__recursive (const char *search_directory, const char *filename_src, char r_filepath_new[FILE_MAX], int64_t *r_filesize, int *r_recurse_depth) |
| static bool | missing_files_find_foreach_path_cb (BPathForeachPathData *bpath_data, char *path_dst, size_t path_dst_maxncpy, const char *path_src) |
| void | BKE_bpath_missing_files_find (Main *bmain, const char *searchpath, ReportList *reports, const bool find_all) |
| #define FILESIZE_INVALID_DIRECTORY -1 |
Definition at line 275 of file bpath.cc.
Referenced by missing_files_find__recursive(), and missing_files_find_foreach_path_cb().
| #define MAX_DIR_RECURSE 16 |
Definition at line 274 of file bpath.cc.
Referenced by missing_files_find__recursive().
|
static |
Definition at line 551 of file bpath.cc.
References BKE_idtype_get_info_from_id(), BKE_reportf(), BLI_path_abs(), BLI_path_is_rel(), BLI_strncpy(), FILE_MAX, id_name(), ID::name, IDTypeInfo::name, BPathForeachPathData::owner_id, RPT_WARNING, STRNCPY, and BPathForeachPathData::user_data.
Referenced by BKE_bpath_absolute_convert().
| void BKE_bpath_absolute_convert | ( | Main * | bmain, |
| const char * | basedir, | ||
| ReportList * | reports, | ||
| BPathSummary * | r_summary = nullptr ) |
Make all relative file paths in given bmain absolute, using given basedir as root.
Definition at line 624 of file bpath.cc.
References absolute_convert_foreach_path_cb(), and bpath_absolute_relative_convert().
Referenced by BKE_main_merge(), BLO_write_file_impl(), make_paths_absolute_exec(), and blender::bke::tests::TEST_F().
| bool BKE_bpath_foreach_path_allocated_process | ( | BPathForeachPathData * | bpath_data, |
| char ** | path ) |
Run the callback on a path, replacing the content of the string as needed.
| path | A pointer to a MEM-allocated string. If modified, it will be freed and replaced by a new allocated string. |
Definition at line 185 of file bpath.cc.
References BPathForeachPathData::absolute_base_path, BLI_path_abs(), BLI_strdup(), BPathForeachPathData::callback_function, FILE_MAX, BPathForeachPathData::is_path_modified, MEM_freeN(), and STRNCPY.
Referenced by text_foreach_path().
| bool BKE_bpath_foreach_path_dirfile_fixed_process | ( | BPathForeachPathData * | bpath_data, |
| char * | path_dir, | ||
| size_t | path_dir_maxncpy, | ||
| char * | path_file, | ||
| size_t | path_file_maxncpy ) |
Run the callback on a (directory + file) path, replacing the content of the two strings as needed.
| path_dir | A fixed, FILE_MAXDIR-sized char buffer. |
| path_file | A fixed, FILE_MAXFILE-sized char buffer. |
Definition at line 154 of file bpath.cc.
References BPathForeachPathData::absolute_base_path, BLI_path_abs(), BLI_path_join, BLI_path_split_dir_file(), BPathForeachPathData::callback_function, FILE_MAX, BPathForeachPathData::is_path_modified, and STRNCPY.
Referenced by seq_foreach_path_callback().
| bool BKE_bpath_foreach_path_fixed_process | ( | BPathForeachPathData * | bpath_data, |
| char * | path, | ||
| size_t | path_maxncpy ) |
Run the callback on a path, replacing the content of the string as needed.
| path | A fixed, FILE_MAX-sized char buffer. |
Definition at line 123 of file bpath.cc.
References BPathForeachPathData::absolute_base_path, BLI_path_abs(), BLI_strncpy(), BPathForeachPathData::callback_function, FILE_MAX, BPathForeachPathData::is_path_modified, and STRNCPY.
Referenced by BKE_bpath_foreach_path_id(), brush_foreach_path(), cache_file_foreach_path(), image_foreach_path(), library_foreach_path(), mesh_foreach_path(), movie_clip_foreach_path(), blender::bke::node_foreach_path(), object_foreach_path(), object_foreach_path_pointcache(), seq_foreach_path_callback(), sound_foreach_path(), vfont_foreach_path(), and volume_foreach_path().
| void BKE_bpath_foreach_path_id | ( | BPathForeachPathData * | bpath_data, |
| ID * | id ) |
Run bpath_data.callback_function on all paths contained in id.
Definition at line 73 of file bpath.cc.
References BPathForeachPathData::absolute_base_path, BKE_BPATH_FOREACH_PATH_ABSOLUTE, BKE_bpath_foreach_path_fixed_process(), BKE_bpath_foreach_path_id(), BKE_BPATH_FOREACH_PATH_SKIP_LINKED, BKE_BPATH_TRAVERSE_SKIP_WEAK_REFERENCES, BKE_idtype_get_info_from_id(), BLI_assert, BPathForeachPathData::bmain, DEG_id_tag_update(), BPathForeachPathData::flag, flag, IDTypeInfo::foreach_path, bNodeTree::id, ID_BLEND_PATH, ID_IS_LINKED, ID_RECALC_SOURCE, ID_RECALC_SYNC_TO_EVAL, BPathForeachPathData::is_path_modified, blender::bke::node_tree_from_id(), and BPathForeachPathData::owner_id.
Referenced by BKE_bpath_foreach_path_id(), BKE_bpath_foreach_path_main(), and lib_id_library_local_paths().
| void BKE_bpath_foreach_path_main | ( | BPathForeachPathData * | bpath_data | ) |
Run bpath_data.callback_function on all paths of all IDs in bmain.
Definition at line 114 of file bpath.cc.
References BKE_bpath_foreach_path_id(), BPathForeachPathData::bmain, FOREACH_MAIN_ID_BEGIN, and FOREACH_MAIN_ID_END.
Referenced by BKE_bpath_list_backup(), BKE_bpath_list_restore(), BKE_bpath_missing_files_check(), BKE_bpath_missing_files_find(), BKE_bpath_relative_rebase(), bpath_absolute_relative_convert(), bpy_blend_paths(), clean_paths(), and blender::ed::asset::has_external_files().
| void * BKE_bpath_list_backup | ( | Main * | bmain, |
| eBPathForeachFlag | flag ) |
Temp backup of paths from all IDs in given bmain.
Definition at line 689 of file bpath.cc.
References BKE_bpath_foreach_path_main(), BPathForeachPathData::bmain, bpath_list_append(), flag, and MEM_callocN.
Referenced by BLO_write_file_impl(), and blender::bke::tests::TEST_F().
| void BKE_bpath_list_free | ( | void * | path_list_handle | ) |
Free the temp backup of paths in path_list_handle.
Definition at line 715 of file bpath.cc.
References BLI_assert, BLI_freelistN(), BLI_listbase_is_empty(), and MEM_freeN().
Referenced by BLO_write_file_impl(), and blender::bke::tests::TEST_F().
| void BKE_bpath_list_restore | ( | Main * | bmain, |
| eBPathForeachFlag | flag, | ||
| void * | path_list_handle ) |
Restore the temp backup of paths from path_list_handle into all IDs in given bmain.
Definition at line 703 of file bpath.cc.
References BKE_bpath_foreach_path_main(), BPathForeachPathData::bmain, bpath_list_restore(), and flag.
Referenced by BLO_write_file_impl(), and blender::bke::tests::TEST_F().
| void BKE_bpath_missing_files_check | ( | Main * | bmain, |
| ReportList * | reports ) |
Check for missing files.
Definition at line 253 of file bpath.cc.
References BKE_BPATH_FOREACH_PATH_ABSOLUTE, BKE_bpath_foreach_path_main(), BKE_BPATH_FOREACH_PATH_RESOLVE_TOKEN, BKE_BPATH_FOREACH_PATH_SKIP_PACKED, BKE_BPATH_TRAVERSE_SKIP_WEAK_REFERENCES, BKE_reportf(), BLI_listbase_is_empty(), BPathForeachPathData::bmain, check_missing_files_foreach_path_cb(), ReportList::list, and RPT_INFO.
Referenced by report_missing_files_exec().
| void BKE_bpath_missing_files_find | ( | Main * | bmain, |
| const char * | searchpath, | ||
| ReportList * | reports, | ||
| bool | find_all ) |
Recursively search into given search directory, for all file paths of all IDs in given bmain, and replace existing paths as needed.
| searchpath | The root directory in which the new filepaths should be searched for. |
| find_all | If true, also search for files which current path is still valid, if false skip those still valid paths. |
Definition at line 404 of file bpath.cc.
References BPathFind_Data::basedir, BKE_BPATH_FOREACH_PATH_ABSOLUTE, BKE_bpath_foreach_path_main(), BKE_BPATH_FOREACH_PATH_RELOAD_EDITED, BKE_BPATH_FOREACH_PATH_RESOLVE_TOKEN, BKE_BPATH_TRAVERSE_SKIP_WEAK_REFERENCES, BKE_main_blendfile_path(), BPathForeachPathData::bmain, data, flag, and missing_files_find_foreach_path_cb().
Referenced by find_missing_files_exec().
| void BKE_bpath_relative_convert | ( | Main * | bmain, |
| const char * | basedir, | ||
| ReportList * | reports, | ||
| BPathSummary * | r_summary = nullptr ) |
Make all absolute file paths in given bmain relative to given basedir.
Definition at line 615 of file bpath.cc.
References bpath_absolute_relative_convert(), and relative_convert_foreach_path_cb().
Referenced by BLO_write_file_impl(), make_paths_relative_exec(), and blender::bke::tests::TEST_F().
| void BKE_bpath_relative_rebase | ( | Main * | bmain, |
| const char * | basedir_src, | ||
| const char * | basedir_dst, | ||
| ReportList * | reports, | ||
| BPathSummary * | r_summary = nullptr ) |
Rebase all relative file paths in given bmain from basedir_src to basedir_dst.
Definition at line 475 of file bpath.cc.
References BKE_bpath_foreach_path_main(), BKE_BPATH_FOREACH_PATH_SKIP_LINKED, BKE_BPATH_FOREACH_PATH_SKIP_MULTIFILE, BLI_assert, BPathForeachPathData::bmain, data, flag, and relative_rebase_foreach_path_cb().
Referenced by BKE_main_merge(), BLO_write_file_impl(), blender::bke::tests::TEST_F(), and blender::bke::tests::TEST_F().
| void BKE_bpath_summary_report | ( | const BPathSummary & | summary, |
| ReportList * | reports ) |
Definition at line 57 of file bpath.cc.
References BKE_reportf(), BPathSummary::count_changed, BPathSummary::count_failed, BPathSummary::count_total, RPT_INFO, and RPT_WARNING.
Referenced by make_paths_absolute_exec(), and make_paths_relative_exec().
|
static |
Definition at line 585 of file bpath.cc.
References BKE_bpath_foreach_path_main(), BKE_BPATH_FOREACH_PATH_SKIP_LINKED, BLI_assert, BPathForeachPathData::bmain, CLOG_ERROR, data, flag, and LOG.
Referenced by BKE_bpath_absolute_convert(), and BKE_bpath_relative_convert().
|
static |
Definition at line 646 of file bpath.cc.
References BLI_addtail(), PathStore::filepath, MEM_mallocN, and BPathForeachPathData::user_data.
Referenced by BKE_bpath_list_backup().
|
static |
Definition at line 665 of file bpath.cc.
References BLI_assert, BLI_freelinkN(), BLI_listbase_is_empty(), BLI_strncpy(), PathStore::filepath, ListBase::first, STREQ, and BPathForeachPathData::user_data.
Referenced by BKE_bpath_list_restore().
|
static |
Definition at line 218 of file bpath.cc.
References BKE_reportf(), BLI_exists(), Library_Runtime::filepath_abs, ID_IS_LINKED, ID::lib, ID::name, BPathForeachPathData::owner_id, RPT_WARNING, Library::runtime, and BPathForeachPathData::user_data.
Referenced by BKE_bpath_missing_files_check().
|
static |
Find the given filename recursively in the given search directory and its sub-directories.
| search_directory | Directory to search in. |
| filename_src | Search for this filename. |
| r_filepath_new | The path of the new found file will be copied here, caller must initialize as empty string. |
| r_filesize | Size of the file, FILESIZE_INVALID_DIRECTORY if search directory could not be opened. |
| r_recurse_depth | Current recursion depth. |
Definition at line 292 of file bpath.cc.
References BLI_path_join, BLI_path_ncmp, BLI_stat(), BLI_strncpy(), CLOG_WARN, closedir(), FILE_MAX, FILENAME_IS_CURRPAR, FILESIZE_INVALID_DIRECTORY, LOG, MAX_DIR_RECURSE, missing_files_find__recursive(), opendir(), readdir(), S_ISDIR, S_ISREG, and size().
Referenced by missing_files_find__recursive(), and missing_files_find_foreach_path_cb().
|
static |
Definition at line 359 of file bpath.cc.
References BKE_reportf(), BLI_exists(), BLI_path_basename(), BLI_path_is_rel(), BLI_path_rel(), BLI_strncpy(), FILE_MAX, FILESIZE_INVALID_DIRECTORY, missing_files_find__recursive(), RPT_WARNING, and BPathForeachPathData::user_data.
Referenced by BKE_bpath_missing_files_find().
|
static |
Definition at line 516 of file bpath.cc.
References BKE_idtype_get_info_from_id(), BKE_reportf(), BLI_path_is_rel(), BLI_path_rel(), BLI_strncpy(), FILE_MAX, id_name(), ID::name, IDTypeInfo::name, BPathForeachPathData::owner_id, RPT_WARNING, STRNCPY, and BPathForeachPathData::user_data.
Referenced by BKE_bpath_relative_convert().
|
static |
Definition at line 443 of file bpath.cc.
References BKE_reportf(), BLI_path_abs(), BLI_path_is_rel(), BLI_path_normalize(), BLI_path_rel(), BLI_strncpy(), FILE_MAX, FILE_MAXDIR, FILE_MAXFILE, RPT_WARNING, and BPathForeachPathData::user_data.
Referenced by BKE_bpath_relative_rebase().
|
static |
Definition at line 51 of file bpath.cc.
Referenced by bpath_absolute_relative_convert(), and missing_files_find__recursive().