If interface is incorrectly signed, offer to load it anyway.
[0publish.git] / release.py
blob06a1949516296e77f6e44b044c3ec3d623216186
1 from xml.dom import minidom
2 from zeroinstall.injector import namespaces, model
3 import time, re
5 date_format = '\d{4}-\d{2}-\d{2}'
7 def make_release(data):
8 """Normally there's only one implementation, but we can cope with several."""
9 doc = minidom.parseString(data)
10 unreleased = []
11 all_impls = doc.documentElement.getElementsByTagNameNS(namespaces.XMLNS_IFACE, 'implementation')
12 for x in all_impls:
13 released = x.getAttribute('released')
14 if released is None or not re.match(date_format, released):
15 unreleased.append((None, x))
16 if not unreleased:
17 if len(all_impls) == 0:
18 raise Exception('No implementations in interface file!')
19 if len(all_impls) > 1:
20 raise Exception("Multiple implementations, but all are released. Aborting.")
21 impl = all_impls[0]
22 unreleased.append((impl.getAttribute('released'), impl))
24 for released, x in unreleased:
25 id = x.getAttribute('id')
26 version = x.getAttribute('version')
27 stability = x.getAttribute('stability')
28 print "Implementation '%s' (version: %s released: %s stability: %s)" % \
29 (id, version, x.getAttribute('released'), stability)
30 new_version = raw_input('Version [%s]: ' % version)
31 if new_version:
32 version = new_version
33 if not released:
34 released = time.strftime('%Y-%m-%d')
35 while True:
36 new_released = raw_input('Released [%s]: ' % released)
37 if not new_released:
38 break
39 if re.match(date_format, new_released):
40 released = new_released
41 break
42 print "Invalid date format. Use YYYY-MM-DD."
44 while True:
45 new_stability = raw_input('Stability [testing]: ').lower()
46 if not new_stability:
47 new_stability = model.testing.name
48 for level in model.stability_levels:
49 if level.startswith(new_stability):
50 stability = level
51 break
52 else:
53 print "Invalid level '%s'" % new_stability
54 print "Choose one of", ', '.join(model.stability_levels.keys())
55 continue
56 break
58 x.setAttribute('version', version)
59 x.setAttribute('released', released)
60 x.setAttribute('stability', stability)
62 return doc.toxml()