From 94e57bcc9dcd5fb26675eaebbb8b65797200df3d Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Sun, 25 Mar 2012 10:49:59 +0100 Subject: [PATCH] Warn about replaced interfaces in "0install update" --- 0alias | 11 ++++++++--- zeroinstall/cmd/update.py | 6 ++++++ zeroinstall/injector/model.py | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/0alias b/0alias index 422ff6c..681fa3d 100755 --- a/0alias +++ b/0alias @@ -236,10 +236,15 @@ except model.SafeException as ex: print(ex, file=sys.stderr) sys.exit(1) -feed = config.iface_cache.get_feed(interface_uri) -replacement_uri = feed.get_replaced_by() -if replacement_uri is not None: +seen = set([interface_uri]) +while True: + feed = config.iface_cache.get_feed(interface_uri) + replacement_uri = feed.get_replaced_by() + if replacement_uri is None: + break print(_("(interface {old} has been replaced by {new}; using that instead)").format(old = interface_uri, new = replacement_uri)) + assert replacement_uri not in seen, "loop detected!" + seen.add(replacement_uri) interface_uri = replacement_uri wrapper = open(script, 'w') diff --git a/zeroinstall/cmd/update.py b/zeroinstall/cmd/update.py index 0da0be6..c4cc4a8 100644 --- a/zeroinstall/cmd/update.py +++ b/zeroinstall/cmd/update.py @@ -83,3 +83,9 @@ def handle(config, options, args): else: if not changes: print(_("No updates found. Continuing with version {version}.").format(version = root_sel.version)) + + root_feed = config.iface_cache.get_feed(iface_uri) + if root_feed: + target = root_feed.get_replaced_by() + if target is not None: + print(_("Warning: interface {old} has been replaced by {new}".format(old = iface_uri, new = target))) diff --git a/zeroinstall/injector/model.py b/zeroinstall/injector/model.py index 0a120a0..77f633f 100644 --- a/zeroinstall/injector/model.py +++ b/zeroinstall/injector/model.py @@ -1179,7 +1179,7 @@ class ZeroInstallFeed(object): for child in self.metadata: if child.uri == XMLNS_IFACE and child.name == 'replaced-by': new_uri = child.getAttribute('interface') - if new_uri: + if new_uri and (new_uri.startswith('http:') or new_uri.startswith('https:') or self.local_path): return new_uri return None -- 2.11.4.GIT