misc/127430: [patch] Add check-script for share/misc/iso3166

Edwin Groothuis edwin at mavetju.org
Wed Sep 17 03:20:02 UTC 2008


>Number:         127430
>Category:       misc
>Synopsis:       [patch] Add check-script for share/misc/iso3166
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Sep 17 03:20:01 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Edwin Groothuis
>Release:        FreeBSD 7.0-RELEASE-p1 i386
>Organization:
-
>Environment:
System: FreeBSD k7.mavetju 7.0-RELEASE-p1 FreeBSD 7.0-RELEASE-p1 #2: Wed May 28 08:12:56 EST 2008 edwin at k7.mavetju:/usr/src/sys/i386/compile/k7 i386


>Description:

Small perl script for in head/tools/tools/iso.

>How-To-Repeat:
>Fix:


[~/iso] edwin at k7>cat check-iso3166.pl
#!/usr/bin/perl -w

#
# $FreeBSD$
#
# This script compares the file iso3166 (from head/share/misc) with the files
# list-en1-semic-2.txt (from
# http://www.iso.org/iso/list-en1-semic-2.txt) and iso3166-countrycodes.txt
# (from ftp://ftp.ripe.net/) to see if there any differences.
#
# Created by Edwin Groothuis <edwin at FreeBSD.org> for the FreeBSD project.
#

use strict;
use Data::Dumper;

my %old = ();
{
	open(FIN, "iso3166") or die "Cannot open iso3166 (should be in head/share/misc)";
	my @lines = <FIN>;
	close(FIN);
	chomp(@lines);

	foreach my $l (@lines) {
		next if ($l =~ /^#/);
		next if ($l eq "");

		die "Bad line: $l\n"
			if ($l !~ /^([A-Z\-]*)[ \t]+([A-Z\-]+)[ \t]+(\d+)[ \t]+(.*)/);
		my $two = $1;
		my $three = $2;
		my $number = $3;
		my $name = $4;

		$old{$two}{two} = $two;
		$old{$two}{three} = $three;
		$old{$two}{number} = $number;
		$old{$two}{name} = $name;
	}
}

my %new1 = ();
{
	open(FIN, "iso3166-countrycodes.txt") or die "Cannot open iso3166-countrycodes.txt, which can be retrieved from ftp://ftp.ripe.net/";
	my @lines = <FIN>;
	close(FIN);
	chomp(@lines);

	my $noticed = 0;
	foreach my $l (@lines) {
		if ($l =~ /\-\-\-\-\-\-\-/) {
			$noticed = 1;
			next;
		}
		next if (!$noticed);
		next if ($l eq "");

		die "Invalid line: $l\n"
			if ($l !~ /^(.+?)[\t ][\t ]+([A-Z]{2})[\t ]+([A-Z]{3})[\t ]+(\d+)[\t ]*$/);
		my $two = $2;
		my $three = $3;
		my $number = $4;
		my $name = $1;

		$new1{$two}{two} = $two;
		$new1{$two}{three} = $three;
		$new1{$two}{number} = $number;
		$new1{$two}{name} = $name;
	}
}

my %new2 = ();
{
	open(FIN, "list-en1-semic-2.txt") or die "Cannot open list-en1-semic-2.txt, which can be retrieved from http://www.iso.org/iso/list-en1-semic-2.txt";
	my @lines = <FIN>;
	close(FIN);
	chomp(@lines);

	my $noticed = 0;
	foreach my $l (@lines) {
		$l =~ s/\x0d//g;
		if (!$noticed) {	# skip the first line
			$noticed = 1;
			next;
		}
		next if ($l eq "");

		my @a = split(/;/, $l);
		die "Invalid line: $l\n" if ($#a != 1);
		my $two = $a[1];
		my $name = $a[0];

		$new2{$two}{two} = $two;
		$new2{$two}{name} = $name;
	}
}

{
	my $c = 0;
	foreach my $two (sort(keys(%old))) {
		if (!defined $new1{$two}) {
			print "In old but not new1: $old{$two}{two}\t$old{$two}{three}\t$old{$two}{number}\t$old{$two}{name}\n";
			$c++;
		}
		if (!defined $new2{$two}) {
			print "In old but not new2: $old{$two}{two}\t$old{$two}{name}\n";
			$c++;
		}
	}
	print "Found $c issues\n";
}

{
	my $c = 0;
	foreach my $two (sort(keys(%new1))) {
		next if (defined $old{$two});
		print "In new1 but not old: $new1{$two}{two}\t$new1{$two}{three}\t$new1{$two}{number}\t$new1{$two}{name}\n";
		$c++;
	}
	print "Found $c issues\n";
}

{
	my $c = 0;
	foreach my $two (sort(keys(%new2))) {
		next if (defined $old{$two});
		print "In new2 but not old: $new2{$two}{two}\t$new2{$two}{name}\n";
		$c++;
	}
	print "Found $c issues\n";
}

{
	my $c = 0;
	foreach my $two (sort(keys(%old))) {
		if (defined $new1{$two}) {
			if ($old{$two}{two} ne $new1{$two}{two} ||
			    $old{$two}{three} ne $new1{$two}{three} ||
			    $old{$two}{number} ne $new1{$two}{number} ||
			    lc($old{$two}{name}) ne lc($new1{$two}{name})) {
				print "In old : $old{$two}{two}\t$old{$two}{three}\t$old{$two}{number}\t$old{$two}{name}\n";
				print "In new1: $new1{$two}{two}\t$new1{$two}{three}\t$new1{$two}{number}\t$new1{$two}{name}\n";
				$c++;
			}
		}
	}
	print "Found $c issues\n";
}

{
	my $c = 0;
	foreach my $two (sort(keys(%old))) {
		if (defined $new2{$two}) {
			if ($old{$two}{two} ne $new2{$two}{two} ||
			    lc($old{$two}{name}) ne lc($new2{$two}{name})) {
				print "In old : $old{$two}{two}\t$old{$two}{name}\n";
				print "In new2: $new2{$two}{two}\t$new2{$two}{name}\n";
				$c++;
			}
		}
	}
	print "Found $c issues\n";
}

>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list