From 03eaf07ec6aa7e99a0444ac1ec708b2a5f7cbbf5 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Thu, 20 Nov 2008 11:42:22 -0800 Subject: [PATCH] Support in manifest to remove/replace X The manifest files now permit removing a project so the user can either keep it out of their client, or replace it with a different project using an entirely different configuration. Signed-off-by: Shawn O. Pearce --- docs/manifest-format.txt | 16 ++++++++++++++++ manifest.py | 10 ++++++++++ 2 files changed, 26 insertions(+) diff --git a/docs/manifest-format.txt b/docs/manifest-format.txt index 5c014d6d..562e66e2 100644 --- a/docs/manifest-format.txt +++ b/docs/manifest-format.txt @@ -22,6 +22,7 @@ following DTD: @@ -47,6 +48,9 @@ following DTD: + + + ]> A description of the elements and their attributes follows. @@ -155,6 +159,18 @@ the majority of the project's object database to be obtained through these additional remotes. +Element remove-project +---------------------- + +Deletes the named project from the internal manifest table, possibly +allowing a subsequent project element in the same manifest file to +replace the project with a different source. + +This element is mostly useful in the local_manifest.xml, where +the user can remove a project, and possibly replace it with their +own definition. + + Local Manifest ============== diff --git a/manifest.py b/manifest.py index 9137371f..32a7e513 100644 --- a/manifest.py +++ b/manifest.py @@ -137,6 +137,16 @@ class Manifest(object): "no in %s" % \ self.manifestFile + for node in config.childNodes: + if node.nodeName == 'remove-project': + name = self._reqatt(node, 'name') + try: + del self._projects[name] + except KeyError: + raise ManifestParseError, \ + 'project %s not found' % \ + (name) + for node in config.childNodes: if node.nodeName == 'remote': remote = self._ParseRemote(node)