Tweak the implementation of proposal 109 slightly: allow at most
[tor.git] / contrib / checkOptionDocs.pl
blobd58d3375b9d830aa3e55de9574e1156a5fe0eeee
1 #!/usr/bin/perl -w
2 # $Id
3 use strict;
5 my %options = ();
6 my %descOptions = ();
7 my %torrcSampleOptions = ();
8 my %torrcCompleteOptions = ();
9 my %manPageOptions = ();
11 # Load the canonical list as actually accepted by Tor.
12 my $mostRecentOption;
13 open(F, "./src/or/tor --list-torrc-options |") or die;
14 while (<F>) {
15 next if m!\[notice\] Tor v0\.!;
16 if (m!^([A-Za-z0-9_]+)!) {
17 $mostRecentOption = lc $1;
18 $options{$mostRecentOption} = 1;
19 } elsif (m!^ !) {
20 $descOptions{$mostRecentOption} = 1;
21 if (m!\{DEPRECATED\}!) {
22 delete $descOptions{$mostRecentOption};
23 delete $options{$mostRecentOption};
25 } else {
26 print "Unrecognized output> ";
27 print;
30 close F;
32 # Load the contents of torrc.sample and torrc.complete
33 sub loadTorrc {
34 my ($fname, $options) = @_;
35 local *F;
36 open(F, "$fname") or die;
37 while (<F>) {
38 next if (m!##+!);
39 if (m!#([A-Za-z0-9_]+)!) {
40 $options->{lc $1} = 1;
43 close F;
47 loadTorrc("./src/config/torrc.sample.in", \%torrcSampleOptions);
48 loadTorrc("./src/config/torrc.complete.in", \%torrcCompleteOptions);
50 # Try to figure out what's in the man page.
52 my $considerNextLine = 0;
53 open(F, "./doc/tor.1.in") or die;
54 while (<F>) {
55 if ($considerNextLine and
56 m!^\\fB([A-Za-z0-9_]+)!) {
57 $manPageOptions{lc $1} = 1;
60 if (m!^\.(?:SH|TP)!) {
61 $considerNextLine = 1; next;
62 } else {
63 $considerNextLine = 0;
66 close F;
68 # Now, display differences:
70 sub subtractHashes {
71 my ($s, $a, $b) = @_;
72 my @lst = ();
73 for my $k (keys %$a) {
74 push @lst, $k unless (exists $b->{$k});
76 print "$s: ", join(' ', sort @lst), "\n\n";
80 subtractHashes("No online docs", \%options, \%descOptions);
81 # subtractHashes("Orphaned online docs", \%descOptions, \%options);
83 subtractHashes("Not in torrc.complete.in", \%options, \%torrcCompleteOptions);
84 subtractHashes("Orphaned in torrc.complete.in", \%torrcCompleteOptions, \%options);
85 subtractHashes("Orphaned in torrc.sample.in", \%torrcSampleOptions, \%options);
87 subtractHashes("Not in man page", \%options, \%manPageOptions);
88 subtractHashes("Orphaned in man page", \%manPageOptions, \%options);