diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-07-24 11:32:56 -0400 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2012-08-20 17:30:39 -0400 |
commit | 4e75773f31bd5dd1cbad30296b2a32c38e552ead (patch) | |
tree | 5ebacb2ae0a3d09ea0628edf49015c495c81b3fb /src/lib/Server/Lint/Validate.py | |
parent | 6cc1ede5cba4a27871ece2cbdab4ebc93c00fb4c (diff) | |
download | bcfg2-4e75773f31bd5dd1cbad30296b2a32c38e552ead.tar.gz bcfg2-4e75773f31bd5dd1cbad30296b2a32c38e552ead.tar.bz2 bcfg2-4e75773f31bd5dd1cbad30296b2a32c38e552ead.zip |
allow xinclude files to be missing if xi:fallback is provided
Conflicts:
src/lib/Server/Lint/Comments.py
src/lib/Server/Plugin.py
Diffstat (limited to 'src/lib/Server/Lint/Validate.py')
-rw-r--r-- | src/lib/Server/Lint/Validate.py | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/lib/Server/Lint/Validate.py b/src/lib/Server/Lint/Validate.py index 952a65365..a95161dce 100644 --- a/src/lib/Server/Lint/Validate.py +++ b/src/lib/Server/Lint/Validate.py @@ -1,10 +1,10 @@ -import fnmatch +import os +import sys import glob +import fnmatch import lxml.etree -import os from subprocess import Popen, PIPE, STDOUT -import sys - +from Bcfg2.Server import XI, XI_NAMESPACE import Bcfg2.Server.Lint class Validate(Bcfg2.Server.Lint.ServerlessPlugin): @@ -177,23 +177,29 @@ class Validate(Bcfg2.Server.Lint.ServerlessPlugin): def follow_xinclude(self, xfile): """ follow xincludes in the given file """ xdata = lxml.etree.parse(xfile) - included = set([ent.get('href') for ent in - xdata.findall('./{http://www.w3.org/2001/XInclude}include')]) + included = set([el + for el in xdata.findall('./%sinclude' % XI_NAMESPACE)]) rv = [] while included: try: - filename = included.pop() + el = included.pop() except KeyError: continue + filename = el.get("href") path = os.path.join(os.path.dirname(xfile), filename) - if self.HandlesFile(path): + if not os.path.exists(path): + if not el.findall('./%sfallback' % XI_NAMESPACE): + self.LintError("broken-xinclude-chain", + "XInclude %s does not exist in %s: %s" % + (filename, xfile, self.RenderXML(el))) + elif self.HandlesFile(path): rv.append(path) groupdata = lxml.etree.parse(path) [included.add(el.get('href')) for el in - groupdata.findall('./{http://www.w3.org/2001/XInclude}include')] + groupdata.findall('./%sinclude' % XI_NAMESPACE)] included.discard(filename) return rv |