Skip to content

Commit

Permalink
updating installer data
Browse files Browse the repository at this point in the history
  • Loading branch information
norbusan committed Jan 31, 2024
1 parent 25601fe commit ec1e019
Show file tree
Hide file tree
Showing 3 changed files with 202 additions and 123 deletions.
104 changes: 84 additions & 20 deletions texmf-dist/scripts/texlive/tlmgr.pl
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ BEGIN
$kpsewhichname = "kpsewhich";
}
if (-r "$bindir/$kpsewhichname") {
# if not in bootstrapping mode => kpsewhich exists, so use it to get $Master
# not in bootstrapping mode => kpsewhich exists, so use it to get $Master
chomp($Master = `kpsewhich -var-value=TEXMFROOT`);
}

Expand Down Expand Up @@ -835,7 +835,8 @@ sub execute_action {


# run CMD with notice to the user and if exit status is nonzero, complain.
# return exit status.
# log output with logcommand (tlmgr-commands.log).
# return F_OK or F_ERROR.
#
sub do_cmd_and_check {
my $cmd = shift;
Expand All @@ -851,7 +852,8 @@ sub do_cmd_and_check {
$out = "";
} elsif (wndws() && (! -r "$Master/bin/windows/luatex.dll")) {
# deal with the case where only scheme-infrastructure is installed
# on Windows, thus no luatex.dll is available and the wrapper cannot be started
# on Windows, thus no luatex.dll is available and the wrapper cannot
# be started
tlwarn("Cannot run wrapper due to missing luatex.dll\n");
$ret = $F_OK;
$out = "";
Expand All @@ -860,27 +862,28 @@ sub do_cmd_and_check {
}
$out =~ s/\n+$//; # trailing newlines don't seem interesting
my $outmsg = "output:\n$out\n--end of output of $cmd.\n";
if ($ret == $F_OK) {
if ($ret == 0) {
info("done running $cmd.\n") unless $cmd =~ /^fmtutil/;
logcommand("success, $outmsg");
ddebug("$cmd $outmsg");
return ($F_OK);
} else {
info("\n");
tlwarn("$prg: $cmd failed (status $ret), output:\n$out\n");
logcommand("error, status: $ret, $outmsg");
return ($F_ERROR);
$ret = $F_ERROR;
}
return $ret;
}

# run external programs (mktexlsr, updmap-sys, etc.) as specified by the
# keys in the RET hash. We return the number of unsuccessful runs, zero
# if all ok.
# keys in the ::execute_actions hash. We return the number of
# unsuccessful runs, zero if all ok.
#
# If the "map" key is specified, the value may be a reference to a list
# of map command strings to pass to updmap, e.g., "enable Map=ascii.map".
#
sub handle_execute_actions {
debug("starting handle_execute_actions\n");
my $errors = 0;

my $sysmode = ($opts{"usermode"} ? "-user" : "-sys");
Expand Down Expand Up @@ -988,7 +991,7 @@ sub handle_execute_actions {
for my $e (keys %updated_engines) {
debug ("updating formats based on $e\n");
$errors += do_cmd_and_check
("$fmtutil_cmd --byengine $e --no-error-if-no-format $fmtutil_args");
("$fmtutil_cmd --byengine $e --no-error-if-no-format $fmtutil_args");
read_and_report_fmtutil_status_file($status_file);
unlink($status_file);
}
Expand All @@ -1007,10 +1010,10 @@ sub handle_execute_actions {

# now go back to the hyphenation patterns and regenerate formats
# based on the various language files
# this of course will in some cases duplicate fmtutil calls,
# this will in some cases duplicate fmtutil calls,
# but it is much easier than actually checking which formats
# don't need to be updated

#
if ($regenerate_language) {
for my $ext ("dat", "def", "dat.lua") {
my $lang = "language.$ext";
Expand All @@ -1030,27 +1033,80 @@ sub handle_execute_actions {
# --refresh existing formats to avoid generating new ones.
if ($::regenerate_all_formats) {
info("Regenerating existing formats, this may take some time ...");
# --refresh might already be in $invoke_fmtutil, but we don't care
$errors += do_cmd_and_check("$fmtutil_cmd --refresh --all $fmtutil_args");
# --refresh might already be in $fmtutil_args, but that's ok.
my $args = "--refresh --all";
$errors += do_cmd_and_check("$fmtutil_cmd $args $fmtutil_args");
read_and_report_fmtutil_status_file($status_file);
unlink($status_file);
info("done\n");
$::regenerate_all_formats = 0;
}
}

# lmtx/context cache creation/update. This variable is set, in
# TLPDB::install_package, when the context package is updated or installed.
if (defined $::context_cache_update_needed
&& $::context_cache_update_needed) {
if ($opts{"dry-run"}) {
debug("dry-run, skipping context cache update\n");
} else {
my $progext = ($^O =~ /^MSWin/i ? ".exe" : "");
$errors +=
TeXLive::TLUtils::update_context_cache($bindir, $progext,
\&run_postinst_logcommand);
}
$::context_cache_update_needed = 0;
}

# undefine the global var, otherwise in GUI mode the actions
# are accumulating
undef %::execute_actions;

debug("finished handle_execute_actions, errors=$errors\n");
if ($errors > 0) {
# should we return warning here?
# warning might suffice sometimes, but safer to return error.
return $F_ERROR;
} else {
return $F_OK;
}
}

# Run CMD with output logged via logcommand(). We use this for the
# ConTeXt cache updates (above); since they are so verbose, we want the
# output to be only in tlmgr-commands.log, not tlmgr.log or the terminal.
#
# This is the same result as do_cmd_and_check, which we use for the
# other postaction commands (fmtutil, etc.); the difference is that for
# context, we want to share the code to actually do the updates with
# install-tl, so there is a common routine TLUtils::update_context_cache,
# and thus we have to handle the logging differently.
#
# Another approach would be to move do_cmd_and_check to TLUtils and
# have install-tl call that. Perhaps that would be cleaner, but then
# there is tlmgr-specific stuff that would have to be conditionalized.
# So, not great either way. Maybe someday we will merge install-tl and tlmgr.
#
# As a result, the logging text here surrounding the output is mostly a
# duplicate of what's in do_cmd_and_check.
#
sub run_postinst_logcommand {
my ($cmd) = @_;
logpackage("command: $cmd");
logcommand("running $cmd");
my $ret = TeXLive::TLUtils::run_cmd_with_log ($cmd, \&logcommand_bare);
my $outmsg = "\n--end of output of $cmd";
if ($ret == 0) {
info("done running $cmd.\n") unless $cmd =~ /^fmtutil/;
logcommand("$outmsg (success).\n");
} else {
info("\n");
tlwarn("$prg: $cmd failed (status $ret), see $commandlogfile\n");
logcommand("$outmsg (failure, status $ret");
$ret = 1;
}
return $ret;
}

sub read_and_report_fmtutil_status_file {
my $status_file = shift;
my $fh;
Expand Down Expand Up @@ -2258,7 +2314,7 @@ sub action_backup {
if ($clean_mode) {
clear_old_backups ($pkg, $opts{"backupdir"}, $opts{"clean"}, $opts{"dry-run"}, 1);
} else {
# for now default to xz and allow overriding with env var
# for now default to xz and allow overriding with envvar
my $compressorextension = $Compressors{$::progs{'compressor'}}{'extension'};
my $tlp = $localtlpdb->get_package($pkg);
my $saving_verb = $opts{"dry-run"} ? "would save" : "saving";
Expand Down Expand Up @@ -3530,7 +3586,6 @@ sub action_update {

print "end-of-updates\n" if $::machinereadable;

#
# check that if updates to the critical packages are present all of
# them have been successfully updated
my $infra_update_done = 1;
Expand Down Expand Up @@ -3926,6 +3981,7 @@ sub action_install {
if (!$opts{"dry-run"}) {
if ($remotetlpdb->install_package($pkg, $localtlpdb,
($packs{$pkg} ? $packs{$pkg} : undef) )) {
# installation succeeded because we got a reference
logpackage("${re}install: $pkg$tagstr");
} else {
logpackage("failed ${re}install: $pkg$tagstr");
Expand Down Expand Up @@ -5433,7 +5489,8 @@ sub action_recreate_tlpdb {
next if $dirent eq ".";
next if $dirent eq "..";
next unless -d "$Master/bin/$dirent";
if (-r "$Master/bin/$dirent/kpsewhich" || -r "$Master/bin/$dirent/kpsewhich.exe") {
if (-r "$Master/bin/$dirent/kpsewhich"
|| -r "$Master/bin/$dirent/kpsewhich.exe") {
push @archs, $dirent;
debug("$prg: skipping directory $Master/bin/$dirent, no kpsewhich there\n");
}
Expand Down Expand Up @@ -6553,7 +6610,7 @@ sub action_key {
chomp (my $TEXMFSYSCONFIG = `kpsewhich -var-value=TEXMFSYSCONFIG`);
my $local_keyring = "$Master/tlpkg/gpg/repository-keys.gpg";
if ($arg eq 'list') {
debug("running $::gpg --list-keys\n");
debug("running: $::gpg --list-keys\n");
system("$::gpg --list-keys");
return $F_OK;
} elsif ($arg eq 'remove') {
Expand Down Expand Up @@ -7691,11 +7748,18 @@ sub logpackage {
}
sub logcommand {
if ($commandlogfile) {
$commandslogged++;
$commandslogged++; # not really counting commands logged, but calls
my $tim = localtime();
print COMMANDLOG "[$tim] @_\n";
}
}
# without the timestamp
sub logcommand_bare {
if ($commandlogfile) {
$commandslogged++;
print COMMANDLOG "@_\n";
}
}


# resolve relative paths from tlpdb wrt tlroot
Expand Down Expand Up @@ -7767,7 +7831,7 @@ sub check_for_critical_updates {
my $localrev = $tlp->revision;
my $mtlp = $mediatlpdb->get_package($pkg);
if (!defined($mtlp)) {
debug("Very surprising, $pkg is not present in the remote tlpdb.\n");
debug("Surprising, $pkg not present in remote tlpdb.\n");
next;
}
my $remoterev = $mtlp->revision;
Expand Down
Loading

0 comments on commit ec1e019

Please sign in to comment.