s.rune_portmanteau = r'''
outfile=$1; shift
rm -f "$outfile"
- GZIP=-9 tar zcf "$outfile" "$@"'
+ GZIP=-1 tar zcf "$outfile" "$@"
'''
s.manifest_name='0000-MANIFEST.txt'
# private
s._destdir = destdir
s._outcounter = 0
s._manifest = []
+ s._dirmap = { }
def src_filter_glob(s, src): # default s.src_filter
for pat in s.src_filter_globs:
script += ' -print0'
return script
+ def manifest_append(s, name, infol):
+ s._manifest.append((name, ' '.join(infol)))
+
def new_output_name(s, nametail, infol):
s._outcounter += 1
name = '%04d-%s' % (s._outcounter, nametail)
- s._manifest.append((name, ' '.join(infol)))
+ s.manifest_append(name, infol)
return name
- def new_output_fh(s, nametail, infol):
- name = s.new_output_name(nametail, infol)
- return s.open_output_fh(name, 'wb')
-
def open_output_fh(s, name, mode):
return open(os.path.join(s._destdir, name), mode)
def mk_from_dir(s, d, infol):
+ try: name = s._dirmap[d]
+ except KeyError: pass
+ else:
+ s.manifest_append(name, infol)
+ return
+
if s.show_pathnames: infol.append(d)
find_rune = s.src_find_rune(d)
total_rune = s.rune_cpio % find_rune
- fh = s.new_output_fh('src.cpio', infol)
+
+ name = s.new_output_name('src.cpio', infol)
+ s._dirmap[d] = name
+ fh = s.open_output_fh(name, 'wb')
+
subprocess.run(s.rune_shell + [total_rune],
cwd=d,
stdin=subprocess.DEVNULL,
d = s.src_parentfinder(d, infol)
s.mk_from_dir(d, infol)
+ def mk_from_module(s, m, infol):
+ try: file = m.__file__
+ except AttributeError: return
+ infol.append(m.__name__)
+ s.mk_from_src(file, infol)
+ s.manifest_append(None, ['spong',file])
+ #s.report_from_package(file, infol)
+
def mk_from_srcs(s, dirs=sys.path):
s.mk_from_src(sys.argv[0], ['argv[0]'])
for d in sys.path:
s.mk_from_src(d, ['sys.path'])
+ for m in sys.modules.values():
+ s.mk_from_module(m, ['sys.modules'])
def mk_portmanteau(s):
cmdl = s.rune_shell + [ s.rune_portmanteau, 'x',
s.output_name, s.manifest_name ]
mfh = s.open_output_fh(s.manifest_name,'w')
for (name, info) in s._manifest:
- cmdl.append(name)
+ if name is not None: cmdl.append(name)
print('%s\t%s' % (name,info), file=mfh)
mfh.close()
- subprocess.run(s.rune_shell + cmdl,
+ subprocess.run(cmdl,
cwd=s._destdir,
stdin=subprocess.DEVNULL,
stdout=sys.stderr,