diff options
-rw-r--r-- | source/blender/blenkernel/BKE_bpath.h | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/bpath.c | 3 | ||||
-rw-r--r-- | source/blender/editors/asset/intern/asset_ops.cc | 5 |
3 files changed, 11 insertions, 3 deletions
diff --git a/source/blender/blenkernel/BKE_bpath.h b/source/blender/blenkernel/BKE_bpath.h index 338aec4ae4f..bae151f6a72 100644 --- a/source/blender/blenkernel/BKE_bpath.h +++ b/source/blender/blenkernel/BKE_bpath.h @@ -49,6 +49,12 @@ typedef enum eBPathForeachFlag { BKE_BPATH_FOREACH_PATH_SKIP_LINKED = (1 << 1), /** Skip paths when their matching data is packed. */ BKE_BPATH_FOREACH_PATH_SKIP_PACKED = (1 << 2), + /* 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), /** Flags not affecting the generic BPath API. Those may be used by specific IDTypeInfo * `foreach_path` implementations and/or callbacks to implement specific behaviors. */ diff --git a/source/blender/blenkernel/intern/bpath.c b/source/blender/blenkernel/intern/bpath.c index cea21d2a946..85e49774dfd 100644 --- a/source/blender/blenkernel/intern/bpath.c +++ b/source/blender/blenkernel/intern/bpath.c @@ -103,7 +103,8 @@ void BKE_bpath_foreach_path_id(BPathForeachPathData *bpath_data, ID *id) return; } - if (id->library_weak_reference != NULL) { + if (id->library_weak_reference != NULL && + (flag & BKE_BPATH_TRAVERSE_SKIP_WEAK_REFERENCES) == 0) { BKE_bpath_foreach_path_fixed_process(bpath_data, id->library_weak_reference->library_filepath); } diff --git a/source/blender/editors/asset/intern/asset_ops.cc b/source/blender/editors/asset/intern/asset_ops.cc index 6e81908c24e..c7644288959 100644 --- a/source/blender/editors/asset/intern/asset_ops.cc +++ b/source/blender/editors/asset/intern/asset_ops.cc @@ -906,8 +906,9 @@ static bool has_external_files(Main *bmain, struct ReportList *reports) struct FileCheckCallbackInfo callback_info = {reports, false}; eBPathForeachFlag flag = static_cast<eBPathForeachFlag>( - BKE_BPATH_FOREACH_PATH_SKIP_PACKED /* Packed files are fine. */ - | BKE_BPATH_FOREACH_PATH_SKIP_MULTIFILE); /* Only report multi-files once, it's enough. */ + BKE_BPATH_FOREACH_PATH_SKIP_PACKED /* Packed files are fine. */ + | BKE_BPATH_FOREACH_PATH_SKIP_MULTIFILE /* Only report multi-files once, it's enough. */ + | BKE_BPATH_TRAVERSE_SKIP_WEAK_REFERENCES); /* Only care about actually used files. */ BPathForeachPathData bpath_data = { /* bmain */ bmain, |