Removed --quiet.
[zeroinstall.git] / 0launch
blobd3a0127cedf9e3dd025923332fab56d723c8ce43
1 #!/usr/bin/env python
2 import os, sys
3 from optparse import OptionParser
4 import logging
6 from zeroinstall.injector import model, download, autopolicy, run, namespaces
8 parser = OptionParser(usage="usage: %prog [options] interface [args]\n"
9 " %prog --list [search-term]\n"
10 " %prog --import [interface-files]")
11 parser.add_option("-c", "--console", help="never use GUI", action='store_false', dest='gui')
12 parser.add_option("-d", "--download-only", help="fetch but don't run", action='store_true')
13 parser.add_option("-D", "--dry-run", help="just print actions", action='store_true')
14 parser.add_option("-g", "--gui", help="show graphical policy editor", action='store_true')
15 parser.add_option("-i", "--import", help="import from files, not from the network", action='store_true')
16 parser.add_option("-l", "--list", help="list all known interfaces", action='store_true')
17 parser.add_option("-r", "--refresh", help="refresh all used interfaces", action='store_true')
18 parser.add_option("-v", "--verbose", help="more verbose output", action='count')
19 parser.add_option("-V", "--version", help="display version information", action='store_true')
20 parser.disable_interspersed_args()
22 (options, args) = parser.parse_args()
24 if options.verbose:
25 logger = logging.getLogger()
26 if options.verbose == 1:
27 logger.setLevel(logging.INFO)
28 else:
29 logger.setLevel(logging.DEBUG)
30 hdlr = logging.StreamHandler()
31 fmt = logging.Formatter("%(levelname)s:%(message)s")
32 hdlr.setFormatter(fmt)
33 logger.addHandler(hdlr)
35 if options.list:
36 if len(args) == 0:
37 match = None
38 elif len(args) == 1:
39 match = args[0].lower()
40 else:
41 parser.print_help()
42 sys.exit(1)
43 from zeroinstall.injector.iface_cache import iface_cache
44 for i in iface_cache.list_all_interfaces():
45 if match and match not in i.lower(): continue
46 print i
47 sys.exit(0)
49 if options.version:
50 import zeroinstall
51 print "0launch (zero-install) " + zeroinstall.version
52 print "Copyright (C) 2005 Thomas Leonard"
53 print "This program comes with ABSOLUTELY NO WARRANTY,"
54 print "to the extent permitted by law."
55 print "You may redistribute copies of this program"
56 print "under the terms of the GNU General Public License."
57 print "For more information about these matters, see the file named COPYING."
58 sys.exit(0)
60 if len(args) < 1:
61 parser.print_help()
62 sys.exit(1)
64 try:
65 if getattr(options, 'import'):
66 from zeroinstall.injector import gpg, handler
67 from zeroinstall.injector.iface_cache import iface_cache
68 from xml.dom import minidom
69 for x in args:
70 if not os.path.isfile(x):
71 raise model.SafeException("File '%s' does not exist" % x)
72 logging.info("Importing from file '%s'", x)
73 signed_data = file(x)
74 data, sigs = gpg.check_stream(signed_data)
75 doc = minidom.parseString(data.read())
76 uri = doc.documentElement.getAttribute('uri')
77 assert uri
78 new, iface = iface_cache.get_interface(uri)
79 logging.info("Importing information about interface %s", iface)
80 signed_data.seek(0)
81 iface_cache.check_signed_data(iface, signed_data, handler.Handler())
82 sys.exit(0)
84 # Singleton instance used everywhere...
85 policy = autopolicy.AutoPolicy(args[0],
86 download_only = bool(options.download_only),
87 dry_run = options.dry_run)
89 if options.gui is None and os.environ.get('DISPLAY', None):
90 if options.refresh:
91 options.gui = True
92 else:
93 options.gui = policy.need_download()
94 if options.gui:
95 logging.info("Need to download; switching to GUI mode")
96 except model.SafeException, ex:
97 print >>sys.stderr, ex
98 sys.exit(1)
100 if options.gui:
101 policy.set_root(namespaces.injector_gui_uri)
102 prog_args = args[:]
103 # Options apply to actual program, not GUI
104 if options.download_only:
105 policy.download_only = False
106 prog_args.insert(0, '--download-only')
107 if options.refresh:
108 options.refresh = False
109 prog_args.insert(0, '--refresh')
110 else:
111 prog_args = args[1:]
113 try:
114 policy.download_and_execute(prog_args, refresh = bool(options.refresh))
115 except model.SafeException, ex:
116 print >>sys.stderr, ex
117 sys.exit(1)
118 except autopolicy.NeedDownload, ex:
119 print ex
120 sys.exit(0)