diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2013-11-18 09:19:34 -0500 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2013-11-18 09:19:37 -0500 |
commit | 504741f24c050684d1707cac057fdd4677afdd64 (patch) | |
tree | b323c780cf4191758a268ccd39c803aa57446733 /src/lib/Bcfg2/Server/Lint | |
parent | 264b9486bec017a4771c437efa9231a6cf7cf0ef (diff) | |
download | bcfg2-504741f24c050684d1707cac057fdd4677afdd64.tar.gz bcfg2-504741f24c050684d1707cac057fdd4677afdd64.tar.bz2 bcfg2-504741f24c050684d1707cac057fdd4677afdd64.zip |
bcfg2-lint: resolve XIncludes when parsing XML for validation
Diffstat (limited to 'src/lib/Bcfg2/Server/Lint')
-rw-r--r-- | src/lib/Bcfg2/Server/Lint/Validate.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/lib/Bcfg2/Server/Lint/Validate.py b/src/lib/Bcfg2/Server/Lint/Validate.py index c537877a0..ced16770b 100644 --- a/src/lib/Bcfg2/Server/Lint/Validate.py +++ b/src/lib/Bcfg2/Server/Lint/Validate.py @@ -107,9 +107,16 @@ class Validate(Bcfg2.Server.Lint.ServerlessPlugin): :type filename: string :returns: lxml.etree._ElementTree - the parsed data""" try: - return lxml.etree.parse(filename) - except SyntaxError: - lint = Popen(["xmllint", filename], stdout=PIPE, stderr=STDOUT) + xdata = lxml.etree.parse(filename) + if self.files is None: + xdata.xinclude() + return xdata + except (lxml.etree.XIncludeError, SyntaxError): + cmd = ["xmllint", "--noout"] + if self.files is None: + cmd.append("--xinclude") + cmd.append(filename) + lint = Popen(cmd, stdout=PIPE, stderr=STDOUT) self.LintError("xml-failed-to-parse", "%s fails to parse:\n%s" % (filename, lint.communicate()[0])) @@ -141,6 +148,8 @@ class Validate(Bcfg2.Server.Lint.ServerlessPlugin): if not schema: return False datafile = self.parse(filename) + if not datafile: + return False if not schema.validate(datafile): cmd = ["xmllint"] if self.files is None: |