Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'io_blend_utils/blender_bam-1.1.7-py3-none-any.whl/bam/blend/blendfile_copy.py')
-rw-r--r--io_blend_utils/blender_bam-1.1.7-py3-none-any.whl/bam/blend/blendfile_copy.py114
1 files changed, 114 insertions, 0 deletions
diff --git a/io_blend_utils/blender_bam-1.1.7-py3-none-any.whl/bam/blend/blendfile_copy.py b/io_blend_utils/blender_bam-1.1.7-py3-none-any.whl/bam/blend/blendfile_copy.py
new file mode 100644
index 00000000..595f2b0f
--- /dev/null
+++ b/io_blend_utils/blender_bam-1.1.7-py3-none-any.whl/bam/blend/blendfile_copy.py
@@ -0,0 +1,114 @@
+#!/usr/bin/env python3
+
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# ***** END GPL LICENCE BLOCK *****
+
+"""
+A simply utility to copy blend files and their deps to a new location.
+
+Similar to packing, but don't attempt any path remapping.
+"""
+
+from bam.blend import blendfile_path_walker
+
+TIMEIT = False
+
+# ------------------
+# Ensure module path
+import os
+import sys
+path = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "modules"))
+if path not in sys.path:
+ sys.path.append(path)
+del os, sys, path
+# --------
+
+
+def copy_paths(
+ paths,
+ output,
+ base,
+
+ # load every libs dep, not just used deps.
+ all_deps=False,
+ # yield reports
+ report=None,
+
+ # Filename filter, allow to exclude files from the pack,
+ # function takes a string returns True if the files should be included.
+ filename_filter=None,
+ ):
+
+ import os
+ import shutil
+
+ from bam.utils.system import colorize, is_subdir
+
+ path_copy_files = set(paths)
+
+ # Avoid walking over same libs many times
+ lib_visit = {}
+
+ yield report("Reading %d blend file(s)\n" % len(paths))
+ for blendfile_src in paths:
+ yield report(" %s: %r\n" % (colorize("blend", color='blue'), blendfile_src))
+ for fp, (rootdir, fp_blend_basename) in blendfile_path_walker.FilePath.visit_from_blend(
+ blendfile_src,
+ readonly=True,
+ recursive=True,
+ recursive_all=all_deps,
+ lib_visit=lib_visit,
+ ):
+
+ f_abs = os.path.normpath(fp.filepath_absolute)
+ path_copy_files.add(f_abs)
+
+ # Source -> Dest Map
+ path_src_dst_map = {}
+
+ for path_src in sorted(path_copy_files):
+
+ if filename_filter and not filename_filter(path_src):
+ yield report(" %s: %r\n" % (colorize("exclude", color='yellow'), path_src))
+ continue
+
+ if not os.path.exists(path_src):
+ yield report(" %s: %r\n" % (colorize("missing path", color='red'), path_src))
+ continue
+
+ if not is_subdir(path_src, base):
+ yield report(" %s: %r\n" % (colorize("external path ignored", color='red'), path_src))
+ continue
+
+ path_rel = os.path.relpath(path_src, base)
+ path_dst = os.path.join(output, path_rel)
+
+ path_src_dst_map[path_src] = path_dst
+
+ # Create directories
+ path_dst_dir = {os.path.dirname(path_dst) for path_dst in path_src_dst_map.values()}
+ yield report("Creating %d directories in %r\n" % (len(path_dst_dir), output))
+ for path_dir in sorted(path_dst_dir):
+ os.makedirs(path_dir, exist_ok=True)
+ del path_dst_dir
+
+ # Copy files
+ yield report("Copying %d files to %r\n" % (len(path_src_dst_map), output))
+ for path_src, path_dst in sorted(path_src_dst_map.items()):
+ yield report(" %s: %r -> %r\n" % (colorize("copying", color='blue'), path_src, path_dst))
+ shutil.copy(path_src, path_dst)