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:
authorCampbell Barton <ideasman42@gmail.com>2020-02-18 14:03:07 +0300
committerCampbell Barton <ideasman42@gmail.com>2020-02-18 14:12:34 +0300
commitf7386b97571e0207281f4504f45e13d4beb1c25b (patch)
treebb0a0ebb63b15f8a1e4841a9c2c5e884f44d8f7d /source/blender/blenloader/intern
parentd4e38d99b20209b3ddf1488f00a8fbc1a7b785e9 (diff)
Fix T62612: Saving with "Remap Relative" makes ALL paths relative
Diffstat (limited to 'source/blender/blenloader/intern')
-rw-r--r--source/blender/blenloader/intern/writefile.c43
1 files changed, 20 insertions, 23 deletions
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 643c2805487..7076ed906c1 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -4056,41 +4056,38 @@ bool BLO_write_file(Main *mainvar,
return 0;
}
- /* check if we need to backup and restore paths */
- if (UNLIKELY((write_flags & G_FILE_RELATIVE_REMAP) && (G_FILE_SAVE_COPY & write_flags))) {
- path_list_backup = BKE_bpath_list_backup(mainvar, path_list_flag);
- }
-
- /* remapping of relative paths to new file location */
+ /* Remapping of relative paths to new file location. */
if (write_flags & G_FILE_RELATIVE_REMAP) {
- char dir1[FILE_MAX];
- char dir2[FILE_MAX];
- BLI_split_dir_part(filepath, dir1, sizeof(dir1));
- BLI_split_dir_part(mainvar->name, dir2, sizeof(dir2));
+ char dir_src[FILE_MAX];
+ char dir_dst[FILE_MAX];
+ BLI_split_dir_part(mainvar->name, dir_src, sizeof(dir_src));
+ BLI_split_dir_part(filepath, dir_dst, sizeof(dir_dst));
/* just in case there is some subtle difference */
- BLI_cleanup_dir(mainvar->name, dir1);
- BLI_cleanup_dir(mainvar->name, dir2);
+ BLI_cleanup_dir(mainvar->name, dir_dst);
+ BLI_cleanup_dir(mainvar->name, dir_src);
- if (G.relbase_valid && (BLI_path_cmp(dir1, dir2) == 0)) {
+ if (G.relbase_valid && (BLI_path_cmp(dir_dst, dir_src) == 0)) {
+ /* Saved to same path. Nothing to do. */
write_flags &= ~G_FILE_RELATIVE_REMAP;
}
else {
+ /* Check if we need to backup and restore paths. */
+ if (UNLIKELY(G_FILE_SAVE_COPY & write_flags)) {
+ path_list_backup = BKE_bpath_list_backup(mainvar, path_list_flag);
+ }
+
if (G.relbase_valid) {
- /* blend may not have been saved before. Tn this case
- * we should not have any relative paths, but if there
- * is somehow, an invalid or empty G_MAIN->name it will
- * print an error, don't try make the absolute in this case. */
- BKE_bpath_absolute_convert(mainvar, BKE_main_blendfile_path_from_global(), NULL);
+ /* Saved, make relative paths relative to new location (if possible). */
+ BKE_bpath_relative_rebase(mainvar, dir_src, dir_dst, NULL);
+ }
+ else {
+ /* Unsaved, make all relative. */
+ BKE_bpath_relative_convert(mainvar, dir_dst, NULL);
}
}
}
- if (write_flags & G_FILE_RELATIVE_REMAP) {
- /* note, making relative to something OTHER then G_MAIN->name */
- BKE_bpath_relative_convert(mainvar, filepath, NULL);
- }
-
/* actual file writing */
const bool err = write_file_handle(mainvar, &ww, NULL, NULL, write_flags, thumb);