Blame internal/windows.compare

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: