3 from optparse
import OptionParser
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()
25 logger
= logging
.getLogger()
26 if options
.verbose
== 1:
27 logger
.setLevel(logging
.INFO
)
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
)
39 match
= args
[0].lower()
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
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."
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
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
)
74 data
, sigs
= gpg
.check_stream(signed_data
)
75 doc
= minidom
.parseString(data
.read())
76 uri
= doc
.documentElement
.getAttribute('uri')
78 new
, iface
= iface_cache
.get_interface(uri
)
79 logging
.info("Importing information about interface %s", iface
)
81 iface_cache
.check_signed_data(iface
, signed_data
, handler
.Handler())
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):
93 options
.gui
= policy
.need_download()
95 logging
.info("Need to download; switching to GUI mode")
96 except model
.SafeException
, ex
:
97 print >>sys
.stderr
, ex
101 policy
.set_root(namespaces
.injector_gui_uri
)
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')
108 options
.refresh
= False
109 prog_args
.insert(0, '--refresh')
114 policy
.download_and_execute(prog_args
, refresh
= bool(options
.refresh
))
115 except model
.SafeException
, ex
:
116 print >>sys
.stderr
, ex
118 except autopolicy
.NeedDownload
, ex
: