diff --git a/manifest_xml.py b/manifest_xml.py index f37732cd..23b4fb74 100644 --- a/manifest_xml.py +++ b/manifest_xml.py @@ -135,6 +135,7 @@ class XmlManifest(object): self.globalConfig = GitConfig.ForUser() self.localManifestWarning = False self.isGitcClient = False + self._load_local_manifests = True self.repoProject = MetaProject(self, 'repo', gitdir = os.path.join(repodir, 'repo/.git'), @@ -146,15 +147,26 @@ class XmlManifest(object): self._Unload() - def Override(self, name): + def Override(self, name, load_local_manifests=True): """Use a different manifest, just for the current instantiation. """ - path = os.path.join(self.manifestProject.worktree, name) - if not os.path.isfile(path): - raise ManifestParseError('manifest %s not found' % name) + path = None + + # Look for a manifest by path in the filesystem (including the cwd). + if not load_local_manifests: + local_path = os.path.abspath(name) + if os.path.isfile(local_path): + path = local_path + + # Look for manifests by name from the manifests repo. + if path is None: + path = os.path.join(self.manifestProject.worktree, name) + if not os.path.isfile(path): + raise ManifestParseError('manifest %s not found' % name) old = self.manifestFile try: + self._load_local_manifests = load_local_manifests self.manifestFile = path self._Unload() self._Load() @@ -435,23 +447,26 @@ class XmlManifest(object): nodes.append(self._ParseManifestXml(self.manifestFile, self.manifestProject.worktree)) - local = os.path.join(self.repodir, LOCAL_MANIFEST_NAME) - if os.path.exists(local): - if not self.localManifestWarning: - self.localManifestWarning = True - print('warning: %s is deprecated; put local manifests in `%s` instead' - % (LOCAL_MANIFEST_NAME, os.path.join(self.repodir, LOCAL_MANIFESTS_DIR_NAME)), - file=sys.stderr) - nodes.append(self._ParseManifestXml(local, self.repodir)) + if self._load_local_manifests: + local = os.path.join(self.repodir, LOCAL_MANIFEST_NAME) + if os.path.exists(local): + if not self.localManifestWarning: + self.localManifestWarning = True + print('warning: %s is deprecated; put local manifests ' + 'in `%s` instead' % (LOCAL_MANIFEST_NAME, + os.path.join(self.repodir, LOCAL_MANIFESTS_DIR_NAME)), + file=sys.stderr) + nodes.append(self._ParseManifestXml(local, self.repodir)) - local_dir = os.path.abspath(os.path.join(self.repodir, LOCAL_MANIFESTS_DIR_NAME)) - try: - for local_file in sorted(platform_utils.listdir(local_dir)): - if local_file.endswith('.xml'): - local = os.path.join(local_dir, local_file) - nodes.append(self._ParseManifestXml(local, self.repodir)) - except OSError: - pass + local_dir = os.path.abspath(os.path.join(self.repodir, + LOCAL_MANIFESTS_DIR_NAME)) + try: + for local_file in sorted(platform_utils.listdir(local_dir)): + if local_file.endswith('.xml'): + local = os.path.join(local_dir, local_file) + nodes.append(self._ParseManifestXml(local, self.repodir)) + except OSError: + pass try: self._ParseManifest(nodes) diff --git a/subcmds/diffmanifests.py b/subcmds/diffmanifests.py index 751a2026..a1e823cd 100644 --- a/subcmds/diffmanifests.py +++ b/subcmds/diffmanifests.py @@ -190,12 +190,12 @@ synced and their revisions won't be found. self.printProject = self.printAdded = self.printRemoved = self.printRevision = self.printText manifest1 = XmlManifest(self.manifest.repodir) - manifest1.Override(args[0]) + manifest1.Override(args[0], load_local_manifests=False) if len(args) == 1: manifest2 = self.manifest else: manifest2 = XmlManifest(self.manifest.repodir) - manifest2.Override(args[1]) + manifest2.Override(args[1], load_local_manifests=False) diff = manifest1.projectsDiff(manifest2) if opt.raw: