X-Git-Url: https://code.grnet.gr/git/snf-image-creator/blobdiff_plain/023e1217b32385bae8007e8366f5fb9d5b95f8ed..fba0968870e13efbe1926fa43363aa56efd79ee4:/image_creator/dialog_main.py diff --git a/image_creator/dialog_main.py b/image_creator/dialog_main.py index d9cea55..9f4d7e8 100644 --- a/image_creator/dialog_main.py +++ b/image_creator/dialog_main.py @@ -36,6 +36,7 @@ import dialog import sys import os +import stat import textwrap import signal import optparse @@ -54,19 +55,20 @@ from image_creator.dialog_util import SMALL_WIDTH, WIDTH, confirm_exit, \ Reset, update_background_title -def image_creator(d, media, out): +def image_creator(d, media, out, tmp): d.setBackgroundTitle('snf-image-creator') gauge = GaugeOutput(d, "Initialization", "Initializing...") out.add(gauge) - disk = Disk(media, out) + disk = Disk(media, out, tmp) def signal_handler(signum, frame): gauge.cleanup() disk.cleanup() signal.signal(signal.SIGINT, signal_handler) + signal.signal(signal.SIGTERM, signal_handler) try: snapshot = disk.snapshot() dev = disk.get_device(snapshot) @@ -131,23 +133,33 @@ def image_creator(d, media, out): def select_file(d, media): - root = os.sep + + if media == '/': + return '/' + + default = os.getcwd() + os.sep while 1: if media is not None: if not os.path.exists(media): d.msgbox("The file `%s' you choose does not exist." % media, width=SMALL_WIDTH) else: - break + mode = os.stat(media).st_mode + if not stat.S_ISDIR(mode): + break + default = media - (code, media) = d.fselect(root, 10, 50, - title="Please select input media") + (code, media) = d.fselect(default, 10, 60, extra_button=1, + title="Please select an input media.", + extra_label="Bundle Host") if code in (d.DIALOG_CANCEL, d.DIALOG_ESC): if confirm_exit(d, "You canceled the media selection dialog box."): sys.exit(0) else: media = None continue + elif code == d.DIALOG_EXTRA: + return '/' return media @@ -175,6 +187,9 @@ def main(): parser.add_option("-l", "--logfile", type="string", dest="logfile", default=None, help="log all messages to FILE", metavar="FILE") + parser.add_option("--tmpdir", type="string", dest="tmp", default=None, + help="create large temporary image files under DIR", + metavar="DIR") options, args = parser.parse_args(sys.argv[1:]) @@ -188,7 +203,9 @@ def main(): raise FatalError("You must run %s as root" % parser.get_prog_name()) - media = select_file(d, args[0] if len(args) == 1 else None) + if options.tmp is not None and not os.path.isdir(options.tmp): + raise FatalError("The directory `%s' specified with --tmpdir is " + "not valid" % options.tmp) logfile = None if options.logfile is not None: @@ -198,6 +215,9 @@ def main(): raise FatalError( "Unable to open logfile `%s' for writing. Reason: %s" % (options.logfile, e.strerror)) + + media = select_file(d, args[0] if len(args) == 1 else None) + try: log = SimpleOutput(False, logfile) if logfile is not None \ else Output() @@ -206,7 +226,7 @@ def main(): out = CompositeOutput([log]) out.output("Starting %s v%s..." % (parser.get_prog_name(), version)) - ret = image_creator(d, media, out) + ret = image_creator(d, media, out, options.tmp) sys.exit(ret) except Reset: log.output("Resetting everything...")