71 lines
2.2 KiB
Python
Executable File
71 lines
2.2 KiB
Python
Executable File
"""
|
|
Read a snakefood dependencies file and copy all the files to a destination
|
|
directory, using the same filename to its python root.
|
|
"""
|
|
# This file is part of the Snakefood open source package.
|
|
# See http://furius.ca/snakefood/ for licensing details.
|
|
|
|
import sys, os, logging, shutil
|
|
from os.path import *
|
|
|
|
from six import print_
|
|
|
|
from snakefood.depends import read_depends, flatten_depends
|
|
|
|
|
|
|
|
def main():
|
|
import optparse
|
|
parser = optparse.OptionParser(__doc__.strip())
|
|
|
|
parser.add_option('-o', '--overwrite', action='store_true',
|
|
help="Overwrite the destination files. "
|
|
"If this is not set, an error is generated if "
|
|
"the destination file exists.")
|
|
|
|
parser.add_option('-i', '--insert-package-inits', action='store_true',
|
|
help="Automatically create missing __init__.py in intervening directories.")
|
|
|
|
opts, args = parser.parse_args()
|
|
|
|
if len(args) != 1:
|
|
parser.error("You must specify the destination root.")
|
|
dest, = args
|
|
|
|
if not opts.overwrite and exists(dest):
|
|
logging.error("Cannot overwrite '%s'." % dest)
|
|
sys.exit(1)
|
|
|
|
depends = list(read_depends(sys.stdin))
|
|
|
|
for droot, drel in flatten_depends(depends):
|
|
srcfn = join(droot, drel)
|
|
if isdir(srcfn):
|
|
drel = join(drel, '__init__.py')
|
|
srcfn = join(droot, drel)
|
|
dstfn = join(dest, drel)
|
|
|
|
if not opts.overwrite and exists(dstfn):
|
|
logging.error("Cannot overwrite '%s'." % dstfn)
|
|
sys.exit(1)
|
|
|
|
destdir = dirname(dstfn)
|
|
if not exists(destdir):
|
|
os.makedirs(destdir)
|
|
|
|
print_('Copying: %s' % srcfn)
|
|
if not exists(srcfn):
|
|
logging.error("Could not copy file '%s'." % srcfn)
|
|
continue
|
|
shutil.copyfile(srcfn, dstfn)
|
|
|
|
if opts.insert_package_inits:
|
|
for root, dirs, files in os.walk(dest):
|
|
if root == dest:
|
|
continue # Not needed at the very root.
|
|
initfn = join(root, '__init__.py')
|
|
if not exists(initfn):
|
|
print_('Creating: %s' % initfn)
|
|
f = open(initfn, 'w')
|
|
f.close()
|