config injection
This commit is contained in:
parent
d1fa0a122f
commit
2928372460
@ -1,4 +1,3 @@
|
||||
Downloader
|
||||
|
||||
* incremenral update of dest directory
|
||||
* inject config into customized builder
|
||||
|
@ -1,5 +1,21 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
# Gitian Downloader - download/update and verify a gitian distribution package
|
||||
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Library General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2 of the License, or (at your option) any later version.
|
||||
#
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library General Public
|
||||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
import sys, os, subprocess
|
||||
from os import path
|
||||
import shutil
|
||||
@ -11,6 +27,10 @@ import argparse
|
||||
import yaml
|
||||
from zipfile import ZipFile
|
||||
|
||||
inject_config_string = "INJECT" + "CONFIG"
|
||||
injected_config = """INJECTCONFIG"""
|
||||
have_injected_config = injected_config != inject_config_string
|
||||
|
||||
quiet = 0
|
||||
|
||||
def sanitize_path(dir_name, name, where):
|
||||
@ -172,23 +192,50 @@ full_prog = sys.argv[0]
|
||||
prog = os.path.basename(full_prog)
|
||||
|
||||
parser = argparse.ArgumentParser(description='Download a verify a gitian package')
|
||||
parser.add_argument('-u', '--url', metavar='URL', type=str, nargs='+', required=True,
|
||||
parser.add_argument('-u', '--url', metavar='URL', type=str, nargs='+', required=False,
|
||||
help='one or more URLs where the package can be found')
|
||||
parser.add_argument('-c', '--config', metavar='CONF', type=str, required=True,
|
||||
parser.add_argument('-c', '--config', metavar='CONF', type=str, required=not have_injected_config,
|
||||
help='a configuration file')
|
||||
parser.add_argument('-d', '--dest', metavar='DEST', type=str, required=True,
|
||||
parser.add_argument('-d', '--dest', metavar='DEST', type=str, required=False,
|
||||
help='the destination directory for unpacking')
|
||||
parser.add_argument('-q', '--quiet', action='append_const', const=1, default=[], help='be quiet')
|
||||
parser.add_argument('-m', '--customize', metavar='OUTPUT', type=str, help='generate a customized version of the script with the given config')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
url = args.url[0]
|
||||
config_file = args.config
|
||||
quiet = len(args.quiet)
|
||||
|
||||
f = file(config_file, 'r')
|
||||
config = yaml.safe_load(f)
|
||||
f.close()
|
||||
if args.config:
|
||||
f = file(args.config, 'r')
|
||||
if args.customize:
|
||||
s = file(full_prog, 'r')
|
||||
script = s.read()
|
||||
s.close()
|
||||
config = f.read()
|
||||
script = script.replace(inject_config_string, config)
|
||||
s = file(args.customize, 'w')
|
||||
s.write(script)
|
||||
s.close()
|
||||
os.chmod(args.customize, 0750)
|
||||
exit(0)
|
||||
|
||||
config = yaml.safe_load(f)
|
||||
f.close()
|
||||
else:
|
||||
config = yaml.safe_load(injected_config)
|
||||
|
||||
if not args.dest:
|
||||
parser.error('argument -d/--dest is required unless -m is specified')
|
||||
|
||||
if args.url:
|
||||
urls = args.url
|
||||
else:
|
||||
urls = config['urls']
|
||||
if not urls:
|
||||
parser.error('argument -u/--url is required since config does not specify it')
|
||||
|
||||
# TODO: handle multiple urls, rss, atom, etc.
|
||||
url = urls[0]
|
||||
|
||||
if path.exists(args.dest):
|
||||
print>>sys.stderr, "destination already exists, please remove it first"
|
||||
|
Loading…
Reference in New Issue
Block a user