blob: f520418bba58be3e7df782afdc1fd630732d175a [file] [log] [blame]
#!/usr/bin/env python2.7
# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import argparse
import json
import os
import sys
from urlparse import urlparse
from sdk_common import Atom
class MappingAction(argparse.Action):
'''Parses file mappings flags.'''
def __init__(self, option_strings, dest, nargs=None, **kwargs):
if nargs is not None:
raise ValueError("nargs is not allowed")
super(MappingAction, self).__init__(
option_strings, dest, nargs=2, **kwargs)
def __call__(self, parser, namespace, values, option_string=None):
mappings = getattr(namespace, 'mappings', None)
if mappings is None:
mappings = {}
setattr(namespace, 'mappings', mappings)
mappings[values[0]] = values[1]
def main():
parser = argparse.ArgumentParser()
parser.add_argument(
'--manifest', help='Path to the SDK\'s manifest file', required=True)
parser.add_argument(
'--mapping',
help='Extra files to add to the archive',
action=MappingAction)
parser.add_argument(
'--output', help='Path to the output file manifest', required=True)
args = parser.parse_args()
with open(args.manifest, 'r') as manifest_file:
manifest = json.load(manifest_file)
all_files = {}
def add(dest, src):
if dest in all_files:
print('Error: multiple entries for %s' % dest)
print(' - %s' % all_files[dest])
print(' - %s' % src)
return 1
all_files[dest] = src
for atom in [Atom(a) for a in manifest['atoms']]:
for file in atom.files:
add(file.destination, file.source)
for dest, source in args.mappings.iteritems():
add(dest, source)
with open(args.output, 'w') as output_file:
for mapping in sorted(all_files.iteritems()):
output_file.write('%s=%s\n' % mapping)
if __name__ == '__main__':
sys.exit(main())