68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
# Copyright (c) 2023 Dominic Masters
|
|
#
|
|
# This software is released under the MIT License.
|
|
# https://opensource.org/licenses/MIT
|
|
|
|
import os
|
|
import tarfile
|
|
import argparse
|
|
|
|
# Args
|
|
parser = argparse.ArgumentParser(
|
|
description='Bundles all assets into the internal archive format.'
|
|
)
|
|
parser.add_argument('-i', '--input');
|
|
parser.add_argument('-o', '--output');
|
|
args = parser.parse_args()
|
|
|
|
# Ensure the directory for the output path exists
|
|
if not os.path.exists(os.path.dirname(args.output)):
|
|
os.makedirs(os.path.dirname(args.output))
|
|
|
|
# Create a ZIP archive and add the specified directory
|
|
# archive = tarfile.open(args.output, 'w:bz2') # BZ2 Compression
|
|
|
|
# Does the archive already exist?
|
|
filesInArchive = []
|
|
|
|
if os.path.exists(args.output) and False:
|
|
# if os.path.exists(args.output):
|
|
# Yes, open it
|
|
archive = tarfile.open(args.output, 'a:')
|
|
|
|
# Get all the files in the archive
|
|
for member in archive.getmembers():
|
|
filesInArchive.append(member.name)
|
|
|
|
archive.close()
|
|
|
|
# Open archive for appending.
|
|
archive = tarfile.open(args.output, 'a:')
|
|
else:
|
|
# No, create it
|
|
archive = tarfile.open(args.output, 'w:')
|
|
|
|
# Add all files in the input directory
|
|
for foldername, subfolders, filenames in os.walk(args.input):
|
|
for filename in filenames:
|
|
|
|
# Is the file already in the archive?
|
|
absolute_path = os.path.join(foldername, filename)
|
|
relative_path = os.path.relpath(absolute_path, args.input)
|
|
|
|
if relative_path in filesInArchive:
|
|
if relative_path.endswith('.texture'):
|
|
print(f"Skipping {filename}...")
|
|
continue
|
|
else:
|
|
print(f"Overwriting {filename}...")
|
|
# Does not work in python, throw error
|
|
exit (1)
|
|
else:
|
|
print(f"Archiving asset {filename}...")
|
|
|
|
archive.add(absolute_path, arcname=relative_path)
|
|
|
|
# Close the archive
|
|
archive.close()
|