From ed64153cb6d4b37b71ccc90c0d831943323ddeed Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 23 May 2012 05:01:58 +0000 Subject: tlmgr and tlmgrgui updates: - (gui) make a few more strings translateable - (gui) allow selection English as GUI language - (gui) show GUI language selection also on Windows (in expert mode) - (text) proper return codes with error msgs from init_tlmedia - (gui) show warning window when loading of remote tlpdb does not work git-svn-id: svn://tug.org/texlive/trunk@26587 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf/scripts/texlive/tlmgr.pl | 82 +++++++++++++++++++------------- Master/texmf/scripts/texlive/tlmgrgui.pl | 31 ++++++++---- 2 files changed, 71 insertions(+), 42 deletions(-) (limited to 'Master') diff --git a/Master/texmf/scripts/texlive/tlmgr.pl b/Master/texmf/scripts/texlive/tlmgr.pl index cd78e6c1425..181ff6702c4 100755 --- a/Master/texmf/scripts/texlive/tlmgr.pl +++ b/Master/texmf/scripts/texlive/tlmgr.pl @@ -1113,7 +1113,7 @@ sub action_dumptlpdb { $localtlpdb->writeout; } elsif ($opts{"remote"} && !$opts{"local"}) { - init_tlmedia(); + init_tlmedia_or_die(); $remotetlpdb->writeout; } else { @@ -1156,7 +1156,7 @@ sub action_info { my $installed = 0; if (!$tlp) { if (!$remotetlpdb) { - init_tlmedia(); + init_tlmedia_or_die(); } if (defined($tag)) { if (!$remotetlpdb->is_virtual) { @@ -1225,7 +1225,7 @@ sub action_info { if (!@colls) { # not referenced in the local tlpdb, so try the remote here, too if (!$remotetlpdb) { - init_tlmedia(); + init_tlmedia_or_die(); } @colls = $remotetlpdb->needed_by($pkg); } @@ -1415,7 +1415,7 @@ sub action_search { } init_local_db(); if ($opts{"global"}) { - init_tlmedia(); + init_tlmedia_or_die(); $tlpdb = $remotetlpdb; } else { $tlpdb = $localtlpdb; @@ -2259,7 +2259,7 @@ sub action_update { return; } - init_tlmedia(); + init_tlmedia_or_die(); info("update: dry run, no changes will be made\n") if $opts{"dry-run"}; my @excluded_pkgs = (); @@ -3221,7 +3221,7 @@ sub action_install { return if !check_on_writable(); # initialize the TLPDB from $location $opts{"no-depends"} = 1 if $opts{"no-depends-at-all"}; - init_tlmedia(); + init_tlmedia_or_die(); # check for updates to tlmgr itself, and die unless --force is given if (check_for_critical_updates( $localtlpdb, $remotetlpdb)) { @@ -3386,7 +3386,7 @@ sub show_list_of_packages { if ($opts{"only-installed"}) { $tlm = $localtlpdb; } else { - init_tlmedia(); + init_tlmedia_or_die(); $tlm = $remotetlpdb; } my @whattolist; @@ -3594,7 +3594,7 @@ sub action_candidates { return; } init_local_db(); - init_tlmedia(); + init_tlmedia_or_die(); my @cand = $remotetlpdb->candidates($what); if (@cand) { my $first = shift @cand; @@ -3805,7 +3805,7 @@ sub action_platform { if ($what =~ m/^list$/i) { # list the available platforms # initialize the TLPDB from $location - init_tlmedia(); + init_tlmedia_or_die(); my @already_installed_arch = $localtlpdb->available_architectures; print "Available platforms:\n"; foreach my $a ($remotetlpdb->available_architectures) { @@ -3820,7 +3820,7 @@ sub action_platform { finish(0); } elsif ($what =~ m/^add$/i) { return if !check_on_writable(); - init_tlmedia(); + init_tlmedia_or_die(); my @already_installed_arch = $localtlpdb->available_architectures; my @available_arch = $remotetlpdb->available_architectures; my @todoarchs; @@ -4977,6 +4977,13 @@ sub init_local_db { # initialize the global $remotetlpdb object, or die. # uses the global $location. # +sub init_tlmedia_or_die { + my ($ret, $err) = init_tlmedia(); + if (!$ret) { + tldie("$prg: $err"); + } +} + sub init_tlmedia { # first check if $location contains multiple locations @@ -4995,14 +5002,13 @@ sub init_tlmedia # check if we are only one tag/repo if ($#tags == 0) { # go to normal mode - _init_tlmedia(); - return; + return _init_tlmedia(); } # we are still here, so we have more tags # check that there is a main repository if (!TeXLive::TLUtils::member('main', @tags)) { - tldie("$prg: Cannot find main repository, you have to tag one as main!\n"); + return(0, "Cannot find main repository, you have to tag one as main!"); } # TODO TODO @@ -5012,11 +5018,17 @@ sub init_tlmedia $remotetlpdb->make_virtual; my $locstr = $repos{'main'}; - my $tlmdb = setup_one_remotetlpdb($locstr); + my ($tlmdb, $errormsg) = setup_one_remotetlpdb($locstr); + if (!defined($tlmdb)) { + return (0, $errormsg); + } $remotetlpdb->virtual_add_tlpdb($tlmdb, "main"); for my $t (@tags) { if ($t ne 'main') { - my $tlmdb = setup_one_remotetlpdb($repos{$t}); + my ($tlmdb, $errormsg) = setup_one_remotetlpdb($repos{$t}); + if (!defined($tlmdb)) { + return(0, $errormsg); + } $remotetlpdb->virtual_add_tlpdb($tlmdb, $t); $locstr .= " $repos{$t}"; } @@ -5052,6 +5064,7 @@ sub init_tlmedia info("\t$t = " . $repos{$t} . "\n"); } } + return 1; } @@ -5067,7 +5080,7 @@ sub _init_tlmedia if (defined($remotetlpdb) && !$remotetlpdb->is_virtual && ($remotetlpdb->root eq $location)) { # nothing to be done - return; + return 1; } # choose a mirror if we are asked. @@ -5078,11 +5091,18 @@ sub _init_tlmedia $location =~ s,^$TeXLiveServerURL,$mirrorbase,; } - $remotetlpdb = setup_one_remotetlpdb($location); + my $errormsg; + ($remotetlpdb, $errormsg) = setup_one_remotetlpdb($location); + if (!defined($remotetlpdb)) { + return(0, $errormsg); + } + + # this "location-url" line should not be changed since GUI programs # depend on it: print "location-url\t$location\n" if $::machinereadable; info("tlmgr: package repository $location\n"); + return 1; } sub setup_one_remotetlpdb @@ -5157,7 +5177,9 @@ END_NO_INTERNET if (!$local_copy_tlpdb_used) { $remotetlpdb = TeXLive::TLPDB->new(root => $location); } - die($loadmediasrcerror . $location) unless defined($remotetlpdb); + if (!defined($remotetlpdb)) { + return(undef, $loadmediasrcerror . $location); + } # we allow a range of years to be specified by the remote tlpdb # for which it might work. # the lower limit is TLPDB->config_minrelease @@ -5173,15 +5195,15 @@ END_NO_INTERNET my $texlive_release = $remotetlpdb->config_release; my $texlive_minrelease = $remotetlpdb->config_minrelease; if (!defined($texlive_release)) { - tldie("$prg: The installation repository does not specify a " - . "release year for which it was prepared, goodbye.\n"); + return(undef, "The installation repository does not specify a " + . "release year for which it was prepared, goodbye."); } # still here, so we have $texlive_release defined my $texlive_release_year = $texlive_release; $texlive_release_year =~ s/^(....).*$/$1/; if ($texlive_release_year !~ m/^[1-9][0-9][0-9][0-9]$/) { - tldie("$prg: The installation repository does not specify a " - . "valid release year, goodbye: $texlive_release\n"); + return(undef, "The installation repository does not specify a " + . "valid release year, goodbye: $texlive_release"); } # so $texlive_release_year is numeric, good if (defined($texlive_minrelease)) { @@ -5189,29 +5211,25 @@ END_NO_INTERNET my $texlive_minrelease_year = $texlive_minrelease; $texlive_minrelease_year =~ s/^(....).*$/$1/; if ($texlive_minrelease_year !~ m/^[1-9][0-9][0-9][0-9]$/) { - tldie("The installation repository does not specify a " - . "valid minimal release year, goodbye: $texlive_minrelease\n"); + return(undef, "The installation repository does not specify a " + . "valid minimal release year, goodbye: $texlive_minrelease"); } # ok, all numeric and fine, check for range if ($TeXLive::TLConfig::ReleaseYear < $texlive_minrelease_year || $TeXLive::TLConfig::ReleaseYear > $texlive_release_year) { - tldie <add('command', -label => __("Platforms ..."), -command => sub { do_arch_settings(); }); - $menu_options->add('command', -label => __("GUI Language ..."), - -command => sub { do_gui_language_setting(); }); + } + if ($mode_expert) { + $menu_options->add('command', -label => __("GUI Language ..."), + -command => sub { do_gui_language_setting(); }); } $menu_options->add('separator'); $menu_options->add('checkbutton', -label => __("Expert options"), @@ -1372,12 +1373,14 @@ sub do_gui_language_setting { my %code_lang = ( cs => "Czech", de => "German", + en => "English", es => "Spanish", fr => "French", it => "Italian", ja => "Japanese", nl => "Dutch", pl => "Polish", + "pt_br" => "Brasilian", ru => "Russian", sk => "Slovak", sl => "Slovenian", @@ -1401,9 +1404,11 @@ sub do_gui_language_setting { $p =~ s!\.po$!!; push @ll, $p; } + # add English as possible language! + push @ll, "en"; foreach my $l (sort @ll) { my $el = (defined($code_lang{$l}) ? $code_lang{$l} : $l); - $opt->insert("end",$el); + $opt->insert("end", $el); } $opt->pack(-padx => "2m", -pady => "2m"); $sw->Label(-text => __("Changes will take effect after restart"))->pack(-padx => "2m", -pady => "2m"); @@ -1577,8 +1582,13 @@ sub menu_multi_location { $ref->{'chg_w'} = $f1->Button(-text => __("Change"), -command => sub { our $sw; - my $ret = ask_one_repository($sw, __("Change " . ($t eq "main" ? "main" : "subsidiary") . " package repository"), - __(($t eq "main" ? "Change main" : "New subsidiary") . " package repository")); + my $ret = ask_one_repository($sw, + ($t eq "main" ? + __("Change main package repository") : + __("Change subsidiary package repository")), + ($t eq "main" ? + __("Change main package repository") : + __("Change subsidiary package repository"))); $ref->{'val'} = $ret if (defined($ret)); }); } @@ -1852,13 +1862,14 @@ sub init_install_media { # nothing to be done } else { $mw->Busy(-recurse => 1); - init_tlmedia(); + my ($ret, $err) = init_tlmedia(); $mw->Unbusy; - if (!defined($remotetlpdb)) { + if (!$ret) { # something went badly wrong, maybe the newroot is wrong? $mw->Dialog(-title => __("Warning"), - -text => __("Could not load the TeX Live Database from %s\nIf you want to install or update packages, please try with a different package repository!\n\nFor configuration and removal you don\'t have to do anything.", $newroot), - -buttons => [ __("Ok") ])->Show; + -text => __("Loading of remote database failed.") . "\n" . + __("Error message:") . "\n$err\n\n", + -buttons => [ __("Ok") ])->Show; $remotetlpdb = undef; update_list_remote(); update_grid(); -- cgit v1.2.3