in container/build_tar.py [0:0]
def main(FLAGS):
# Parse modes arguments
default_mode = None
if FLAGS.mode:
# Convert from octal
default_mode = int(FLAGS.mode, 8)
mode_map = {}
if FLAGS.modes:
for filemode in FLAGS.modes:
(f, mode) = filemode.split('=', 1)
if f[0] == '/':
f = f[1:]
mode_map[f] = int(mode, 8)
default_ownername = ('', '')
if FLAGS.owner_name:
default_ownername = FLAGS.owner_name.split('.', 1)
names_map = {}
if FLAGS.owner_names:
for file_owner in FLAGS.owner_names:
(f, owner) = file_owner.split('=', 1)
(user, group) = owner.split('.', 1)
if f[0] == '/':
f = f[1:]
names_map[f] = (user, group)
default_ids = FLAGS.owner.split('.', 1)
default_ids = (int(default_ids[0]), int(default_ids[1]))
ids_map = {}
if FLAGS.owners:
for file_owner in FLAGS.owners:
(f, owner) = file_owner.split('=', 1)
(user, group) = owner.split('.', 1)
if f[0] == '/':
f = f[1:]
ids_map[f] = (int(user), int(group))
# Add objects to the tar file
with TarFile(FLAGS.output, FLAGS.directory, FLAGS.compression,
FLAGS.root_directory, FLAGS.mtime,
FLAGS.enable_mtime_preservation, FLAGS.xz_path,
FLAGS.force_posixpath) as output:
def file_attributes(filename):
if filename.startswith('/'):
filename = filename[1:]
return {
'mode': mode_map.get(filename, default_mode),
'ids': ids_map.get(filename, default_ids),
'names': names_map.get(filename, default_ownername),
}
if FLAGS.manifest:
with open(FLAGS.manifest, 'r') as f:
manifest = json.load(f)
for f in manifest.get('files', []):
output.add_file(f['src'], f['dst'], **file_attributes(f['dst']))
for f in manifest.get('empty_files', []):
output.add_empty_file(f, **file_attributes(f))
for d in manifest.get('empty_dirs', []):
output.add_empty_dir(d, **file_attributes(d))
for d in manifest.get('empty_root_dirs', []):
output.add_empty_root_dir(d, **file_attributes(d))
for f in manifest.get('symlinks', []):
output.add_link(f['linkname'], f['target'])
for tar in manifest.get('tars', []):
output.add_tar(tar)
for deb in manifest.get('debs', []):
output.add_deb(deb)
for f in FLAGS.file:
(inf, tof) = f.split('=', 1)
output.add_file(inf, tof, **file_attributes(tof))
for f in FLAGS.empty_file:
output.add_empty_file(f, **file_attributes(f))
for f in FLAGS.empty_dir:
output.add_empty_dir(f, **file_attributes(f))
for f in FLAGS.empty_root_dir:
output.add_empty_root_dir(f, **file_attributes(f))
for tar in FLAGS.tar:
output.add_tar(tar)
for deb in FLAGS.deb:
output.add_deb(deb)
for link in FLAGS.link:
l = link.split(':', 1)
output.add_link(l[0], l[1])