2 from zeroinstall
.injector
import gpg
3 from optparse
import OptionParser
6 from logging
import info
, debug
11 parser
= OptionParser(usage
="usage: %prog [options] interface")
12 parser
.add_option("--archive-url", help="add archive at this URL", action
='store', metavar
='URL')
13 parser
.add_option("--archive-file", help="local copy of archive-url", action
='store', metavar
='FILE')
14 parser
.add_option("--archive-extract", help="subdirectory of archive to extract", action
='store', metavar
='DIR')
15 parser
.add_option("-k", "--key", help="key to use for signing")
16 parser
.add_option("-e", "--edit", help="edit with $EDITOR", action
='store_true')
17 parser
.add_option("-l", "--local", help="create feed from local interface")
18 parser
.add_option("--set-id", help="set implementation ID", action
='store', metavar
='DIGEST')
19 parser
.add_option("--set-released", help="set release date", action
='store', metavar
='DATE')
20 parser
.add_option("--set-stability", help="set stability", action
='store', metavar
='STABILITY')
21 parser
.add_option("--set-version", help="set version number", action
='store', metavar
='VERSION')
22 parser
.add_option("-x", "--xmlsign", help="add an XML signature block", action
='store_true')
23 parser
.add_option("-v", "--verbose", help="more verbose output", action
='count')
24 parser
.add_option("-V", "--version", help="display version information", action
='store_true')
26 (options
, args
) = parser
.parse_args()
31 print "0publish (zero-install) " + version
32 print "Copyright (C) 2005 Thomas Leonard"
33 print "This program comes with ABSOLUTELY NO WARRANTY,"
34 print "to the extent permitted by law."
35 print "You may redistribute copies of this program"
36 print "under the terms of the GNU General Public License."
37 print "For more information about these matters, see the file named COPYING."
42 logger
= logging
.getLogger()
43 if options
.verbose
== 1:
44 logger
.setLevel(logging
.INFO
)
46 logger
.setLevel(logging
.DEBUG
)
55 ans
= raw_input(q
+ " [Y/N] ").lower()
56 if ans
in ('y', 'yes'): return True
57 if ans
in ('n', 'no'): return False
59 # Load or create the starting data...
61 if os
.path
.exists(interface
):
62 contents
= file(interface
).read()
63 data
, sign_fn
, key
= signing
.check_signature(interface
)
66 if os
.path
.exists(options
.local
):
67 data
= create
.create_from_local(options
.local
)
68 sign_fn
= signing
.sign_unsigned
72 raise Exception("File '%s' does not exist." % options
.local
)
74 if confirm("Interface file '%s' does not exist. Create it?" % interface
):
75 from create
import create
76 data
= create(interface
)
77 sign_fn
= signing
.sign_unsigned
83 debug("Original data: %s", data
)
84 info("Original signing method: %s", sign_fn
.__name
__)
85 info("Original key: %s", key
)
92 # Validate the input...
96 except validator
.InvalidInterface
, ex
:
97 print "Invalid interface: " + str(ex
)
100 ans
= raw_input("Interface is invalid. (E)dit or (A)bort?").lower()
101 if ans
in ('e', 'edit'):
102 data
= edit
.edit(data
)
103 options
.edit
= False # Don't edit twice
105 if ans
in ('a', 'abort'): sys
.exit(1)
109 sign_fn
= signing
.sign_xml
111 print "Changing key from '%s' to '%s'" % (key
, options
.key
)
113 if options
.set_id
or options
.set_version
or options
.set_released
or options
.set_stability
:
115 data
= release
.make_release(data
, options
.set_id
,
116 options
.set_version
, options
.set_released
, options
.set_stability
)
117 if options
.archive_url
:
119 data
= archive
.add_archive(data
, options
.archive_url
, options
.archive_file
, options
.archive_extract
)
120 elif options
.archive_file
or options
.archive_extract
:
121 raise Exception('Must use --archive-uri option')
124 data
= merge
.merge(data
, options
.local
)
126 data
= edit
.edit(data
)
129 # Validate the result...
131 validator
.check(data
)
133 except validator
.InvalidInterface
, ex
:
134 print "Invalid interface: " + str(ex
)
137 ans
= raw_input("Interface is invalid. (E)dit or (A)bort?").lower()
138 if ans
in ('e', 'edit'):
139 data
= edit
.edit(data
)
141 if ans
in ('a', 'abort'): sys
.exit(1)
144 if (old_data
== data
and sign_fn
== old_sign_fn
and key
== old_key
) and not force_save
:
145 print "Interface unchanged. Not writing."
149 if not data
.endswith('\n'): data
+= '\n'
150 sign_fn(interface
, data
, key
)
152 info("Wrote '%S'", interface
)