summaryrefslogtreecommitdiff
path: root/scripts/rev-update
blob: 8d1d16f8b8a894960b5061c3b81a0b08cb26ed1c (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
#!/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");