1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #!/usr/bin/perl -w
- # Copyright 2007 Nick Mathewson. See LICENSE for licensing information.
- use strict;
- my $propdir = ".";
- local *DIR;
- local *F;
- opendir(DIR, $propdir) || die "Can't open $propdir";
- my @files = sort grep { /^\d\d\d-.*[^\~]$/ } readdir(DIR);
- closedir DIR;
- my %title = ();
- my %status = ();
- my @KNOWN_STATUSES = qw{
- DRAFT OPEN NEEDS-REVISION NEEDS-RESEARCH ACCEPTED META FINISHED CLOSED
- SUPERSEDED DEAD};
- for my $f (@files) {
- my $num = substr($f, 0, 3);
- my $status = undef;
- my $title = undef;
- my $implemented_in = undef;
- my $target = undef;
- my $alleged_fname = undef;
- if ($f !~ /\.txt/) { print "$f doesn't end with .txt\n"; }
- open(F, "$f");
- while (<F>) {
- last if (/^\s*$/);
- if (/^Status: (.*)/) {
- $status = uc $1;
- chomp $status;
- }
- if (/^Filename: (.*)/) {
- $alleged_fname = $1;
- chomp $alleged_fname;
- }
- if (/^Title: (.*)/) {
- $title = $1;
- $title =~ s/\.$//;
- chomp $title;
- }
- if (/^Implemented-In: (.*)/) {
- $implemented_in = $1;
- chomp $implemented_in;
- }
- if (/^Target: (.*)/) {
- $target = $1;
- chomp $target;
- }
- }
- close F;
- die "I've never heard of status $status in proposal $num"
- unless (grep(/$status/, @KNOWN_STATUSES) == 1);
- die "Proposal $num has a bad status line" if (!defined $status);
- die "Proposal $num has a bad title line" if (!defined $title);
- die "Proposal $num has no Filename line" unless (defined $alleged_fname);
- die "Proposal $num says its fname is $alleged_fname, but it's really $f"
- if ($alleged_fname ne $f);
- print "No Target for proposal $num\n" if (($status eq 'OPEN' or
- $status eq 'ACCEPTED')
- and !defined $target);
- print "No Implemented-In for proposal $num\n"
- if (($status eq 'CLOSED' or $status eq 'FINISHED')
- and !defined $implemented_in);
- $title{$num} = $title;
- $status{$num} = $status;
- }
- local *OUT;
- open(OUT, ">000-index.txt.tmp");
- open(F, "000-index.txt") or die "Can't open index file.";
- while (<F>) {
- print OUT;
- last if (/^={3,}/);
- }
- close(F);
- print OUT "Proposals by number:\n\n";
- for my $num (sort keys %title) {
- print OUT "$num $title{$num} [$status{$num}]\n";
- }
- print OUT "\n\nProposals by status:\n\n";
- for my $status (@KNOWN_STATUSES) {
- print OUT " $status:\n";
- for my $num (sort keys %status) {
- next unless ($status{$num} eq $status);
- print OUT " $num $title{$num}\n";
- }
- }
- rename('000-index.txt.tmp', '000-index.txt');
|