summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/Lint
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2013-11-18 09:19:34 -0500
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2013-11-18 09:19:37 -0500
commit504741f24c050684d1707cac057fdd4677afdd64 (patch)
treeb323c780cf4191758a268ccd39c803aa57446733 /src/lib/Bcfg2/Server/Lint
parent264b9486bec017a4771c437efa9231a6cf7cf0ef (diff)
downloadbcfg2-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.py15
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: