Skip to content
Snippets Groups Projects
isimage 2.54 KiB
#!/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)