#!/usr/bin/python # Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd. All rights reserved. # # Contact: # @author Chulwoo Shin # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Contributors: # - S-Core Co., Ltd from argparse import ArgumentParser from argparse import RawDescriptionHelpFormatter import os import sys import json import logging from tic import command from tic.utils import log from tic.utils import file from tic.utils import error from tic.server import tic_server __version__ = 0.1 __date__ = '2016-11-07' __updated__ = '2016-11-07' def create_parser(): program_name = os.path.basename(sys.argv[0]) program_version = "%s" % __version__ program_version_message = '%s %s' % (program_name, program_version) program_shortdesc = 'tic-core is a tool for analyzing package dependencies and generating Image' #__import__('__main__').__doc__ program_epilog = "Try 'tic-core SUBCOMMAND --help' for help on a specific sub-command." parser = ArgumentParser(description=program_shortdesc, epilog=program_epilog, formatter_class=RawDescriptionHelpFormatter) parser.add_argument('-v', '--version', action='version', version=program_version_message) subparsers = parser.add_subparsers(dest='subparser_name', help='sub-command help') # create the parser for the 'analyze' command parser_analyze = subparsers.add_parser('analyze', help='analyze install-dependency of packages') parser_analyze.add_argument('-r', "--repos", dest="repos", metavar="urls", nargs='+', help="The URL of repository [default: %(default)s]") parser_analyze.add_argument('-c', "--recipes", dest="recipes", metavar="paths", nargs='+', help="The path of recipe") parser_analyze.add_argument('-o', "--outdir", dest="outdir", action="store", help="The result file is distributed in the outdir path", default=os.getcwd()) # create the parser for the 'export' command parser_export = subparsers.add_parser('export', help='export files') parser_export.add_argument('-f', "--format", dest="format", metavar="recipe/ks", help="exports file format", required=True) parser_export.add_argument('-c', "--recipes", dest="recipes", metavar="paths", nargs='+', help="recipe files") parser_export.add_argument('-o', "--outdir", dest="outdir", action="store", help="export file output directory", default=os.getcwd()) # create the parser for the 'create' command parser_create = subparsers.add_parser('createimage', help='create an image for tizen') parser_create.add_argument('-c', "--recipes", dest="recipes", metavar="recipes", nargs='+', help="recipe files to be used for image creation") parser_create.add_argument('-k', "--ks", dest="kickstart", metavar="kickstart", help="ks file to be used for image creation") parser_create.add_argument('-o', "--outdir", dest="outdir", action="store", help="image output directory", default=os.getcwd()) parser_start = subparsers.add_parser('start', help='start the tic-core demon on system. port 8082 is used by default ') parser_start.add_argument('-p', "--port", dest="port", action="store", help="port number", default=8082) return parser def main(argv): logger = logging.getLogger('tic') try: # Setup argument parser parser = create_parser() # Process arguments args = parser.parse_args(argv[1:]) if args.subparser_name == 'analyze': view_data = command.analyze(args.repos, args.recipes) output_dir=os.path.abspath(os.path.expanduser(args.outdir)) file.write(os.path.join(output_dir, 'viewdata.json'), json.dumps(view_data)) elif args.subparser_name == 'export': #TODO Temporary code(should be deleted) recipes={'name':'default'} packages=['attr', 'filesystem'] output=command.exports(args.format, recipes, packages, args.outdir) logger.info("export the %s file: %s", args.format, output) elif args.subparser_name == 'createimage': if args.recipes or args.kickstart: command.createimage(args.recipes, args.kickstart, args.outdir) else: logger.info('kickstart or recipes file is required') elif args.subparser_name == 'start': tic_server.start(args.port) return 0 except KeyboardInterrupt: ### handle keyboard interrupt ### return 0 except error.TICError as err: logger.error(err) except Exception as ex: logger.error(ex) return 2 if __name__ == "__main__": log.setup('tic') sys.exit(main(sys.argv))