[pve-devel] [PATCH 3/3] Fix #1527: Use iso-codes country naming
Thomas Lamprecht
t.lamprecht at proxmox.com
Thu Sep 13 10:31:21 CEST 2018
comments inline:
On 9/12/18 2:52 PM, Rhonda D'Vine wrote:
> The iso 3166-1 information in the iso-codes package seems to be more
> up to par than the one that was used from tzdata.
>
> Signed-off-by: Rhonda D'Vine <rhonda at proxmox.com>
> ---
> country.pl | 18 ++++++++++++------
> debian/control | 1 +
> 2 files changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/country.pl b/country.pl
> index 277fc34..b149b5b 100755
> --- a/country.pl
> +++ b/country.pl
> @@ -4,6 +4,7 @@ use strict;
> use warnings;
>
> use PVE::Tools;
> +use JSON;
>
> # see also: http://en.wikipedia.org/wiki/Keyboard_layout
> #
> @@ -14,14 +15,19 @@ use PVE::Tools;
>
> my $country = {};
>
> -my $line;
> -open (TMP, "</usr/share/zoneinfo/iso3166.tab");
> -while (defined ($line = <TMP>)) {
> - if ($line =~ m/^([A-Z][A-Z])\s+(.*\S)\s*$/) {
> - $country->{lc($1)} = $2;
> - }
> +open (TMP, "</usr/share/iso-codes/json/iso_3166-1.json");
you missed to change the comment (out of context, at start of script):
# country codes from: /usr/share/zoneinfo/iso3166.tab
> +my $json_data;
> +{
> + local $/;
> + $json_data = <TMP>;
> }
> close (TMP);
you also change how we read a file (with no mentioning of that in the
commit message). And we have helpers for reading/writing files in PVE::Tools,
known to be good handling various corner cases. As PVE::Tools is already included
I'd suggest doing something like:
my $raw = PVE::Tools::file_get_contents("/usr/share/zoneinfo/iso3166.tab", 128*1024);
if this needs change anyway.
> +$json_data = from_json($json_data);
variable use for different stuff, and json_data is a too generic name, one
has no idea what could be possible contained in this variable reading only
the name... Use something more telling like $iso_codes_raw for the raw file
and $iso_codes for the (JSON) parsed hash.
And maybe add a $country_codes = $iso_codes->{'3166-1'} variable, it's the only
thing in there and that would make code below a bit shorter/easier to read.
> +
> +foreach my $entry (@{$json_data->{'3166-1'}}) {
> + $country->{lc($entry->{'alpha_2'})} = defined $entry->{'common_name'} ?
> + $entry->{'common_name'} : $entry->{'name'};
> +}
could be also written as:
my $country = {
map { lc($_->{alpha_2}) => $_->{common_name} // $_->{name} } @{$json_data->{'3166-1'}};
};
but, while map is in general faster on such things, I have no problem with the foreach.
But something like the following in the loop body:
my $code = lc($entry->{'alpha_2'});
$country->{$code} = $entry->{common_name} // $entry->{name};
is much easier and quicker to read, IMO.
>
> # we need mappings for X11, console, and kvm vnc
>
> diff --git a/debian/control b/debian/control
> index 60bc8b0..7ab4515 100644
> --- a/debian/control
> +++ b/debian/control
> @@ -3,6 +3,7 @@ Section: perl
> Priority: optional
> Maintainer: Proxmox Support Team <support at proxmox.com>
> Build-Depends: debhelper (>= 9),
> + iso-codes,
> libpve-common-perl,
> librsvg2-bin,
> perl (>= 5.10.0-19),
>
More information about the pve-devel
mailing list