[or-cvs] r17531: {tor} Migrate the reindex script to python, since adding features (tor/trunk/doc/spec/proposals)
nickm at seul.org
nickm at seul.org
Tue Dec 9 16:13:38 UTC 2008
Author: nickm
Date: 2008-12-09 11:13:38 -0500 (Tue, 09 Dec 2008)
New Revision: 17531
Added:
tor/trunk/doc/spec/proposals/reindex.py
Removed:
tor/trunk/doc/spec/proposals/reindex.pl
Modified:
tor/trunk/doc/spec/proposals/000-index.txt
tor/trunk/doc/spec/proposals/144-enforce-distinct-providers.txt
Log:
Migrate the reindex script to python, since adding features to the Perl was getting too ugly. Make it handle line-continuations, and include target versions in output.
Modified: tor/trunk/doc/spec/proposals/000-index.txt
===================================================================
--- tor/trunk/doc/spec/proposals/000-index.txt 2008-12-09 16:02:09 UTC (rev 17530)
+++ tor/trunk/doc/spec/proposals/000-index.txt 2008-12-09 16:13:38 UTC (rev 17531)
@@ -13,7 +13,7 @@
This is an informational document.
Everything in this document below the line of '=' signs is automatically
- generated by reindex.pl; do not edit by hand.
+ generated by reindex.py; do not edit by hand.
============================================================
Proposals by number:
@@ -66,7 +66,7 @@
141 Download server descriptors on demand [DRAFT]
142 Combine Introduction and Rendezvous Points [OPEN]
143 Improvements of Distributed Storage for Tor Hidden Service Descriptors [OPEN]
-144 Increase the diversity of circuits by detecting nodes belonging the [DRAFT]
+144 Increase the diversity of circuits by detecting nodes belonging the same provider [DRAFT]
145 Separate "suitable as a guard" from "suitable as a new guard" [OPEN]
146 Add new flag to reflect long-term stability [OPEN]
147 Eliminate the need for v2 directories in generating v3 directories [ACCEPTED]
@@ -74,7 +74,7 @@
149 Using data from NETINFO cells [OPEN]
150 Exclude Exit Nodes from a circuit [CLOSED]
151 Improving Tor Path Selection [DRAFT]
-152 Optionally allow exit from single-hop circuits [CLOSED]
+152 Optionally allow exit from single-hop circuits [CLOSED]
153 Automatic software update protocol [SUPERSEDED]
154 Automatic Software Update Protocol [SUPERSEDED]
155 Four Improvements of Hidden Service Performance [OPEN]
@@ -89,62 +89,61 @@
132 A Tor Web Service For Verifying Correct Browser Configuration
133 Incorporate Unreachable ORs into the Tor Network
141 Download server descriptors on demand
- 144 Increase the diversity of circuits by detecting nodes belonging the
+ 144 Increase the diversity of circuits by detecting nodes belonging the same provider
151 Improving Tor Path Selection
- OPEN:
- 121 Hidden Service Authentication
- 142 Combine Introduction and Rendezvous Points
- 143 Improvements of Distributed Storage for Tor Hidden Service Descriptors
- 145 Separate "suitable as a guard" from "suitable as a new guard"
- 146 Add new flag to reflect long-term stability
- 149 Using data from NETINFO cells
- 155 Four Improvements of Hidden Service Performance
- 156 Tracking blocked ports on the client side
- 157 Make certificate downloads specific
NEEDS-REVISION:
131 Help users to verify they are using Tor
- NEEDS-RESEARCH:
+ OPEN:
+ 121 Hidden Service Authentication [for 0.2.1.x]
+ 142 Combine Introduction and Rendezvous Points [for 0.2.2.x]
+ 143 Improvements of Distributed Storage for Tor Hidden Service Descriptors [for 0.2.1.x]
+ 145 Separate "suitable as a guard" from "suitable as a new guard" [for 0.2.1.x]
+ 146 Add new flag to reflect long-term stability [for 0.2.1.x]
+ 149 Using data from NETINFO cells [for 0.2.1.x]
+ 155 Four Improvements of Hidden Service Performance [for 0.2.1.x]
+ 156 Tracking blocked ports on the client side [for 0.2.?]
+ 157 Make certificate downloads specific [for 0.2.1.x]
ACCEPTED:
- 110 Avoiding infinite length circuits
- 117 IPv6 exits
- 118 Advertising multiple ORPorts at once
- 134 More robust consensus voting with diverse authority sets
- 140 Provide diffs between consensuses
- 147 Eliminate the need for v2 directories in generating v3 directories
- 148 Stream end reasons from the client side should be uniform
+ 110 Avoiding infinite length circuits [for 0.2.1.x] [in 0.2.1.3-alpha]
+ 117 IPv6 exits [for 0.2.1.x]
+ 118 Advertising multiple ORPorts at once [for 0.2.1.x]
+ 134 More robust consensus voting with diverse authority sets [for 0.2.1.x]
+ 140 Provide diffs between consensuses [for 0.2.1.x]
+ 147 Eliminate the need for v2 directories in generating v3 directories [for 0.2.1.x]
+ 148 Stream end reasons from the client side should be uniform [for 0.2.1.x]
META:
000 Index of Tor Proposals
001 The Tor Proposal Process
098 Proposals that should be written
099 Miscellaneous proposals
FINISHED:
- 111 Prioritizing local traffic over relayed traffic
- 128 Families of private bridges
+ 111 Prioritizing local traffic over relayed traffic [in 0.2.0.x]
+ 128 Families of private bridges [in 0.2.0.x]
CLOSED:
- 101 Voting on the Tor Directory System
- 102 Dropping "opt" from the directory format
- 103 Splitting identity key from regularly used signing key
- 104 Long and Short Router Descriptors
- 105 Version negotiation for the Tor protocol
- 106 Checking fewer things during TLS handshakes
- 107 Uptime Sanity Checking
- 108 Base "Stable" Flag on Mean Time Between Failures
- 109 No more than one server per IP address
- 114 Distributed Storage for Tor Hidden Service Descriptors
- 119 New PROTOCOLINFO command for controllers
- 122 Network status entries need a new Unnamed flag
- 123 Naming authorities automatically create bindings
- 125 Behavior for bridge users, bridge relays, and bridge authorities
- 126 Getting GeoIP data and publishing usage summaries
- 129 Block Insecure Protocols by Default
- 130 Version 2 Tor connection protocol
- 135 Simplify Configuration of Private Tor Networks
- 136 Mass authority migration with legacy keys
- 137 Keep controllers informed as Tor bootstraps
- 138 Remove routers that are not Running from consensus documents
- 139 Download consensus documents only when it will be trusted
- 150 Exclude Exit Nodes from a circuit
- 152 Optionally allow exit from single-hop circuits
+ 101 Voting on the Tor Directory System [in 0.2.0.x]
+ 102 Dropping "opt" from the directory format [in 0.2.0.x]
+ 103 Splitting identity key from regularly used signing key [in 0.2.0.x]
+ 104 Long and Short Router Descriptors [in 0.2.0.x]
+ 105 Version negotiation for the Tor protocol [in 0.2.0.x]
+ 106 Checking fewer things during TLS handshakes [in 0.2.0.x]
+ 107 Uptime Sanity Checking [in 0.2.0.x]
+ 108 Base "Stable" Flag on Mean Time Between Failures [in 0.2.0.x]
+ 109 No more than one server per IP address [in 0.2.0.x]
+ 114 Distributed Storage for Tor Hidden Service Descriptors [in 0.2.0.x]
+ 119 New PROTOCOLINFO command for controllers [in 0.2.0.x]
+ 122 Network status entries need a new Unnamed flag [in 0.2.0.x]
+ 123 Naming authorities automatically create bindings [in 0.2.0.x]
+ 125 Behavior for bridge users, bridge relays, and bridge authorities [in 0.2.0.x]
+ 126 Getting GeoIP data and publishing usage summaries [in 0.2.0.x]
+ 129 Block Insecure Protocols by Default [in 0.2.0.x]
+ 130 Version 2 Tor connection protocol [in 0.2.0.x]
+ 135 Simplify Configuration of Private Tor Networks [for 0.2.1.x] [in 0.2.1.2-alpha]
+ 136 Mass authority migration with legacy keys [in 0.2.0.x]
+ 137 Keep controllers informed as Tor bootstraps [in 0.2.1.x]
+ 138 Remove routers that are not Running from consensus documents [in 0.2.1.2-alpha]
+ 139 Download consensus documents only when it will be trusted [in 0.2.1.x]
+ 150 Exclude Exit Nodes from a circuit [in 0.2.1.3-alpha]
+ 152 Optionally allow exit from single-hop circuits [in 0.2.1.6-alpha]
SUPERSEDED:
112 Bring Back Pathlen Coin Weight
113 Simplifying directory authority administration
Modified: tor/trunk/doc/spec/proposals/144-enforce-distinct-providers.txt
===================================================================
--- tor/trunk/doc/spec/proposals/144-enforce-distinct-providers.txt 2008-12-09 16:02:09 UTC (rev 17530)
+++ tor/trunk/doc/spec/proposals/144-enforce-distinct-providers.txt 2008-12-09 16:13:38 UTC (rev 17531)
@@ -1,6 +1,6 @@
Filename: 144-enforce-distinct-providers.txt
Title: Increase the diversity of circuits by detecting nodes belonging the
-same provider
+ same provider
Author: Mfr
Created: 2008-06-15
Status: Draft
Deleted: tor/trunk/doc/spec/proposals/reindex.pl
===================================================================
--- tor/trunk/doc/spec/proposals/reindex.pl 2008-12-09 16:02:09 UTC (rev 17530)
+++ tor/trunk/doc/spec/proposals/reindex.pl 2008-12-09 16:13:38 UTC (rev 17531)
@@ -1,98 +0,0 @@
-#!/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 "Proposal $num has no status line" if (!defined $status);
- die "I've never heard of status $status in proposal $num"
- unless (grep(/$status/, @KNOWN_STATUSES) == 1);
- die "Proposal $num has no 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');
Added: tor/trunk/doc/spec/proposals/reindex.py
===================================================================
--- tor/trunk/doc/spec/proposals/reindex.py (rev 0)
+++ tor/trunk/doc/spec/proposals/reindex.py 2008-12-09 16:13:38 UTC (rev 17531)
@@ -0,0 +1,117 @@
+#!/usr/bin/python
+
+import re, os
+class Error(Exception): pass
+
+STATUSES = """DRAFT NEEDS-REVISION NEEDS-RESEARCH OPEN ACCEPTED META FINISHED
+ CLOSED SUPERSEDED DEAD""".split()
+REQUIRED_FIELDS = [ "Filename", "Status", "Title" ]
+CONDITIONAL_FIELDS = { "OPEN" : [ "Target" ],
+ "ACCEPTED" : [ "Target "],
+ "CLOSED" : [ "Implemented-In" ],
+ "FINISHED" : [ "Implemented-In" ] }
+FNAME_RE = re.compile(r'^(\d\d\d)-.*[^\~]$')
+DIR = "."
+OUTFILE = "000-index.txt"
+TMPFILE = OUTFILE+".tmp"
+
+def indexed(seq):
+ n = 0
+ for i in seq:
+ yield n, i
+ n += 1
+
+def readProposal(fn):
+ fields = { }
+ f = open(fn, 'r')
+ lastField = None
+ try:
+ for lineno, line in indexed(f):
+ line = line.rstrip()
+ if not line:
+ return fields
+ if line[0].isspace():
+ fields[lastField] += " %s"%(line.strip())
+ else:
+ parts = line.split(":", 1)
+ if len(parts) != 2:
+ raise Error("%s:%s: Neither field nor continuation"%
+ (fn,lineno))
+ else:
+ fields[parts[0]] = parts[1].strip()
+ lastField = parts[0]
+
+ return fields
+ finally:
+ f.close()
+
+def checkProposal(fn, fields):
+ status = fields.get("Status")
+ need_fields = REQUIRED_FIELDS + CONDITIONAL_FIELDS.get(status, [])
+ for f in need_fields:
+ if not fields.has_key(f):
+ raise Error("%s has no %s field"%(fn, f))
+ if fn != fields['Filename']:
+ print `fn`, `fields['Filename']`
+ raise Error("Mismatched Filename field in %s"%fn)
+ if fields['Title'][-1] == '.':
+ fields['Title'] = fields['Title'][:-1]
+
+ status = fields['Status'] = status.upper()
+ if status not in STATUSES:
+ raise Error("I've never heard of status %s in %s"%(status,fn))
+ if status in [ "SUPERSEDED", "DEAD" ]:
+ for f in [ 'Implemented-In', 'Target' ]:
+ if fields.has_key(f): del fields[f]
+
+def readProposals():
+ res = []
+ for fn in os.listdir(DIR):
+ m = FNAME_RE.match(fn)
+ if not m: continue
+ if not fn.endswith(".txt"):
+ raise Error("%s doesn't end with .txt"%fn)
+ num = m.group(1)
+ fields = readProposal(fn)
+ checkProposal(fn, fields)
+ fields['num'] = num
+ res.append(fields)
+ return res
+
+def writeIndexFile(proposals):
+ proposals.sort(key=lambda f:f['num'])
+ seenStatuses = set()
+ for p in proposals:
+ seenStatuses.add(p['Status'])
+
+ out = open(TMPFILE, 'w')
+ inf = open(OUTFILE, 'r')
+ for line in inf:
+ out.write(line)
+ if line.startswith("====="): break
+ inf.close()
+
+ out.write("Proposals by number:\n\n")
+ for prop in proposals:
+ out.write("%(num)s %(Title)s [%(Status)s]\n"%prop)
+ out.write("\n\nProposals by status:\n\n")
+ for s in STATUSES:
+ if s not in seenStatuses: continue
+ out.write(" %s:\n"%s)
+ for prop in proposals:
+ if s == prop['Status']:
+ out.write(" %(num)s %(Title)s"%prop)
+ if prop.has_key('Target'):
+ out.write(" [for %(Target)s]"%prop)
+ if prop.has_key('Implemented-In'):
+ out.write(" [in %(Implemented-In)s]"%prop)
+ out.write("\n")
+ out.close()
+ os.rename(TMPFILE, OUTFILE)
+
+try:
+ os.unlink(TMPFILE)
+except OSError:
+ pass
+
+writeIndexFile(readProposals())
Property changes on: tor/trunk/doc/spec/proposals/reindex.py
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:eol-style
+ native
More information about the tor-commits
mailing list