Fix for committing paths which start out with absolute remapping "_" prefix
This commit is contained in:
@@ -505,12 +505,53 @@ class bam_commands:
|
|||||||
print("Nothing to commit!")
|
print("Nothing to commit!")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
# we need to update paths_remap as we go
|
||||||
|
with open(os.path.join(session_rootdir, ".bam_paths_remap.json")) as f:
|
||||||
|
paths_remap = json.load(f)
|
||||||
|
paths_remap_relbase = paths_remap.get(".", "")
|
||||||
|
|
||||||
|
def remap_cb(f, data):
|
||||||
|
# check for the absolute path hint
|
||||||
|
if f.startswith(b'//_'):
|
||||||
|
proj_base_b = data
|
||||||
|
return b'//' + os.path.relpath(f[3:], proj_base_b)
|
||||||
|
return None
|
||||||
|
|
||||||
for f_rel, f_abs in list(paths_modified.items()):
|
for f_rel, f_abs in list(paths_modified.items()):
|
||||||
# we may want to be more clever here
|
# we may want to be more clever here
|
||||||
|
|
||||||
|
if 1:
|
||||||
|
f_abs_remap = os.path.join(basedir_temp, f_rel)
|
||||||
|
dir_remap = os.path.dirname(f_abs_remap)
|
||||||
|
os.makedirs(dir_remap, exist_ok=True)
|
||||||
|
|
||||||
|
# final location in the project
|
||||||
|
f_rel_in_proj = paths_remap.get(f_rel)
|
||||||
|
if f_rel_in_proj is None:
|
||||||
|
if paths_remap_relbase:
|
||||||
|
f_rel_in_proj = os.path.join(paths_remap_relbase, f_rel)
|
||||||
|
else:
|
||||||
|
f_rel_in_proj = f_rel
|
||||||
|
proj_base_b = os.path.dirname(f_rel_in_proj).encode("utf-8")
|
||||||
|
|
||||||
|
import blendfile_pack_restore
|
||||||
|
blendfile_pack_restore.blendfile_remap(
|
||||||
|
f_abs.encode('utf-8'),
|
||||||
|
dir_remap.encode('utf-8'),
|
||||||
|
deps_remap_cb=remap_cb,
|
||||||
|
deps_remap_cb_userdata=proj_base_b,
|
||||||
|
)
|
||||||
|
|
||||||
|
if os.path.exists(f_abs_remap):
|
||||||
|
f_abs = f_abs_remap
|
||||||
|
paths_modified[f_rel] = f_abs
|
||||||
|
|
||||||
|
else:
|
||||||
deps = deps_remap.get(f_rel)
|
deps = deps_remap.get(f_rel)
|
||||||
if deps:
|
if deps:
|
||||||
# ----
|
# ----
|
||||||
# Remap!
|
# remap!
|
||||||
f_abs_remap = os.path.join(basedir_temp, f_rel)
|
f_abs_remap = os.path.join(basedir_temp, f_rel)
|
||||||
dir_remap = os.path.dirname(f_abs_remap)
|
dir_remap = os.path.dirname(f_abs_remap)
|
||||||
os.makedirs(dir_remap, exist_ok=True)
|
os.makedirs(dir_remap, exist_ok=True)
|
||||||
@@ -523,9 +564,9 @@ class bam_commands:
|
|||||||
)
|
)
|
||||||
if os.path.exists(f_abs_remap):
|
if os.path.exists(f_abs_remap):
|
||||||
f_abs = f_abs_remap
|
f_abs = f_abs_remap
|
||||||
|
|
||||||
paths_modified[f_rel] = f_abs
|
paths_modified[f_rel] = f_abs
|
||||||
|
|
||||||
|
|
||||||
# -------------------------
|
# -------------------------
|
||||||
print("Now make a zipfile")
|
print("Now make a zipfile")
|
||||||
import zipfile
|
import zipfile
|
||||||
@@ -547,9 +588,6 @@ class bam_commands:
|
|||||||
sort_keys=True, indent=4, separators=(',', ': '),
|
sort_keys=True, indent=4, separators=(',', ': '),
|
||||||
).encode('utf-8'))
|
).encode('utf-8'))
|
||||||
|
|
||||||
with open(os.path.join(session_rootdir, ".bam_paths_remap.json")) as f:
|
|
||||||
paths_remap = json.load(f)
|
|
||||||
|
|
||||||
paths_remap_subset = {k: v for k, v in paths_remap.items() if k in paths_modified}
|
paths_remap_subset = {k: v for k, v in paths_remap.items() if k in paths_modified}
|
||||||
paths_remap_subset.update(paths_remap_subset_add)
|
paths_remap_subset.update(paths_remap_subset_add)
|
||||||
write_dict_as_json(".bam_paths_remap.json", paths_remap_subset)
|
write_dict_as_json(".bam_paths_remap.json", paths_remap_subset)
|
||||||
|
@@ -29,7 +29,11 @@ VERBOSE = 1
|
|||||||
import blendfile_path_walker
|
import blendfile_path_walker
|
||||||
|
|
||||||
|
|
||||||
def blendfile_remap(blendfile_src, blendpath_dst, deps_remap):
|
def blendfile_remap(
|
||||||
|
blendfile_src, blendpath_dst,
|
||||||
|
deps_remap=None, deps_remap_cb=None,
|
||||||
|
deps_remap_cb_userdata=None,
|
||||||
|
):
|
||||||
import os
|
import os
|
||||||
|
|
||||||
def temp_remap_cb(filepath, level):
|
def temp_remap_cb(filepath, level):
|
||||||
@@ -56,7 +60,17 @@ def blendfile_remap(blendfile_src, blendpath_dst, deps_remap):
|
|||||||
# path_dst_final - current path in blend.
|
# path_dst_final - current path in blend.
|
||||||
# path_src_orig - original path from JSON.
|
# path_src_orig - original path from JSON.
|
||||||
|
|
||||||
path_dst_final = fp.filepath.decode('utf-8')
|
path_dst_final_b = fp.filepath
|
||||||
|
|
||||||
|
# support 2 modes, callback or dictionary
|
||||||
|
if deps_remap_cb is not None:
|
||||||
|
path_src_orig = deps_remap_cb(path_dst_final_b, deps_remap_cb_userdata)
|
||||||
|
if path_src_orig is not None:
|
||||||
|
fp.filepath = path_src_orig
|
||||||
|
if VERBOSE:
|
||||||
|
print(" Remapping:", path_dst_final_b, "->", path_src_orig)
|
||||||
|
else:
|
||||||
|
path_dst_final = path_dst_final_b.decode('utf-8')
|
||||||
path_src_orig = deps_remap.get(path_dst_final)
|
path_src_orig = deps_remap.get(path_dst_final)
|
||||||
if path_src_orig is not None:
|
if path_src_orig is not None:
|
||||||
fp.filepath = path_src_orig.encode('utf-8')
|
fp.filepath = path_src_orig.encode('utf-8')
|
||||||
|
Reference in New Issue
Block a user