summaryrefslogtreecommitdiff
path: root/scripts/rev-update
blob: 3c3a2dd73a09cfdc8afa485251174b1d6d87dd1d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#!/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'.
# This script only supports SVN style revision marks.
#

use Getopt::Std;
use File::Find;
$opt_h = $opt_u = $opt_v = 0;
getopts('huv');
# You may set this to your default language code
$lang = shift || "pl";

sub usage
{
	printf <<HERE, $lang;
Usage: $0 [options] [<language>]

  -h        print this help message.
  -u        update the revision for the translated document to the revision
	    number in the original document (use only after having made sure
	    there are no changes in content for the listed documents).
  -v        be verbose.

  Current <language> is '%s'.
HERE
	exit 0;
}

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);
}

usage() if $opt_h;

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");