From bae487bf6d54fbddb267e81e9509e20e9479184d Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Mon, 2 Jan 2006 21:21:55 +0000 Subject: [PATCH] Also merge implementations from local file. git-svn-id: file:///home/talex/Backups/sf.net/Subversion/zero-install/injector/0publish@634 9f8c893c-44ee-0310-b757-c8ca8341c71e --- 0publish | 5 +++-- merge.py | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 merge.py diff --git a/0publish b/0publish index 9335c17..575201b 100755 --- a/0publish +++ b/0publish @@ -53,8 +53,6 @@ def confirm(q): # Load or create the starting data... if os.path.exists(interface): - if options.local: - raise Exception("Can't use --local; file '%s' already exists!" % interface) contents = file(interface).read() data, sign_fn, key = signing.check_signature(interface) elif options.local: @@ -109,6 +107,9 @@ if options.key: if options.release: import release data = release.make_release(data) +if options.local: + import merge + data = merge.merge(data, options.local) if options.edit: data = edit.edit(data) diff --git a/merge.py b/merge.py new file mode 100644 index 0000000..fa03194 --- /dev/null +++ b/merge.py @@ -0,0 +1,24 @@ +import os +from xml.dom import minidom, XMLNS_NAMESPACE +from zeroinstall.injector.namespaces import XMLNS_IFACE +from zeroinstall.injector import model, reader + +def merge(data, local): + local_doc = minidom.parse(local) + master_doc = minidom.parseString(data) + + for impl in local_doc.getElementsByTagNameNS(XMLNS_IFACE, 'implementation'): + new_impl = master_doc.importNode(impl, True) + while impl.parentNode is not local_doc: + impl = impl.parentNode + for attr in ['stability', 'released', 'main', 'arch', 'version']: + if impl.hasAttribute(attr) and not new_impl.hasAttribute(attr): + new_impl.setAttribute(attr, impl.getAttribute(attr)) + + master_doc.documentElement.appendChild(master_doc.createTextNode(' ')) + master_doc.documentElement.appendChild(new_impl) + master_doc.documentElement.appendChild(master_doc.createTextNode('\n')) + print "Impl", new_impl + + # minidom's writer loses the newline after the PI + return master_doc.toxml() -- 2.11.4.GIT