From 320244104f2de73a758b0644d12185981c111582 Mon Sep 17 00:00:00 2001 From: Gary Oberbrunner Date: Sat, 4 May 2013 16:28:50 -0400 Subject: New doc toolchain changes: bin/SConsDoc.py: catch parse exceptions and improve error msgs bin/docs-validate.py: allow testing individual files from cmd line src/engine/SCons/Tool/zip.xml: fix text to validate against DTD --- bin/SConsDoc.py | 27 ++++++++++++++++++--------- bin/docs-validate.py | 28 +++++++++++++++++----------- src/engine/SCons/Tool/zip.xml | 8 +++++--- 3 files changed, 40 insertions(+), 23 deletions(-) diff --git a/bin/SConsDoc.py b/bin/SConsDoc.py index 240a8c2..c9d1e6e 100644 --- a/bin/SConsDoc.py +++ b/bin/SConsDoc.py @@ -330,13 +330,18 @@ if not has_libxml2: def validateXml(self, fpath, xmlschema_context): # Use lxml xmlschema = etree.XMLSchema(xmlschema_context) - doc = etree.parse(fpath) + try: + doc = etree.parse(fpath) + except Exception, e: + print "ERROR: %s fails to parse:"%fpath + print e + return False doc.xinclude() try: xmlschema.assertValid(doc) except Exception, e: + print "ERROR: %s fails to validate:" % fpath print e - print "%s fails to validate" % fpath return False return True @@ -618,16 +623,20 @@ def validate_all_xml(dpaths, xsdfile=default_xsd): fpaths = [] for dp in dpaths: - for path, dirs, files in os.walk(dp): - for f in files: - if f.endswith('.xml'): - fp = os.path.join(path, f) - if isSConsXml(fp): - fpaths.append(fp) + if dp.endswith('.xml') and isSConsXml(dp): + path='.' + fpaths.append(dp) + else: + for path, dirs, files in os.walk(dp): + for f in files: + if f.endswith('.xml'): + fp = os.path.join(path, f) + if isSConsXml(fp): + fpaths.append(fp) fails = [] for idx, fp in enumerate(fpaths): - fpath = os.path.join(path, f) + fpath = os.path.join(path, fp) print "%.2f%s (%d/%d) %s" % (float(idx+1)*100.0/float(len(fpaths)), perc, idx+1, len(fpaths),fp) diff --git a/bin/docs-validate.py b/bin/docs-validate.py index 1ed0da0..c445c3f 100644 --- a/bin/docs-validate.py +++ b/bin/docs-validate.py @@ -4,18 +4,24 @@ # documentation files against our own XSD in docs/xsd. # -import os +import sys,os import SConsDoc if __name__ == "__main__": - if SConsDoc.validate_all_xml(['src', - os.path.join('doc','design'), - os.path.join('doc','developer'), - os.path.join('doc','man'), - os.path.join('doc','python10'), - os.path.join('doc','reference'), - os.path.join('doc','user') - ]): - print "OK" + if len(sys.argv)>1: + if SConsDoc.validate_all_xml((sys.argv[1],)): + print "OK" + else: + print "Validation failed! Please correct the errors above and try again." else: - print "Validation failed! Please correct the errors above and try again." + if SConsDoc.validate_all_xml(['src', + os.path.join('doc','design'), + os.path.join('doc','developer'), + os.path.join('doc','man'), + os.path.join('doc','python10'), + os.path.join('doc','reference'), + os.path.join('doc','user') + ]): + print "OK" + else: + print "Validation failed! Please correct the errors above and try again." diff --git a/src/engine/SCons/Tool/zip.xml b/src/engine/SCons/Tool/zip.xml index 3d7cb24..af68533 100644 --- a/src/engine/SCons/Tool/zip.xml +++ b/src/engine/SCons/Tool/zip.xml @@ -143,7 +143,6 @@ The suffix used for zip file names. - An optional zip root directory (default empty). The filenames stored @@ -151,13 +150,16 @@ in the zip file will be relative to this directory, if given. Otherwise the filenames are relative to the current directory of the command. For instance: - + env = Environment() env.Zip('foo.zip', 'subdir1/subdir2/file1', ZIPROOT='subdir1') - + + will produce a zip file foo.zip containing a file with the name subdir2/file1 rather than subdir1/subdir2/file1. + + -- cgit v0.12