diff options
-rw-r--r-- | Build/source/texk/tests/TeXLive/TLConfig.pm | 18 | ||||
-rw-r--r-- | Build/source/texk/tests/TeXLive/TLUtils.pm | 97 | ||||
-rw-r--r-- | Master/texmf-dist/scripts/texlive/NEWS | 3 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tl-update-tlpdb | 4 |
4 files changed, 81 insertions, 41 deletions
diff --git a/Build/source/texk/tests/TeXLive/TLConfig.pm b/Build/source/texk/tests/TeXLive/TLConfig.pm index 86552e6004f..ae5806c3727 100644 --- a/Build/source/texk/tests/TeXLive/TLConfig.pm +++ b/Build/source/texk/tests/TeXLive/TLConfig.pm @@ -1,11 +1,11 @@ # TeXLive::TLConfig.pm - module exporting configuration values -# Copyright 2007-2019 Norbert Preining +# Copyright 2007-2020 Norbert Preining # This file is licensed under the GNU General Public License version 2 # or any later version. package TeXLive::TLConfig; -my $svnrev = '$Revision: 53076 $'; +my $svnrev = '$Revision: 54123 $'; my $_modulerevision = ($svnrev =~ m/: ([0-9]+) /) ? $1 : "unknown"; sub module_revision { return $_modulerevision; } @@ -45,6 +45,8 @@ BEGIN { %TLPDBSettings %TLPDBConfigs $NetworkTimeout + $MaxLWPErrors + $MaxLWPReinitCount $PartialEngineSupport $F_OK $F_WARNING $F_ERROR $F_NOPOSTACTION $ChecksumLength @@ -56,11 +58,11 @@ BEGIN { # the year of our release, will be used in the location of the # network packages, and in menu names, and other places. -$ReleaseYear = 2019; +$ReleaseYear = 2020; # users can upgrade from this year to the current year; might be the # same as the release year, or any number of releases earlier. -# Generally not tested. +# Generally not tested, but should be. $MinRelease = 2016; # Meta Categories do not ship files, but only call for other packages. @@ -92,6 +94,10 @@ our $BlockSize = 4096; # timeout for network connections (wget, LWP) in seconds our $NetworkTimeout = 30; +# number of errors during an LWP session until it is marked as disabled +our $MaxLWPErrors = 5; +# max number of times we reenable LWP after it was disabled +our $MaxLWPReinitCount = 10; our $Archive = "archive"; our $TeXLiveServerURL = "http://mirror.ctan.org"; @@ -189,7 +195,7 @@ our %TLPDBOptions = ( "Directory for backups" ], "create_formats" => [ "b", 1, "formats", - "Create formats on installation" ], + "Generate formats at installation or update" ], "desktop_integration" => [ "b", 1, "desktop_integration", "Create Start menu shortcuts (w32)" ], @@ -235,7 +241,7 @@ our %TLPDBSettings = ( our $WindowsMainMenuName = "TeX Live $ReleaseYear"; # Comma-separated list of engines which do not exist on all platforms. -our $PartialEngineSupport = "luahbtex,luajittex,mfluajit"; +our $PartialEngineSupport = "luajithbtex,luajittex,mfluajit"; # Flags for error handling across the scripts and modules # all fine diff --git a/Build/source/texk/tests/TeXLive/TLUtils.pm b/Build/source/texk/tests/TeXLive/TLUtils.pm index 61ed174cc07..086f5daad57 100644 --- a/Build/source/texk/tests/TeXLive/TLUtils.pm +++ b/Build/source/texk/tests/TeXLive/TLUtils.pm @@ -5,7 +5,7 @@ package TeXLive::TLUtils; -my $svnrev = '$Revision: 53343 $'; +my $svnrev = '$Revision: 54143 $'; my $_modulerevision = ($svnrev =~ m/: ([0-9]+) /) ? $1 : "unknown"; sub module_revision { return $_modulerevision; } @@ -273,16 +273,16 @@ sub platform { =item C<platform_name($canonical_host)> -Convert a canonical host names as returned by C<config.guess> into -TeX Live platform names. +Convert ORIG_PLATFORM, a canonical host name as returned by +C<config.guess>, into a TeX Live platform name. CPU type is determined by a regexp, and any C</^i.86/> name is replaced by C<i386>. -For OS we need a list because what's returned is not likely to match our -historical names, e.g., C<config.guess> returns C<linux-gnu> but we need -C<linux>. This list might/should contain OSs which are not currently -supported. +For the OS value we need a list because what's returned is not likely to +match our historical names, e.g., C<config.guess> returns C<linux-gnu> +but we need C<linux>. This list contains old OSs which are not currently +supported, just in case. If a particular platform is not found in this list we use the regexp C</.*-(.*$)/> as a last resort and hope it provides something useful. @@ -290,12 +290,15 @@ C</.*-(.*$)/> as a last resort and hope it provides something useful. =cut sub platform_name { - my ($guessed_platform) = @_; + my ($orig_platform) = @_; + my $guessed_platform = $orig_platform; + # try to parse out some bsd variants that use amd64. $guessed_platform =~ s/^x86_64-(.*-k?)(free|net)bsd/amd64-$1$2bsd/; my $CPU; # CPU type as reported by config.guess. my $OS; # O/S type as reported by config.guess. ($CPU = $guessed_platform) =~ s/(.*?)-.*/$1/; + $CPU =~ s/^alpha(.*)/alpha/; # alphaev whatever $CPU =~ s/mips64el/mipsel/; # don't distinguish mips64 and 32 el $CPU =~ s/powerpc64/powerpc/; # don't distinguish ppc64 @@ -307,7 +310,7 @@ sub platform_name { $CPU = $guessed_platform =~ /hf$/ ? "armhf" : "armel"; } - my @OSs = qw(aix cygwin darwin freebsd hpux irix + my @OSs = qw(aix cygwin darwin dragonfly freebsd hpux irix kfreebsd linux netbsd openbsd solaris); for my $os (@OSs) { # Match word boundary at the beginning of the os name so that @@ -316,7 +319,12 @@ sub platform_name { # solaris2 is matched. $OS = $os if $guessed_platform =~ /\b$os/; } - + + if (! $OS) { + warn "$0: could not guess OS from config.guess string: $orig_platform"; + $OS = "unknownOS"; + } + if ($OS eq "linux") { # deal with the special case of musl based distributions # config.guess returns @@ -336,7 +344,7 @@ sub platform_name { # We don't use uname numbers here.) # # this changes each year, per above: - my $mactex_darwin = 12; # lowest minor rev supported by x86_64-darwin. + my $mactex_darwin = 13; # lowest minor rev supported by x86_64-darwin. # # Most robust approach is apparently to check sw_vers (os version, # returns "10.x" values), and sysctl (processor hardware). @@ -345,7 +353,7 @@ sub platform_name { if ($os_major != 10) { warn "$0: only MacOSX is supported, not $OS $os_major.$os_minor " . " (from sw_vers -productVersion: $sw_vers)\n"; - return "unknown-unknown"; + return "unknownmac-unknownmac"; } if ($os_minor >= $mactex_darwin) { ; # current version, default is ok (x86_64-darwin). @@ -412,8 +420,9 @@ sub platform_desc { 'universal-darwin' => 'MacOSX universal binaries', 'win32' => 'Windows', 'x86_64-cygwin' => 'Cygwin on x86_64', - 'x86_64-darwin' => 'MacOSX current (10.12-) on x86_64', + 'x86_64-darwin' => 'MacOSX current (10.13-) on x86_64', 'x86_64-darwinlegacy' => 'MacOSX legacy (10.6-) on x86_64', + 'x86_64-dragonfly' => 'DragonFlyBSD on x86_64', 'x86_64-linux' => 'GNU/Linux on x86_64', 'x86_64-linuxmusl' => 'GNU/Linux on x86_64 with musl', 'x86_64-solaris' => 'Solaris on x86_64', @@ -2789,31 +2798,42 @@ sub download_file { } } + sub _download_file_lwp { my ($url, $dest) = @_; - if (defined($::tldownload_server) && $::tldownload_server->enabled) { - debug("persistent connection set up, trying to get $url (for $dest)\n"); - my $ret = $::tldownload_server->get_file($url, $dest); - if ($ret) { - ddebug("downloading file via persistent connection succeeded\n"); - return $ret; - } else { - debug("TLUtils::download_file: persistent connection ok," - . " but download failed: $url\n"); - debug("TLUtils::download_file: retrying with wget.\n"); + if (!defined($::tldownload_server)) { + ddebug("::tldownload_server not defined\n"); + return(0); + } + if (!$::tldownload_server->enabled) { + # try to reinitialize a disabled connection + # disabling happens after 6 failed download trials + # we just re-initialize the connection + if (!setup_persistent_downloads()) { + # setup failed, give up + debug("reinitialization of LWP download failed\n"); + return(0); } + # we don't need to check for ->enabled, because + # setup_persistent_downloads calls TLDownload->new() + # which, if it succeeds, automatically set enabled to 1 + } + # we are still here, so try to download + debug("persistent connection set up, trying to get $url (for $dest)\n"); + my $ret = $::tldownload_server->get_file($url, $dest); + if ($ret) { + ddebug("downloading file via persistent connection succeeded\n"); + return $ret; } else { - if (!defined($::tldownload_server)) { - ddebug("::tldownload_server not defined\n"); - } else { - ddebug("::tldownload_server->enabled is not set\n"); - } - debug("persistent connection not set up\n"); + debug("TLUtils::download_file: persistent connection ok," + . " but download failed: $url\n"); + debug("TLUtils::download_file: retrying with other downloaders.\n"); } # if we are still here, download with LWP didn't succeed. return(0); } + sub _download_file_program { my ($url, $dest, $type) = @_; if (win32()) { @@ -3418,9 +3438,11 @@ strings. The message will be omitted unless C<-v -v -v> was specified. If the log file (see L<process_logging_options>) is defined, it also writes there. -This third level debugging message reports messages about processing -each line of any tlpdb files read, in addition to the first and second -levels. +In addition to the first and second levels, this third level debugging +message reports messages about processing each line of any tlpdb files +read, and messages about files tested or matched against tlpsrc +patterns. This output is extremely voluminous, so unless you're +debugging those parts of the code, it just gets in the way. =cut @@ -3839,7 +3861,16 @@ false. sub setup_persistent_downloads { if ($TeXLive::TLDownload::net_lib_avail) { ddebug("setup_persistent_downloads has net_lib_avail set\n"); - $::tldownload_server = TeXLive::TLDownload->new; + if ($::tldownload_server) { + if ($::tldownload_server->initcount() > $TeXLive::TLConfig::MaxLWPReinitCount) { + debug("stop retrying to initialize LWP after 10 failures\n"); + return 0; + } else { + $::tldownload_server->reinit(); + } + } else { + $::tldownload_server = TeXLive::TLDownload->new; + } if (!defined($::tldownload_server)) { ddebug("TLUtils:setup_persistent_downloads: failed to get ::tldownload_server\n"); } else { diff --git a/Master/texmf-dist/scripts/texlive/NEWS b/Master/texmf-dist/scripts/texlive/NEWS index 377308f73e2..e67a8b47198 100644 --- a/Master/texmf-dist/scripts/texlive/NEWS +++ b/Master/texmf-dist/scripts/texlive/NEWS @@ -3,6 +3,9 @@ Karl Berry, 2010.) <li>more specific verification error messages +<p><b>tlmgr 54118 (released 7mar20):</b> +<li>re-initialize LWP connection after 5 errors. + <p><b>tlmgr 53428 (released 17jan20):</b> <li>automatic retry of packages that fail to download. <li>rearrange packaging so little-used scripts are not part of diff --git a/Master/tlpkg/bin/tl-update-tlpdb b/Master/tlpkg/bin/tl-update-tlpdb index 0dd845d416b..fd6d110ca7d 100755 --- a/Master/tlpkg/bin/tl-update-tlpdb +++ b/Master/tlpkg/bin/tl-update-tlpdb @@ -291,8 +291,8 @@ sub compare_and_fix_tlpdbs { # if requested, also may need to fix up packages with catalogue changs. if ($opt_catalogue_compare) { my %cat_fixup = tlpdb_catalogue_compare($newtlpdb, $opt_catalogue_compare); - info("$prg: packages with Catalogue changes: ", - join(" ", keys %cat_fixup), "\n") if (keys %cat_fixup); + info("$prg: ", 0 + keys %cat_fixup, " packages with Catalogue changes: ", + join(" ", sort keys %cat_fixup), "\n") if (keys %cat_fixup); # hash slice to merge %cat_fixup into %packages_needing_fixup; # all the values are 1, so that doesn't matter. @packages_needing_fixup{ keys %cat_fixup } = values %cat_fixup; |