/[webwml]/webwml/touch_translations.pl
ViewVC logotype

Contents of /webwml/touch_translations.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.9 - (hide annotations) (download)
Mon Sep 3 23:48:35 2001 UTC (11 years, 8 months ago) by barbier
Branch: MAIN
CVS Tags: HEAD
Changes since 1.8: +22 -63 lines
File MIME type: text/plain
Update these scripts to use modules found under Perl/
1 polish 1.1 #!/usr/bin/perl -w
2    
3     # This script is used during build of English documents to check if
4     # translations are up-to date.
5    
6     # This script takes full path to a original .wml file, and the language of
7     # the original.
8     # For every language defined in @langs, the script:
9     # - checks if a translated file exists for such language
10     # - checks if the translated file is at least N revisions old
11     # (N is any number defined in @stages)
12     # - if it is, and it hasn't been touched because of this particular
13     # "N", it is touched and a marker file is created
14     # This allows the file to be rebuilt _exactly_ the number of times it should
15     # (i.e. $#stages times)
16    
17     # (C) 2000 by Marcin Owsiany <porridge@pandora.info.bielsko.pl>
18    
19     # TODOs:
20     # - compare both major and minor revision number
21     # - think of a better way to check when the file has been rebuilt last
22    
23 barbier 1.9 # These modules reside under webwml/Perl
24     use lib ($0 =~ m|(.*)/|, $1 or ".") ."/Perl";
25     use Local::Cvsinfo;
26     use Webwml::Langs;
27     use Webwml::TransCheck;
28 polish 1.1
29     # Set this to 1 for debugging
30 polish 1.3 $debug = 0;
31 polish 1.1
32     sub rebuild {
33     my $file = shift;
34     $now = time;
35 polish 1.3 print "touching $file\n" if $debug;
36 polish 1.1 utime $now, $now, $file or die "$file: $!";
37     }
38    
39     sub mark_forced {
40     my $file = shift;
41     my $val = shift;
42     my $foo = "$file".".forced";
43     open LOG, ">$foo" or die "$foo: $!";
44     print LOG "$val";
45     close LOG;
46     print "Created $file.forced with $val inside\n" if $debug;
47     }
48    
49     sub was_forced {
50     my $file = shift;
51     if (open LOG, "<$file.forced") {
52     close LOG;
53     print "$file.forced exists\n" if $debug;
54     return 1;
55     } else {
56     print "$file.forced does not exists\n" if $debug;
57     return 0;
58     }
59     }
60    
61     sub when_forced {
62     my $file = shift;
63     if (open LOG, "<$file.forced") {
64     $_ = <LOG>;
65     chomp($_);
66     print "$file.forced contains $_"."\n" if $debug;
67     close LOG;
68     return $_;
69     } else {
70     print "$file.forced : $!\n" if $debug;
71     return 0;
72     }
73     }
74    
75 barbier 1.9 # We call constructor without argument. It means there must be a
76     # CVS/Repository file or program will abort.
77     my $l = Webwml::Langs->new();
78     my %langs = $l->iso_name();
79     my @langs = $l->names();
80    
81 polish 1.1 $argfile = $ARGV[0] or die "Invalid number of arguments";
82 polish 1.2 die "Invalid number of arguments" unless $ARGV[1];
83 joey 1.4 $arglang = $langs{$ARGV[1]} or die "Invalid lang argument: $ARGV[1]";
84 barbier 1.9 $argfile =~ m+(.*)/(.*\.wml)+ or die "pattern does not match";
85 polish 1.1 my ($path, $file) = ($1, $2);
86    
87 barbier 1.9 my $cvs = Local::Cvsinfo->new();
88     $cvs->options(matchfile => [ $file ]);
89     $cvs->readinfo($path);
90     my $origrev = $cvs->revision($argfile) || "1.0";
91 polish 1.1
92     foreach $lang (@langs) {
93     next if ($lang eq $arglang);
94     my $transfile = $argfile;
95     my ($maxdelta, $mindelta) = (5, 2);
96     my ($original, $langrev);
97 polish 1.3 print "Now checking $lang\n" if $debug;
98 polish 1.1 $transfile =~ s+$arglang+$lang+ or die "wrong argument: pattern does not match file: $transfile";
99    
100     # Parse the translated file
101 barbier 1.9 my $transcheck = Webwml::TransCheck->new($transfile);
102     next unless $transcheck->revision();
103     $langrev = $transcheck->revision();
104     $original = $transcheck->original();
105     $maxdelta = $transcheck->maxdelta() if $transcheck->maxdelta();
106     $mindelta = $transcheck->mindelta() if $transcheck->mindelta();
107 polish 1.1 # TODO - would cause unspecified results if 1. changed to 2.
108     $origrev =~ s/1\.//;
109     $langrev =~ s/1\.//;
110    
111     next unless not defined $original or $original eq $arglang;
112    
113     # Compare the revisions
114     print "Orig: $origrev, lang: $langrev\n" if $debug;
115     $difference = $origrev-$langrev;
116     if ($difference < $mindelta) {
117     next unless was_forced($transfile);
118     print "unlinking $transfile.forced\n" if $debug;
119     unlink "$transfile.forced";
120     next;
121     }
122     my $forced_at = when_forced($transfile);
123     if ($difference < $maxdelta) {
124     if ($forced_at != $mindelta) {
125     print "difference matches $mindelta, but wasn't rebuilt at $mindelta\n" if $debug;
126     rebuild($transfile);
127     mark_forced($transfile, $mindelta);
128     last;
129     }
130     } elsif ($forced_at != $maxdelta) {
131     print "difference matches $maxdelta, but wasn't rebuilt at $maxdelta\n" if $debug;
132     rebuild($transfile);
133     mark_forced($transfile, $maxdelta);
134     last;
135     }
136     }

  ViewVC Help
Powered by ViewVC 1.1.5