summaryrefslogtreecommitdiff
path: root/scripts/rev-update
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/rev-update')
-rwxr-xr-xscripts/rev-update136
1 files changed, 136 insertions, 0 deletions
diff --git a/scripts/rev-update b/scripts/rev-update
new file mode 100755
index 000000000..8d1d16f8b
--- /dev/null
+++ b/scripts/rev-update
@@ -0,0 +1,136 @@
+#!/usr/bin/perl -w
+
+# This script converts and updates revision comments in translations.
+# It will automatically replace revision comments for 'original documents'
+# with revision comments for 'translated documents'.
+# When called with "-u" option, it will also update the revision for the
+# translated document to the revision number in the original document.
+# This script only supports SVN style revision marks.
+
+# Note: only use the "-u" option after you have made sure there are no
+# changes in content for the listed documents.
+
+# SYNOPSIS:
+# ./rev-update [-u] [-v] [lang]
+#
+# (uses $lang set below if lang is not given on commandline)
+
+use Getopt::Std;
+use File::Find;
+$opt_u = $opt_v = 0;
+getopts('uvV');
+# You may set this to your default language code
+$lang = shift || "pl";
+
+sub convert
+{
+ my ($plfname, $plrev) = (@_);
+ my $transtext = '';
+ open (FILE, "< $plfname");
+ while (<FILE>) {
+ if (/<!--\s*\$Id: \S+ (\d+) /) {
+ s/(<!--)(.*)(-->)/$1 original version: $plrev untranslated $3/;
+ }
+ $transtext .= $_;
+ }
+ close (FILE);
+ warn "Writing $plfname\n" if $opt_v;
+ open (FILE, "> $plfname");
+ print FILE $transtext;
+ close (FILE);
+}
+
+sub update
+{
+ my ($plfname, $plrev, $enrev) = (@_);
+ my $transtext = '';
+ open (FILE, "< $plfname");
+ while (<FILE>) {
+ if (/<!--\s*original version/) {
+ s/(<!--.*\s)($plrev)(\s.*-->)/$1$enrev$3/;
+ }
+ $transtext .= $_;
+ }
+ close (FILE);
+ warn "Writing $plfname\n" if $opt_v;
+ open (FILE, "> $plfname");
+ print FILE $transtext;
+ close (FILE);
+}
+
+sub getrev
+{
+ my ($plfname, $enfname) = (@_);
+ my ($plrev, $enrev) = (0, 0);
+ my ($notconverted, $untrans) = (0, 0);
+
+ warn "checking $plfname:\n" if $opt_v;
+ open FILE, $plfname or warn "$plfname: $!\n" and return;
+ while (<FILE>) {
+ if (/<!--\s*original version\D*(\d+)\s*-->/) {
+ $plrev = $1;
+ last;
+ }
+ if (/<!--\s*original version\D*(\d+)\s*untranslated\s*-->/) {
+ $plrev = $1;
+ $untrans = 1;
+ last;
+ }
+ # Also check for revision comments of original documents
+ if (/<!--\s*\$Id: \S+ (\d+) /) {
+ $plrev = $1;
+ $notconverted = 1;
+ $untrans = 1;
+ last;
+ }
+ }
+ warn "checking $enfname:\n" if $opt_v;
+ open FILE, $enfname or warn "$enfname: $!\n" and return;
+ while (<FILE>) {
+ if (/<!--\s*\$Id: \S+ (\d+) /) {
+ $enrev = $1;
+ last;
+ }
+ }
+ close FILE;
+ warn "failed to find revision for $plfname\n" unless $plrev;
+ warn "failed to find revision for $enfname\n" unless $enrev;
+ if ($notconverted) {
+ warn "$plfname: converting revision comment\n";
+ warn " document marked 'untranslated'\n";
+ convert($plfname, $plrev);
+ }
+ return ($plrev, $enrev, $untrans);
+}
+
+sub checkrev
+{
+ my ($plfname, $enfname) = (@_);
+ my ($plrev, $enrev, $untrans) = getrev($plfname, $enfname);
+ $plrev and $enrev or return;
+ if ( "$plrev" ne "$enrev" ) {
+ if ($untrans) {
+ print "$enfname : $plrev -> $enrev (untranslated)\n";
+ } else {
+ print "$enfname : $plrev -> $enrev\n";
+ }
+ if ($opt_u) {
+ update($plfname, $plrev, $enrev);
+ print "$plfname : revision updated\n";
+ }
+ }
+}
+
+sub process
+{
+ my $enfname = $File::Find::name;
+ return unless $enfname =~ m/\.xml$/;
+ my $plfname = $enfname;
+ $plfname =~ s,^en/,$lang/,;
+ checkrev($plfname, $enfname);
+}
+File::Find::find({ wanted => \&process, no_chdir => 1 }, 'en');
+#checkrev("build/install.$lang.xml", "build/install.en.xml");
+#checkdiff("release-notes.$lang.sgml","release-notes.sgml");
+#checkdiff("index.$lang.html.m4","index.en.html.m4");
+#checkdiff("dselect-beginner.$lang.sgml","dselect-beginner.sgml");