summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorLuke Dashjr <luke-jr+git@utopios.org>2016-12-15 04:23:13 +0000
committerLuke Dashjr <luke-jr+git@utopios.org>2016-12-15 04:23:13 +0000
commitd2a8fb089d7010d839530f879e07edc4e48b84fa (patch)
treeb14d6108feae9d6bd1f1e25e83e66ead23539130 /scripts
parenta7cc4c6014934f520ca7fb6e20fd21078e0d61f7 (diff)
parent3a28003993720d2e882f6513ec499f25cc163afc (diff)
downloadbips-d2a8fb089d7010d839530f879e07edc4e48b84fa.tar.xz
Merge BIPs 123 & 2 activation and implementation
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/buildtable.pl71
1 files changed, 67 insertions, 4 deletions
diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl
index d8f52f2..fb49c67 100755
--- a/scripts/buildtable.pl
+++ b/scripts/buildtable.pl
@@ -3,17 +3,23 @@ use strict;
use warnings;
my $topbip = 9999;
+my $include_layer = 0;
my %RequiredFields = (
BIP => undef,
Title => undef,
Author => undef,
+ 'Comments-Summary' => undef,
+ 'Comments-URI' => undef,
Status => undef,
Type => undef,
Created => undef,
+ # License => undef, (has exceptions)
);
my %MayHaveMulti = (
Author => undef,
+ 'Comments-URI' => undef,
+ License => undef,
'Post-History' => undef,
);
my %DateField = (
@@ -24,17 +30,24 @@ my %EmailField = (
Editor => undef,
);
my %MiscField = (
+ 'Comments-Summary' => undef,
'Discussions-To' => undef,
'Post-History' => undef,
'Replaces' => undef,
'Superseded-By' => undef,
- 'Resolution' => undef,
);
+my %ValidLayer = (
+ 'Consensus (soft fork)' => undef,
+ 'Consensus (hard fork)' => undef,
+ 'Peer Services' => undef,
+ 'API/RPC' => undef,
+ 'Applications' => undef,
+);
my %ValidStatus = (
Draft => undef,
Deferred => undef,
- Accepted => "background-color: #ffffcf",
+ Proposed => "background-color: #ffffcf",
Rejected => "background-color: #ffcfcf",
Withdrawn => "background-color: #ffcfcf",
Final => "background-color: #cfffcf",
@@ -46,6 +59,34 @@ my %ValidType = (
'Informational' => undef,
'Process' => undef,
);
+my %RecommendedLicenses = (
+ 'BSD-2-Clause' => undef,
+ 'BSD-3-Clause' => undef,
+ 'CC0-1.0' => undef,
+ 'GNU-All-Permissive' => undef,
+);
+my %AcceptableLicenses = (
+ %RecommendedLicenses,
+ 'Apache-2.0' => undef,
+ 'BSL-1.0' => undef,
+ 'CC-BY-4.0' => undef,
+ 'CC-BY-SA-4.0' => undef,
+ 'MIT' => undef,
+ 'AGPL-3.0' => undef,
+ 'AGPL-3.0+' => undef,
+ 'FDL-1.3' => undef,
+ 'GPL-2.0' => undef,
+ 'GPL-2.0+' => undef,
+ 'LGPL-2.1' => undef,
+ 'LGPL-2.1+' => undef,
+);
+my %DefinedLicenses = (
+ %AcceptableLicenses,
+ 'OPL' => undef,
+ 'PD' => undef,
+);
+my %GrandfatheredPD = map { $_ => undef } qw(9 36 37 38 42 49 50 60 65 67 69 74 80 81 83 90 99 105 107 109 111 112 113 114 122 124 125 126 130 131 132 133 140 141 142 143 144 146 147 150 151 152);
+my %TolerateMissingLicense = map { $_ => undef } qw(1 10 11 12 13 14 15 16 21 30 31 32 33 34 35 39 43 44 45 47 61 62 64 66 68 70 71 72 73 75 101 102 103 106 120 121 123);
my %emails;
@@ -58,7 +99,7 @@ while (++$bipnum <= $topbip) {
die "No <pre> in $fn" if eof $F;
}
my %found;
- my ($title, $author, $status, $type);
+ my ($title, $author, $status, $type, $layer);
my ($field, $val);
while (<$F>) {
m[^</pre>$] && last;
@@ -74,7 +115,6 @@ while (++$bipnum <= $topbip) {
} else {
die "Bad line in $fn preamble";
}
- ++$found{$field};
die "Extra spaces in $fn" if $val =~ /^\s/;
if ($field eq 'BIP') {
die "$fn claims to be BIP $val" if $val ne $bipnum;
@@ -103,6 +143,18 @@ while (++$bipnum <= $topbip) {
} else {
$type = $val;
}
+ } elsif ($field eq 'Layer') { # BIP 123
+ die "Invalid layer $val in $fn" unless exists $ValidLayer{$val};
+ $layer = $val;
+ } elsif ($field eq 'License') {
+ die "Undefined license $val in $fn" unless exists $DefinedLicenses{$val};
+ if (not $found{License}) {
+ die "Unacceptable license $val in $fn" unless exists $AcceptableLicenses{$val} or ($val eq 'PD' and exists $GrandfatheredPD{$bipnum});
+ }
+ } elsif ($field eq 'Comments-URI') {
+ if (not $found{'Comments-URI'}) {
+ die unless $val eq sprintf('https://github.com/bitcoin/bips/wiki/Comments:BIP-%04d', $bipnum);
+ }
} elsif (exists $DateField{$field}) {
die "Invalid date format in $fn" unless $val =~ /^20\d{2}\-(?:0\d|1[012])\-(?:[012]\d|30|31)$/;
} elsif (exists $EmailField{$field}) {
@@ -110,6 +162,10 @@ while (++$bipnum <= $topbip) {
} elsif (not exists $MiscField{$field}) {
die "Unknown field $field in $fn";
}
+ ++$found{$field};
+ }
+ if (not $found{License}) {
+ die "Missing License in $fn" unless exists $TolerateMissingLicense{$bipnum};
}
for my $field (keys %RequiredFields) {
die "Missing $field in $fn" unless $found{$field};
@@ -120,6 +176,13 @@ while (++$bipnum <= $topbip) {
}
print "\n";
print "| [[${fn}|${bipnum}]]\n";
+ if ($include_layer) {
+ if (defined $layer) {
+ print "| ${layer}\n";
+ } else {
+ print "|\n";
+ }
+ }
print "| ${title}\n";
print "| ${author}\n";
print "| ${type}\n";