1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

find_missing_doc: Convert to python.

This commit is contained in:
Jelmer Vernooij 2012-09-26 02:37:01 +02:00
parent f2b2c1028b
commit 4192960a9e
2 changed files with 97 additions and 59 deletions

View File

@ -1,62 +1,83 @@
#!/usr/bin/perl
#!/usr/bin/python
my %doc;
# Copyright (C) 2007,2012 Jelmer Vernooij <jelmer@samba.org>
$topdir = (shift @ARGV) or $topdir = ".";
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import optparse
import os
import re
parser = optparse.OptionParser("source_dir")
(opts, args) = parser.parse_args()
if len(args) == 1:
topdir = args[0]
else:
topdir = "."
##################################################
# Reading links from manpage
$curdir = $ENV{PWD};
curdir = os.getcwd()
doc = {}
chdir("smbdotconf");
os.chdir("smbdotconf");
open(IN,"xsltproc --xinclude --param smb.context ALL generate-context.xsl parameters.all.xml|");
f = os.popen("xsltproc --xinclude --param smb.context ALL generate-context.xsl parameters.all.xml", "r")
try:
for l in f.readlines():
m = re.match('<samba:parameter .*?name="([^"]*?)"', l)
if m:
name = m.group(1).replace(" ", "")
doc[name] = False
finally:
f.close()
while(<IN>) {
if( /<samba:parameter .*?name="([^"]*?)"/g ){
my $name = $1;
$name =~ s/ //g;
$doc{$name} = "NOTFOUND";
}
}
os.chdir(curdir)
close(IN);
chdir($curdir);
#################################################
# Reading entries from source code
f = open(os.path.join(topdir, "lib/param/param_table.c"), "r")
open(SOURCE,"$topdir/lib/param/param_table.c") or die("Can't open $topdir/lib/param/param_table.c: $!");
# burn through the preceding lines
while True:
l = f.readline()
if l.startswith("static struct parm_struct parm_table"):
break
while ($ln = <SOURCE>) {
last if $ln =~ m/^static\ struct\ parm_struct\ parm_table.*/;
} #burn through the preceding lines
for l in f.readlines():
if re.match("^\s*\}\;\s*$", l):
break
# pull in the param names only
if re.match(".*P_SEPARATOR.*", l):
continue
m = re.match("\s*\.label\s*=\s*\"(.*)\".*", l)
if not m:
continue
while ($ln = <SOURCE>) {
last if $ln =~ m/^\s*\}\;\s*$/;
#pull in the param names only
next if $ln =~ m/.*P_SEPARATOR.*/;
next unless $ln =~ /\s*\.label\s*=\s*\"(.*)\".*/;
name = m.group(1)
name = name.replace(" ", "")
my $name = $1;
$name =~ s/ //g;
if name.lower() in doc:
doc[name.lower()] = True
else:
print "'%s' is not documented" % name
f.close()
if($doc{lc($name)}) {
$doc{lc($name)} = "FOUND";
} else {
print "'$name' is not documented\n";
}
}
close SOURCE;
##################################################
# Trying to find missing references
foreach (keys %doc) {
if($doc{$_} cmp "FOUND") {
print "'$_' is documented but is not a configuration option\n";
}
}
# Try to find missing references
for key in doc.keys():
if doc[key] == "FOUND":
print "'$_' is documented but is not a configuration option"

View File

@ -1,4 +1,19 @@
#!/usr/bin/python
# Copyright (C) 2007,2012 Jelmer Vernooij <jelmer@samba.org>
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import optparse
import os
@ -8,7 +23,7 @@ parser = optparse.OptionParser("source_dir")
(opts, args) = parser.parse_args()
invar = 0
invar = False
if len(args) == 1:
topdir = args[0]
@ -18,19 +33,21 @@ else:
progs = []
f = open(os.path.join(topdir, "Makefile.in"), "r")
for l in f.readlines():
l = l.strip()
if invar:
invar = (l[-1] == "\\")
progs.extend(l.rstrip("\\").split(" "))
else:
m = re.match("^([^ ]*)_PROGS([0-9]*) = (.*?)([\\\\])$", l)
if m:
progs.extend(m.group(3).split(" "))
invar = (m.group(4) == "\\")
try:
for l in f.readlines():
l = l.strip()
if invar:
invar = (l[-1] == "\\")
progs.extend(l.rstrip("\\").split(" "))
else:
invar = False
m = re.match("^([^ ]*)_PROGS([0-9]*) = (.*?)([\\\\])$", l)
if m:
progs.extend(m.group(3).split(" "))
invar = (m.group(4) == "\\")
else:
invar = False
finally:
f.close()
#$progs =~ s/@([^@]+)@//g;
#$progs =~ s/\$\(.*?\)//g;