refactor, cleanup remapping paths

This commit is contained in:
2014-12-03 18:33:09 +01:00
parent 7d7045060c
commit fe54e3cadc
2 changed files with 41 additions and 43 deletions

View File

@@ -203,13 +203,12 @@ class bam_session:
@staticmethod
def status(session_rootdir,
paths_add, paths_remove, paths_modified, paths_remap_subset_add,
paths_add, paths_remove, paths_modified,
paths_uuid_update=None):
assert(isinstance(paths_add, dict))
assert(isinstance(paths_remove, dict))
assert(isinstance(paths_modified, dict))
assert(isinstance(paths_remap_subset_add, dict))
import os
from bam_utils.system import sha1_from_file
@@ -257,13 +256,6 @@ class bam_session:
bamignore_filter = bam_config.create_bamignore_filter()
# -----
# read our path relative to the project path
with open(os.path.join(session_rootdir, ".bam_paths_remap.json"), 'r') as f:
import json
paths_remap = json.load(f)
paths_remap_relbase = paths_remap.get(".", "")
for f_abs in iter_files(session_rootdir, bamignore_filter):
if f_abs not in paths_used:
# we should be clever - add the file to a useful location based on some rules
@@ -271,23 +263,11 @@ class bam_session:
f_rel = os.path.relpath(f_abs, session_rootdir)
# remap paths of added files
if f_rel.startswith("_"):
f_rel = f_rel[1:]
else:
if paths_remap_relbase:
f_rel = os.path.join(paths_remap_relbase, f_rel)
paths_add[f_rel] = f_abs
if paths_uuid_update is not None:
paths_uuid_update[f_rel] = sha1_from_file(f_abs)
# TESTING ONLY
f_abs_remote = f_rel
paths_remap_subset_add[f_rel] = f_abs_remote
class bam_commands:
"""
@@ -486,18 +466,20 @@ class bam_commands:
with open(os.path.join(session_rootdir, ".bam_paths_uuid.json")) as f:
paths_uuid = json.load(f)
# No longer used
"""
with open(os.path.join(session_rootdir, ".bam_deps_remap.json")) as f:
deps_remap = json.load(f)
"""
paths_add = {}
paths_modified = {}
paths_remove = {}
paths_remap_subset_add = {}
paths_uuid_update = {}
bam_session.status(
session_rootdir,
paths_add, paths_remove, paths_modified, paths_remap_subset_add,
paths_add, paths_remove, paths_modified,
paths_uuid_update,
)
@@ -505,12 +487,28 @@ class bam_commands:
print("Nothing to commit!")
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_filepath(f_rel):
f_rel_in_proj = paths_remap.get(f_rel)
if f_rel_in_proj is None:
if paths_remap_relbase:
if f_rel.startswith("_"):
f_rel_in_proj = f_rel[1:]
else:
f_rel_in_proj = os.path.join(paths_remap_relbase, f_rel)
else:
if f_rel.startswith("_"):
# we're already project relative
f_rel_in_proj = f_rel[1:]
else:
f_rel_in_proj = f_rel
return f_rel_in_proj
def remap_cb(f, data):
# check for the absolute path hint
if f.startswith(b'//_'):
@@ -524,12 +522,7 @@ class bam_commands:
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
f_rel_in_proj = remap_filepath(f_rel)
proj_base_b = os.path.dirname(f_rel_in_proj).encode("utf-8")
import blendfile_pack_restore
@@ -542,10 +535,16 @@ class bam_commands:
return f_abs_remap
for f_rel, f_abs in list(paths_modified.items()):
f_abs_remap = remap_file(f_rel, f_abs)
if os.path.exists(f_abs_remap):
paths_modified[f_rel] = f_abs_remap
if f_abs.endswith(".blend"):
f_abs_remap = remap_file(f_rel, f_abs)
if os.path.exists(f_abs_remap):
paths_modified[f_rel] = f_abs_remap
for f_rel, f_abs in list(paths_add.items()):
if f_abs.endswith(".blend"):
f_abs_remap = remap_file(f_rel, f_abs)
if os.path.exists(f_abs_remap):
paths_add[f_rel] = f_abs_remap
"""
deps = deps_remap.get(f_rel)
@@ -555,7 +554,6 @@ class bam_commands:
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)
import blendfile_pack_restore
blendfile_pack_restore.blendfile_remap(
f_abs.encode('utf-8'),
@@ -567,7 +565,6 @@ class bam_commands:
paths_modified[f_rel] = f_abs
"""
# -------------------------
print("Now make a zipfile")
import zipfile
@@ -589,8 +586,14 @@ class bam_commands:
sort_keys=True, indent=4, separators=(',', ': '),
).encode('utf-8'))
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 = {
f_rel: f_rel_in_proj
for f_rel, f_rel_in_proj in paths_remap.items() if f_rel in paths_modified}
paths_remap_subset.update({
f_rel: remap_filepath(f_rel)
for f_rel in paths_add})
# paths_remap_subset.update(paths_remap_subset_add)
write_dict_as_json(".bam_paths_remap.json", paths_remap_subset)
# build a list of path manipulation operations
@@ -662,11 +665,10 @@ class bam_commands:
paths_add = {}
paths_modified = {}
paths_remove = {}
paths_remap_subset_add = {}
bam_session.status(
session_rootdir,
paths_add, paths_remove, paths_modified, paths_remap_subset_add,
paths_add, paths_remove, paths_modified,
)
if not use_json:

View File

@@ -1143,7 +1143,6 @@ class BamRelativeAbsoluteTest(BamSessionTestCase):
self.assertEqual(ret[1][1], "//" + os.path.join("rel", "path", "house_rel.blend"))
self.assertEqual(ret[1][3], "OK")
stdout, stderr = bam_run(["checkout", blendfile, "--output", session_path], proj_path)
self.assertEqual("", stderr)
_check()
@@ -1256,9 +1255,6 @@ class BamRelativeAbsoluteTest(BamSessionTestCase):
del data, f
# XXX (end hack!)
# _dbg_dump_path(session_path)
stdout, stderr = bam_run(["commit", "-m", "new house to remap"], session_path)
self.assertEqual("", stderr)