|
Packit |
95306a |
#!/usr/bin/perl
|
|
Packit |
95306a |
# Copyright (c) 2008-2017 Sullivan Beck. All rights reserved.
|
|
Packit |
95306a |
# This program is free software; you can redistribute it and/or modify it
|
|
Packit |
95306a |
# under the same terms as Perl itself.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
###############################################################################
|
|
Packit |
95306a |
###############################################################################
|
|
Packit |
95306a |
# This script will check windows timezone information.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $new = 'windows.new';
|
|
Packit |
95306a |
require "data.alias.pl";
|
|
Packit |
95306a |
|
|
Packit |
95306a |
############################################################################
|
|
Packit |
95306a |
# MAIN PROGRAM
|
|
Packit |
95306a |
############################################################################
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my %old = %windows_zones;
|
|
Packit |
95306a |
my %new = _parse($new);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# Find deprecated zones
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my @old;
|
|
Packit |
95306a |
foreach my $key (keys %old) {
|
|
Packit |
95306a |
next if (exists $new{$key});
|
|
Packit |
95306a |
push(@old,$key);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (@old) {
|
|
Packit |
95306a |
print "The following zones need to be removed:\n";
|
|
Packit |
95306a |
foreach my $key (sort @old) {
|
|
Packit |
95306a |
print " $key\n";
|
|
Packit |
95306a |
delete $old{$key};
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
print "\n";
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# Find new zones
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my @new;
|
|
Packit |
95306a |
foreach my $key (keys %new) {
|
|
Packit |
95306a |
next if (exists $old{$key});
|
|
Packit |
95306a |
push(@new,$key);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (@new) {
|
|
Packit |
95306a |
print "The following zones need to be added (check that the zones are in tzdata):\n";
|
|
Packit |
95306a |
foreach my $key (sort @new) {
|
|
Packit |
95306a |
my $val = $new{$key};
|
|
Packit |
95306a |
print " \"$key\"" . " "x(32-length($key)) . "=> \"$val\",\n";
|
|
Packit |
95306a |
delete $new{$key};
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
print "\n";
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# Find changed zones
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my @chg;
|
|
Packit |
95306a |
foreach my $key (keys %old) {
|
|
Packit |
95306a |
next if ($old{$key} eq $new{$key});
|
|
Packit |
95306a |
push(@chg,$key);
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
if (@chg) {
|
|
Packit |
95306a |
print "The following zones need to be changed (verify in tzdata first):\n";
|
|
Packit |
95306a |
foreach my $key (sort @chg) {
|
|
Packit |
95306a |
my $val = $new{$key};
|
|
Packit |
95306a |
print " \"$key\"" . " "x(32-length($key)) . "=> \"$val\",\n";
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
print "\n";
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
############################################################################
|
|
Packit |
95306a |
############################################################################
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# It's a file of TAB separated lines:
|
|
Packit |
95306a |
#
|
|
Packit |
95306a |
# ALIAS \t TAG \t ZONE_LIST
|
|
Packit |
95306a |
#
|
|
Packit |
95306a |
# where ALIAS is the windows time zone name and ZONE_LIST is a space
|
|
Packit |
95306a |
# separated list of timezones.
|
|
Packit |
95306a |
#
|
|
Packit |
95306a |
# ALIAS may appear on multiple lines... use the first, and ZONE_LIST
|
|
Packit |
95306a |
# may have multiple zones... use the first.
|
|
Packit |
95306a |
#
|
|
Packit |
95306a |
sub _parse {
|
|
Packit |
95306a |
my($file) = @_;
|
|
Packit |
95306a |
my %ret;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my @lines = `cat $file`;
|
|
Packit |
95306a |
chomp(@lines);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my $n = 0;
|
|
Packit |
95306a |
foreach my $line (@lines) {
|
|
Packit |
95306a |
$n++;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my @f = split(/\t/,$line);
|
|
Packit |
95306a |
if (@f != 3) {
|
|
Packit |
95306a |
warn "ERROR: invalid line: $file[$n]\n" .
|
|
Packit |
95306a |
" $line\n";
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my($alias,$tmp,$zones) = @f;
|
|
Packit |
95306a |
next if (exists $ret{$alias});
|
|
Packit |
95306a |
|
|
Packit |
95306a |
my @tmp = split(/\s+/,$zones);
|
|
Packit |
95306a |
my $zone = $tmp[0];
|
|
Packit |
95306a |
|
|
Packit |
95306a |
$ret{$alias} = $zone;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
return %ret;
|
|
Packit |
95306a |
}
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# For CLDR 2.0
|
|
Packit |
95306a |
# sub _parse {
|
|
Packit |
95306a |
# my($file) = @_;
|
|
Packit |
95306a |
# my %ret;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# my @lines = `cat $file`;
|
|
Packit |
95306a |
# chomp(@lines);
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# my $n = 0;
|
|
Packit |
95306a |
# foreach my $line (@lines) {
|
|
Packit |
95306a |
# $n++;
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# if ($line =~ /^\s*(.*?)\s+any\s+(.*?)\s*$/) {
|
|
Packit |
95306a |
# $ret{$1} = $2;
|
|
Packit |
95306a |
# } else {
|
|
Packit |
95306a |
# warn "ERROR: invalid line: $file[$n]\n" .
|
|
Packit |
95306a |
# " $line\n";
|
|
Packit |
95306a |
# }
|
|
Packit |
95306a |
# }
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# return %ret;
|
|
Packit |
95306a |
# }
|
|
Packit |
95306a |
|
|
Packit |
95306a |
# Local Variables:
|
|
Packit |
95306a |
# mode: cperl
|
|
Packit |
95306a |
# indent-tabs-mode: nil
|
|
Packit |
95306a |
# cperl-indent-level: 3
|
|
Packit |
95306a |
# cperl-continued-statement-offset: 2
|
|
Packit |
95306a |
# cperl-continued-brace-offset: 0
|
|
Packit |
95306a |
# cperl-brace-offset: 0
|
|
Packit |
95306a |
# cperl-brace-imaginary-offset: 0
|
|
Packit |
95306a |
# cperl-label-offset: 0
|
|
Packit |
95306a |
# End:
|