1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- import argparse
- import logging
- import os
- import sys
- from .. import io
- LOG = logging.getLogger()
- def run(abs, in_fn, out_fn):
- out_dir = os.path.normpath(os.path.dirname(out_fn))
- io.mkdirs(out_dir)
- def identity(fn): return fn
- def relative(fn): return os.path.relpath(fn, out_dir)
- adjusted_fn = identity if abs else relative
- with open(out_fn, 'w') as stream:
- for abs_fn in io.yield_abspath_from_fofn(in_fn):
- fn = adjusted_fn(abs_fn)
- stream.write('{}\n'.format(fn))
- class HelpF(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter):
- pass
- def parse_args(argv):
- description = 'Copy FOFN. If directory changes, then relative paths must change too.'
- epilog = ''
- parser = argparse.ArgumentParser(
- description=description,
- epilog=epilog,
- formatter_class=HelpF,
- )
- parser.add_argument(
- '--in-fn',
- help='Input. FOFN of paths relative to its own directory.'
- )
- parser.add_argument(
- '--abs', action='store_true',
- help='Store absolute paths. (Otherwise, paths will be relative to directory of output FOFN.)'
- )
- parser.add_argument(
- '--out-fn',
- help='Output. FOFN of paths relative to its own directory.'
- )
- args = parser.parse_args(argv[1:])
- return args
- def main(argv=sys.argv):
- args = parse_args(argv)
- logging.basicConfig(level=logging.INFO)
- run(**vars(args))
- if __name__ == '__main__': # pragma: no cover
- main()
|