#!/usr/bin/env python # -*- coding: utf-8 -*- # Started 10/05/2011 by Seblu <seblu@seblu.net> ''' InstallSystems Image Manipulation Tool ''' import os import time import datetime import installsystems import installsystems.argparse as argparse # To remove when default to python 2.7 from installsystems.printer import * from installsystems.image import SourceImage class ISAction(argparse.Action): '''Set installsystems quiet/debug mode. Argparse callback''' def __call__(self, parser, namespace, values, option_string=None): if option_string in ("-q", "--quiet"): installsystems.quiet = True elif option_string in ("-d", "--debug"): installsystems.debug = True def init(args): '''Create an empty fresh source image tree''' # call init from library try: simg = SourceImage.create(args.path) except Exception as e: error("init failed: %s." % e) def build(args): '''Create a package image''' try: # build start time t0 = time.time() # load source image simg = SourceImage(args.path) # do the job simg.build(force=args.force, check=args.check) # compute building time t1 = time.time() dt = int(t1 - t0) arrow("Build time: %s" % datetime.timedelta(seconds=dt)) except Exception as e: error("build failed: %s." % e) # Top level argument parsing p_main = argparse.ArgumentParser() p_main.add_argument("-V", "--version", action="version", version=installsystems.version, help="show installsystems version") p_main.add_argument('-d', "--debug", action=ISAction, nargs=0, help="active debug mode") p_main.add_argument('-q', "--quiet", action=ISAction, nargs=0, help="active quiet mode") subparsers = p_main.add_subparsers() # Init command parser p_init = subparsers.add_parser("init", help=init.__doc__.lower()) p_init.add_argument("path", help="Path of new image directory") p_init.set_defaults(func=init) # Build command parser p_build = subparsers.add_parser("build", help=build.__doc__.lower()) p_build.add_argument('-f', "--force", action="store_true", dest="force", default=False, help="overwrite existing image") p_build.add_argument('-c', "--no-check", action="store_false", dest="check", default=True, help="do not check compilation before adding scripts") p_build.add_argument("path", nargs="?", type=str, default=".") p_build.set_defaults(func=build) # Parse and run args = p_main.parse_args() args.func(args)