Blame tools/paramcheck.py

Packit Service 76cb02
import os
Packit Service 76cb02
import glob
Packit Service 76cb02
import re
Packit Service 76cb02
from subprocess import Popen, PIPE
Packit Service 76cb02
from xml.dom.minidom import parseString
Packit Service 76cb02
Packit Service 76cb02
def strip_list(lst, patterns):
Packit Service 76cb02
    striped = []
Packit Service 76cb02
    for p in lst:
Packit Service 76cb02
        strip = 0
Packit Service 76cb02
        for pat in patterns:
Packit Service 76cb02
            if pat in p:
Packit Service 76cb02
                strip = 1
Packit Service 76cb02
                break
Packit Service 76cb02
        if not(strip):
Packit Service 76cb02
            striped.append(p)
Packit Service 76cb02
    return striped
Packit Service 76cb02
Packit Service 76cb02
Packit Service 76cb02
def get_doc_params(docparam):
Packit Service 76cb02
    xsl_params_get = \
Packit Service 76cb02
"""
Packit Service 76cb02
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
Packit Service 76cb02
Packit Service 76cb02
<xsl:output method="text" indent="yes"/> 
Packit Service 76cb02
Packit Service 76cb02
<xsl:template match="programlisting">
Packit Service 76cb02
  <xsl:copy-of select="."/>
Packit Service 76cb02
</xsl:template>
Packit Service 76cb02
Packit Service 76cb02
<xsl:template match="/">
Packit Service 76cb02
  <xsl:apply-templates select="//programlisting"/>
Packit Service 76cb02
</xsl:template>
Packit Service 76cb02
Packit Service 76cb02
</xsl:stylesheet>
Packit Service 76cb02
"""
Packit Service 76cb02
Packit Service 76cb02
    xsltmp = "/tmp/getparam.xsl"
Packit Service 76cb02
    xsl = open("/tmp/getparam.xsl", "w")
Packit Service 76cb02
    xsl.write(xsl_params_get)
Packit Service 76cb02
    xsl.close()
Packit Service 76cb02
Packit Service 76cb02
    p = Popen("xsltproc --xinclude %s %s" % (xsltmp, docparam), shell=True,
Packit Service 76cb02
              stdout=PIPE, )#stderr=open("/dev/null", "w"))
Packit Service 76cb02
    data = p.communicate()[0].split("\n")
Packit Service 76cb02
    params = []
Packit Service 76cb02
    for line in data:
Packit Service 76cb02
        m = re.search("
Packit Service 76cb02
        if m:
Packit Service 76cb02
            params.append(m.group(1)+".xml")
Packit Service 76cb02
Packit Service 76cb02
    return params
Packit Service 76cb02
Packit Service 76cb02
def get_xsl_params(xslextract, xsltarget):
Packit Service 76cb02
    # Get the list of all the parameters
Packit Service 76cb02
    p = Popen("xsltproc %s %s" % (xslextract, xsltarget), shell=True,
Packit Service 76cb02
              stdout=PIPE, stderr=open("/dev/null", "w"))
Packit Service 76cb02
    dom = parseString(p.communicate()[0])
Packit Service 76cb02
Packit Service 76cb02
    params = []
Packit Service 76cb02
    for e in dom.getElementsByTagName("xsl:param"):
Packit Service 76cb02
        params.append(str(e.getAttribute("name"))+".xml")
Packit Service 76cb02
    return params
Packit Service 76cb02
Packit Service 76cb02
Packit Service 76cb02
def main():
Packit Service 76cb02
    tooldir = os.path.dirname(__file__)
Packit Service 76cb02
    topdir = os.path.abspath(os.path.join(tooldir, ".."))
Packit Service 76cb02
    xslextract = os.path.join(topdir, "tools", "paramextract.xsl")
Packit Service 76cb02
    xsltarget = os.path.join(topdir, "xsl", "docbook.xsl")
Packit Service 76cb02
    synopdir = os.path.join(topdir, "docs", "params", "syn")
Packit Service 76cb02
    refentdir = os.path.join(topdir, "docs", "params")
Packit Service 76cb02
Packit Service 76cb02
    # d1 = get_doc_params(os.path.join(refentdir, "param.xml"))
Packit Service 76cb02
Packit Service 76cb02
    # parfiles
Packit Service 76cb02
    parfiles = get_xsl_params(xslextract, xsltarget)
Packit Service 76cb02
Packit Service 76cb02
    # Get the list of parameter synopsis
Packit Service 76cb02
    synfiles = [os.path.basename(f) for f in glob.glob("%s/*.xml" % synopdir)]
Packit Service 76cb02
Packit Service 76cb02
    # Get the list of parameter refentries
Packit Service 76cb02
    reffiles = [os.path.basename(f) for f in glob.glob("%s/*.xml" % refentdir)]
Packit Service 76cb02
Packit Service 76cb02
    # Strip parameters we know are not documented
Packit Service 76cb02
    tostrip = ("l10n", "olink", "chunker", "autolabel",
Packit Service 76cb02
               "target.database.document", "targets.filename",
Packit Service 76cb02
               "current.docid")
Packit Service 76cb02
    parfiles = strip_list(parfiles, tostrip)
Packit Service 76cb02
    synfiles = strip_list(synfiles, tostrip)
Packit Service 76cb02
    reffiles = strip_list(reffiles, tostrip)
Packit Service 76cb02
Packit Service 76cb02
    parfiles.sort()
Packit Service 76cb02
    synfiles.sort()
Packit Service 76cb02
    reffiles.sort()
Packit Service 76cb02
Packit Service 76cb02
    # Strip files that are not parameter refentries
Packit Service 76cb02
    for p in ("param", "template"):
Packit Service 76cb02
        reffiles.remove(p+".xml")
Packit Service 76cb02
Packit Service 76cb02
    # Check if there's some missed parameters
Packit Service 76cb02
    sp = set(parfiles)
Packit Service 76cb02
    ss = set(synfiles)
Packit Service 76cb02
    sr = set(reffiles)
Packit Service 76cb02
Packit Service 76cb02
    torem_from_syn = ss - sp
Packit Service 76cb02
    print "==========="
Packit Service 76cb02
    print "In param list, missing in %s:\n" % (synopdir), sp - ss
Packit Service 76cb02
    print "\nIn param list, missing in refentries:\n", sp - sr
Packit Service 76cb02
    print "\nIn synopsis, not in param list:\n", torem_from_syn
Packit Service 76cb02
    print "\nIn synopsis, missing in refentries:\n", ss - sr - torem_from_syn
Packit Service 76cb02
    print "\nIn refentries, missing in %s:\n" % (synopdir), sr - ss
Packit Service 76cb02
Packit Service 76cb02
Packit Service 76cb02
if __name__ == "__main__":
Packit Service 76cb02
    main()