root/docs/Perl6/Spec/update

Revision 24065, 2.4 kB (checked in by lwall, 9 days ago)

[Spec] more twiddling

Line 
1#!/usr/bin/env perl
2
3exit;
4use strict;
5use warnings;
6
7use FindBin;
8use File::Path;
9
10refresh_specs();
11
12sub refresh_specs {
13    my $BaseURI = 'http://svn.perl.org/perl6/doc/trunk/design/syn';
14    my %Spec = qw(
15        01 Overview 02 Syntax       03 Operator     04 Block
16        05 Rule     06 Subroutine   09 Structure    10 Package
17        11 Module   12 Object       13 Overload
18    );
19    my $naming_rule = sub { "S$_[0].pod" };
20    my $logfile = "$FindBin::Bin/.spec-revision";
21    refresh_specs_from_source($BaseURI, \%Spec, $naming_rule, $logfile);
22
23    my $PugsBaseURI = 'http://svn.pugscode.org/pugs/docs/Perl6/Spec';
24    my %SpecInPugs = qw(
25        17 Concurrency 22 CPAN      26 Documentation  29 Functions
26    );
27    $naming_rule = sub { "$SpecInPugs{$_[0]}.pod" };
28    $logfile = "$FindBin::Bin/.pugs-spec-revision";
29    refresh_specs_from_source($PugsBaseURI, \%SpecInPugs, $naming_rule,
30                              $logfile);
31}
32
33sub refresh_specs_from_source {
34    my ($BaseURI, $Spec, $naming_rule, $logfile) = @_;
35    my %Spec = %$Spec;
36
37    # okay, we are at author side - refresh Synopses
38    if (!eval { require LWP; require LWP::Simple; 1 }) {
39        warn "LWP or LWP::Simple not installed: $@\n";
40        return;
41    }
42
43    our $ua;
44    LWP::Simple->import('$ua');
45
46    local $| = 1;
47    print "==> Refreshing specs from $BaseURI...\n";
48    $ua->timeout(10);
49
50    my $request = HTTP::Request->new(HEAD => $BaseURI);
51    my $response = $ua->request($request);
52
53    $response->is_success or return;
54
55    $ua->timeout(60);
56
57    my $etags = $response->header('ETag') or return;
58    ($etags =~ /(\d+)/) or return;
59
60    my $remote_revision = $1;
61    my $local_revision = -1;
62
63    if ( defined($logfile) and open(my $in, $logfile) ) {
64        chomp($local_revision = <$in>);
65        close $in;
66    }
67
68    if ($local_revision == $remote_revision) {
69        print "==> No changes at $BaseURI.\n";
70        return;
71    }
72
73    print "==> Synchronizing to revision $remote_revision of $BaseURI:\n";
74
75    for my $num (sort keys %Spec) {
76        my $file = $Spec{$num};
77        print "  $num --> Spec/$file\n";
78        my $remote_file = $naming_rule->($num);
79        LWP::Simple::mirror(
80            "$BaseURI/$remote_file" => "$FindBin::Bin/$file.pod"
81        );
82    }
83
84    if(defined($logfile)) {
85        open my $out, "> $logfile" or return;
86        print $out $remote_revision, "\n";
87        close $out;
88    }
89}
Note: See TracBrowser for help on using the browser.