diff options
Diffstat (limited to 'Master/tlpkg')
-rw-r--r-- | Master/tlpkg/dev/dev.usermode-tlmgr.patch | 560 |
1 files changed, 0 insertions, 560 deletions
diff --git a/Master/tlpkg/dev/dev.usermode-tlmgr.patch b/Master/tlpkg/dev/dev.usermode-tlmgr.patch index 52e7f466d8b..1ae6bbe98ed 100644 --- a/Master/tlpkg/dev/dev.usermode-tlmgr.patch +++ b/Master/tlpkg/dev/dev.usermode-tlmgr.patch @@ -114,566 +114,6 @@ Index: tlpkg/TeXLive/TLUtils.pm } $totlpdb->add_tlpobj($tlpobj); # we have to write out the tlpobj file since it is contained in the -Index: tlpkg/dev/dev.usermode-tlmgr.patch -=================================================================== ---- tlpkg/dev/dev.usermode-tlmgr.patch (revision 20263) -+++ tlpkg/dev/dev.usermode-tlmgr.patch (working copy) -@@ -1,475 +1,8 @@ --Index: texmf/scripts/texlive/tlmgr.pl --=================================================================== ----- texmf/scripts/texlive/tlmgr.pl (revision 16521) --+++ texmf/scripts/texlive/tlmgr.pl (working copy) --@@ -127,6 +127,8 @@ -- "package-logfiles" => "=s", -- "persistent-downloads" => 1, -- "pause" => 1, --+ "usermode" => 1, --+ "usertree" => "=s", -- "version" => 1, -- "help|h|?" => 1); -- --@@ -305,13 +307,30 @@ -- pod2usage(-msg => $msg, -exitstatus => 1, -verbose => 1, @noperldoc); -- } -- --+ # --+ # the main tree we will be working on --+ $::maintree = $Master; --+ if ($opts{"usermode"}) { --+ # we could also try to detect that we don't have write permissions --+ # and switch to user mode automatically --+ if (defined($opts{"usertree"})) { --+ $::maintree = $opts{"usertree"}; --+ } else { --+ chomp($::maintree = `kpsewhich -var-value TEXMFHOME`); --+ } --+ } --+ -- # besides doing normal logging if -logfile is specified, we try to log -- # package related actions (install, remove, update) to -- # the package-log file TEXMFSYSVAR/web2c/tlmgr.log -- $packagelogged = 0; # how many msgs we logged -- chomp (my $texmfsysvar = `kpsewhich -var-value=TEXMFSYSVAR`); -- $packagelogfile = $opts{"package-logfile"}; --- $packagelogfile ||= "$texmfsysvar/web2c/tlmgr.log"; --+ if ($opts{"usermode"}) { --+ $packagelogfile ||= "$::maintree/web2c/tlmgr.log"; --+ } else { --+ $packagelogfile ||= "$texmfsysvar/web2c/tlmgr.log"; --+ } -- # -- # Try to open the packagelog file, but do NOT die when that does not work -- if (!open(PACKAGELOG, ">>$packagelogfile")) { --@@ -457,6 +476,9 @@ -- } elsif ($action =~ m/^show$/i) { -- action_show(); -- finish(0); --+ } elsif ($action =~ m/^init-usertree$/i) { --+ action_init_usertree(); --+ finish(0); -- } elsif ($action =~ m/^remove$/i) { -- action_remove(); -- } elsif ($action =~ /^paper$/) { --@@ -520,6 +542,8 @@ -- { -- my $errors = 0; -- --+ my $sysmode = ($opts{"usermode"} ? "" : "-sys"); --+ -- if ($::files_changed) { -- $errors += do_cmd_and_check("mktexlsr"); -- $::files_changed = 0; --@@ -550,14 +574,14 @@ -- } -- } -- for my $m (keys %do_disable) { --- $errors += do_cmd_and_check("updmap-sys --nomkmap --nohash --disable $m"); --+ $errors += do_cmd_and_check("updmap$sysmode --nomkmap --nohash --disable $m"); -- } -- for my $m (keys %do_enable) { --- my $str = "updmap-sys --nomkmap --nohash --enable " . --+ my $str = "updmap$sysmode --nomkmap --nohash --enable " . -- $::execute_actions{'enable'}{'maps'}{$m} . "=$m"; -- $errors += do_cmd_and_check($str); -- } --- $errors += do_cmd_and_check("updmap-sys") if $run_full; --+ $errors += do_cmd_and_check("updmap$sysmode") if $run_full; -- } -- -- --@@ -602,13 +626,13 @@ -- # first regenerate all formats --byengine -- for my $e (keys %updated_engines) { -- log ("updating formats based on $e\n"); --- $errors += do_cmd_and_check("fmtutil-sys --byengine $e"); --+ $errors += do_cmd_and_check("fmtutil$sysmode --byengine $e"); -- } -- # now rebuild all other formats -- for my $f (keys %do_enable) { -- next if defined($updated_engines{$format_to_engine{$f}}); -- log ("(re)creating format dump $f\n"); --- $errors += do_cmd_and_check("fmtutil-sys --byfmt $f"); --+ $errors += do_cmd_and_check("fmtutil$sysmode --byfmt $f"); -- $done_formats{$f} = 1; -- } -- } --@@ -646,7 +670,7 @@ -- $lang = "$TEXMFSYSVAR/tex/generic/config/$lang"; -- } -- if ($localtlpdb->option("create_formats") && !$::regenerate_all_formats) { --- $errors += do_cmd_and_check("fmtutil-sys --byhyphen $lang"); --+ $errors += do_cmd_and_check("fmtutil$sysmode --byhyphen $lang"); -- } -- } -- } --@@ -655,7 +679,7 @@ -- # -- if ($::regenerate_all_formats) { -- info("Regenerating all formats, this may take some time ..."); --- $errors += do_cmd_and_check("fmtutil-sys --all"); --+ $errors += do_cmd_and_check("fmtutil$sysmode --all"); -- info("done\n"); -- $::regenerate_all_formats = 0; -- } --@@ -828,8 +852,13 @@ -- action_gui("config") if $opts{"gui"}; -- -- init_local_db(); --- chomp(my $texmfsysconfig = `kpsewhich -var-value=TEXMFSYSCONFIG`); --- $ENV{"TEXMFCONFIG"} = $texmfsysconfig; --+ my $texmfconfig; --+ if ($opts{"usermode"}) { --+ chomp($texmfconfig = `kpsewhich -var-value=TEXMFCONFIG`); --+ } else { --+ chomp($texmfconfig = `kpsewhich -var-value=TEXMFSYSCONFIG`); --+ } --+ $ENV{"TEXMFCONFIG"} = $texmfconfig; -- -- my $action = shift @ARGV; -- if ($action =~ m/^paper$/i) { # generic paper --@@ -841,7 +870,7 @@ -- "as in: tlmgr pdftex paper --list\n"); -- -- } elsif (!defined($newpaper)) { # tlmgr paper => show all current sizes. --- TeXLive::TLPaper::paper_all($texmfsysconfig,undef); --+ TeXLive::TLPaper::paper_all($texmfconfig,undef); -- -- } elsif ($newpaper !~ /^(a4|letter)$/) { # tlmgr paper junk => complain. -- $newpaper = "the empty string" if !defined($newpaper); --@@ -849,7 +878,7 @@ -- -- } else { # tlmgr paper {a4|letter} => do it. -- return if !check_on_writable(); --- TeXLive::TLPaper::paper_all($texmfsysconfig,$newpaper); --+ TeXLive::TLPaper::paper_all($texmfconfig,$newpaper); -- } -- -- } else { # program-specific paper --@@ -866,7 +895,7 @@ -- return if !check_on_writable(); -- } -- unshift(@ARGV, "--list") if $opts{"list"}; --- TeXLive::TLPaper::do_paper($prog,$texmfsysconfig,@ARGV); --+ TeXLive::TLPaper::do_paper($prog,$texmfconfig,@ARGV); -- } -- } -- --@@ -913,6 +942,7 @@ -- print "longdesc: ", $tlp->longdesc, "\n" if ($tlp->longdesc); -- print "installed: ", ($installed ? "Yes" : "No"), "\n"; -- print "revision: ", $tlp->revision, "\n" if ($installed); --+ print "relocatable: ", ($tlp->relocated ? "Yes" : "No"), "\n"; -- print "cat-version: ", $tlp->cataloguedata->{'version'}, "\n" -- if $tlp->cataloguedata->{'version'}; -- print "cat-date: ", $tlp->cataloguedata->{'date'}, "\n" --@@ -983,6 +1013,10 @@ -- # PATH -- # -- sub action_path { --+ if ($opts{"usermode"}) { --+ tlwarn("action `path' not supported in usermode!\n"); --+ exit 1; --+ } -- my $what = shift @ARGV; -- if (!defined($what) || ($what !~ m/^(add|remove)$/i)) { -- tlwarn("action path needs one argument, either add or remove\n"); --@@ -1691,7 +1725,10 @@ -- -- # check for updates to tlmgr and die unless either --force or --list or --self -- # is given --- my @critical = check_for_critical_updates($localtlpdb, $tlmediatlpdb); --+ my @critical; --+ if (!$opts{"usermode"}) { --+ @critical = check_for_critical_updates($localtlpdb, $tlmediatlpdb); --+ } -- my $dry_run_cont = $opts{"dry-run"} && ($opts{"dry-run"} < 0); -- if ( !$dry_run_cont && !$opts{"self"} && @critical) { -- critical_updates_warning(); --@@ -2465,16 +2502,18 @@ -- init_tlmedia(); -- -- # check for updates to tlmgr itself, and die unless --force is given --- if (check_for_critical_updates( $localtlpdb, $tlmediatlpdb)) { --- critical_updates_warning(); --- if ($opts{"force"}) { --- tlwarn("Continuing due to --force\n"); --- } else { --- if ($::gui_mode) { --- # return here and don't do any updates --- return; --+ if (!$opts{"usermode"}) { --+ if (check_for_critical_updates( $localtlpdb, $tlmediatlpdb)) { --+ critical_updates_warning(); --+ if ($opts{"force"}) { --+ tlwarn("Continuing due to --force\n"); -- } else { --- die "tlmgr: Not continuing, please see warning above!\n"; --+ if ($::gui_mode) { --+ # return here and don't do any updates --+ return; --+ } else { --+ die "tlmgr: Not continuing, please see warning above!\n"; --+ } -- } -- } -- } --@@ -2487,7 +2526,7 @@ -- @packs = $tlmediatlpdb->expand_dependencies("-only-arch", $localtlpdb, @ARGV) unless $opts{"no-depends-at-all"}; -- # now expand all others unless $opts{"no-depends"} -- # if $opts{"reinstall"} do not collection->collection dependencies --- if ($opts{"reinstall"}) { --+ if ($opts{"reinstall"} || $opts{"usermode"}) { -- @packs = $tlmediatlpdb->expand_dependencies("-no-collections", $localtlpdb, @packs) unless $opts{"no-depends"}; -- } else { -- @packs = $tlmediatlpdb->expand_dependencies($localtlpdb, @packs) unless $opts{"no-depends"}; --@@ -2555,6 +2594,15 @@ -- foreach my $pkg (@todo) { -- my $flag = $FLAG_INSTALL; -- my $re = ""; --+ my $tlp = $tlmediasrc->tlpdb->get_package($pkg); --+ if (!defined($tlp)) { --+ info("Unknown package $pkg\n"); --+ next; --+ } --+ if (!$tlp->relocated && $opts{"usermode"}) { --+ info("Package $pkg is not relocatable, cannot install it in user mode!\n"); --+ next; --+ } -- if (defined($localtlpdb->get_package($pkg))) { -- if ($opts{"reinstall"}) { -- $re = "re"; --@@ -2784,11 +2832,11 @@ -- # now also save the TLPOBJ of 00texlive.installation -- my $tlpo = $localtlpdb->get_package("00texlive.installation"); -- if ($tlpo) { --- if (open(TOFD, ">$Master/tlpkg/tlpobj/00texlive.installation.tlpobj")) { --+ if (open(TOFD, ">$::maintree/tlpkg/tlpobj/00texlive.installation.tlpobj")) { -- $tlpo->writeout(\*TOFD); -- close(TOFD); -- } else { --- tlwarn("Cannot save 00texlive.installation to $Master/tlpkg/tlpobj/00texlive.installation.tlpobj\n"); --+ tlwarn("Cannot save 00texlive.installation to $::maintree/tlpkg/tlpobj/00texlive.installation.tlpobj\n"); -- } -- } -- } else { --@@ -2821,6 +2869,10 @@ -- warn("action `arch' not supported on Windows\n"); -- return(); -- } --+ if ($opts{"usermode"}) { --+ tlwarn("action `arch' not supported in usermode\n"); --+ exit 1; --+ } -- if ($opts{"gui"}) { -- action_gui("arch"); -- } --@@ -2960,6 +3012,10 @@ -- # GENERATE -- # -- sub action_generate { --+ if ($opts{"usermode"}) { --+ tlwarn("action `generate' not supported in usermode!\n"); --+ exit 1; --+ } -- my $dest = defined($opts{"dest"}) ? $opts{"dest"} : ""; -- my $localconf = defined($opts{"localcfg"}) ? $opts{"localcfg"} : ""; -- my $what = shift @ARGV; --@@ -3774,6 +3830,39 @@ -- -- -- # --+# action init_user_tree --+# sets up TEXMFHOME or --usertree argument for user mode tlmgr --+# by creating a minimal tlpdb --+# --+sub action_init_usertree { --+ init_local_db(); --+ my $tlpdb = TeXLive::TLPDB->new; --+ my $usertree; --+ if ($opts{"usertree"}) { --+ $usertree = $opts{"usertree"}; --+ } else { --+ chomp($usertree = `kpsewhich -var-value TEXMFHOME`); --+ } --+ $tlpdb->root($usertree); --+ my $inst = TeXLive::TLPOBJ->new; --+ $inst->name("00texlive.installation"); --+ $inst->category("TLCore"); --+ my @deps; --+ push @deps, "opt_location:$location"; --+ push @deps, "setting_available_architectures:"; --+ push @deps, "setting_usertree:1"; --+ $inst->depends(@deps); --+ $tlpdb->add_tlpobj($inst); --+ $tlpdb->save; --+ # --+ # we need to create web2c dir for TLMedia to succeed setting up --+ # and for tlmgr.log file --+ mkdir ("$usertree/web2c"); --+ mkdir ("$usertree/tlpkg/tlpobj"); --+} --+ --+ --+# -- # action conf -- # tries to mimick texconfig conf but probably will add some more things -- # --@@ -3837,10 +3926,10 @@ -- # stuff changed via the GUI -- return if defined $localtlmedia; -- return if defined $localtlpdb; --- $localtlmedia = TeXLive::TLMedia->new ( $Master ); --- die("cannot setup TLMedia in $Master") unless (defined($localtlmedia)); --+ $localtlmedia = TeXLive::TLMedia->new ( $::maintree ); --+ die("cannot setup TLMedia in $::maintree") unless (defined($localtlmedia)); -- $localtlpdb = $localtlmedia->tlpdb; --- die("cannot find tlpdb in $Master") unless (defined($localtlpdb)); --+ die("cannot find tlpdb in $::maintree") unless (defined($localtlpdb)); -- # setup the programs, for w32 we need the shipped wget/xz etc, so we -- # pass the location of these files to setup_programs. -- if (!setup_programs("$Master/tlpkg/installer", $localtlmedia->platform)) { --@@ -4152,6 +4241,7 @@ -- } -- -- sub check_on_writable { --+ return 1 if $opts{"usermode"}; -- if (!TeXLive::TLUtils::dir_writable("$Master/tlpkg")) { -- tlwarn("You don't have permission to change the installation in any way,\n"); -- tlwarn("specifically, the directory $Master/tlpkg/ is not writable.\n"); --@@ -4305,6 +4395,15 @@ -- likely untranslated, messages to standard error. Helpful for -- translators to see what remains to be done. -- --+=item B<--usermode> --+ --+Activates the user mode, see L<USER MODE> below. --+ --+=item B<--usertree> I<dir> --+ --+Uses I<dir> as user tree in user mode, seel L<USER MODE> below. --+ --+ -- =back -- -- The standard options for TeX Live programs are also accepted: --@@ -5061,8 +5160,109 @@ -- to make use of C<updmap-local.cfg>, you need to run C<tlmgr generate -- updmap> yourself. After that, network updates and your local changes -- should be merged. --+ --+=head2 init-usertree -- --+sets up the default user tree (C<TEXMFHOME>) or the one specified --+on the command line using C<--usertree> for user mode management. --+See L<USER MODE> below. -- --+ --+=head1 USER MODE --+ --+B<WARNING> B<WARNING> B<WARNING> --+This is very much work in progress --+and experimental. Expect breakage, and the need to reinstall your --+user tree a new. --+ --+C<tlmgr> provides a restricted way to manage arbitrary texmf trees --+in the same way as the installation. This allows a user without write --+permissions to the installation location to update/install packages --+into a user tree. --+ --+C<tlmgr> is set into user mode by giving the command line option --+C<--usermode>. It will not switch automatically, nor does it support --+a config file by now. Thus, this option has to be given every time. --+ --+This mode of C<tlmgr> works on a user tree, which by default will be --+the value of C<TEXMFHOME>, but can be overridden with the command line --+option C<--usertree>. In the following when we speak of the user tree --+we mean either C<TEXMFHOME> or the one given on the command line. --+ --+Not all actions are allowed in user mode, C<tlmgr> will warn you and --+not carry out this action. The actions of C<tlmgr> can be classified into --+those that don't need write permissions and thus are working the same --+in user mode or normal mode. Currently these are --+B<help>, B<version>, B<search>, B<show>, B<list>, B<check>, B<print-arch>. --+ --+Most of the actions dealing with package management on the other hand --+need write permissions, and behave differently: --+B<install>, B<update>, B<remove>, B<option>, B<paper>, B<generate>, --+B<backup>, B<restore>, B<uninstall>, B<symlinks>. --+ --+Currently not supported (and probably will never be) is the B<arch> --+action. --+ --+As for the B<gui> action it is currently not supported, but might be --+in future. --+ --+Before using C<tlmgr> in user mode, you have to set up the user tree --+with the B<init-usertree> action. This will create C<USERTREE/web2c>, --+C<USERTREE/tlpkg/tlpobj> and set up a minimal C<USERTREE/tlpkg/texlive.tlpdb>. --+From then on you can use the supported actions as normal by adding --+the C<--usermode> command line switch. --+ --+In user mode the file C<USERTREE/tlpkg/texlive.tlpdb> contains only the --+packages that have been installed into the user tree C<USERTREE> using --+C<tlmgr>, plus additional options in the virtual package --+00texlive.installation (like with the main installation's texlive.tlpdb). --+ --+All actions on packages in user mode can only be carried out on packages --+that are marked as B<relocatable>. Basically that means that the contained --+files all reside in the C<texmd-dist> tree. B<NOTE> That already excludes --+all binary packages! Of the currently about 1900 packages the majority, --+currently about 1750, are relocatable, i.e., they can be installed into --+a user tree. --+ --+Description of changes of actions in user mode: --+ --+=head2 install --+ --+in usermode the tlmgr action install will check that the package --+and all depending packages are either all relocated, or those that --+are not relocated are already installed in the system installation. --+If this is true it will unpack all containers to be installed into --+the user tree (TEXMFHOME or the value of --user-tree) and add the --+respective packages to the user texlive.tlpdb (creating it if there --+has non be created till now). --+ --+Currently installing a collection installs all depending packages, --+but in contrast to normal mode does not install depending collections. --+So in *normal* mode tlmgr install collection-context would install --+collection-metapost, c-basic, c-documentation-base, too. In *usermode* --+only the packages mentioned in collection-context are installed. --+ --+=head2 backup, restore, remove, update --+ --+in usermode the tlmgr action update will check that all packages --+to be updated are installed in the user tree, otherwise it behaves --+exactely like the system tlmgr. --+ --+=head2 option --+ --+only acts upon the user's texlive.tlpdb --+ --+=head2 paper --+ --+changes configuration files in user tree --+ --+=head2 generate --+ --+creates configuration files in user tree --+ --+ --+B<WARNING WARNING WARNING> Be again warned that this is very experimental! --+ -- =head1 MACHINE-READABLE OUTPUT -- -- Given the C<--machine-readable> option, C<tlmgr> writes to stdout in the - Index: tlpkg/TeXLive/TLConfig.pm - =================================================================== ----- tlpkg/TeXLive/TLConfig.pm (revision 16521) -+--- tlpkg/TeXLive/TLConfig.pm (revision 20263) - +++ tlpkg/TeXLive/TLConfig.pm (working copy) --@@ -169,7 +169,8 @@ -+@@ -173,7 +173,8 @@ - - our %TLPDBSettings = ( - "platform" => [ "s", "Main platform for this computer" ], -@@ -481,9 +14,9 @@ - our $WindowsMainMenuName = "TeX Live $ReleaseYear"; - Index: tlpkg/TeXLive/TLMedia.pm - =================================================================== ----- tlpkg/TeXLive/TLMedia.pm (revision 16521) -+--- tlpkg/TeXLive/TLMedia.pm (revision 20263) - +++ tlpkg/TeXLive/TLMedia.pm (working copy) --@@ -60,6 +60,8 @@ -+@@ -59,6 +59,8 @@ - } - if (-d "$location/texmf/web2c") { - $media = 'DVD'; -@@ -493,8 +26,8 @@ - $media = 'CD'; - } else { - @@ -247,8 +249,12 @@ -- } - # if a package is relocatable we have to cancel the reloc prefix -+ # and unset the relocated setting - # before we save it to the local tlpdb - - if ($tlpobj->relocated) { - - $tlpobj->cancel_reloc_prefix; -@@ -504,10 +37,10 @@ - + } else { - + $tlpobj->replace_reloc_prefix; - + } -+ $tlpobj->relocated(0); - } - # we have to write out the tlpobj file since it is contained in the -- # archives (.tar.xz) but at DVD install time we don't have them --@@ -317,7 +323,11 @@ -+@@ -321,7 +327,11 @@ - } elsif ($what =~ m,\.tar(\.xz)?$,) { - my $type = defined($1) ? "xz" : "tar"; - -@@ -520,15 +53,15 @@ - - # this is the case when we install from CD or the NET, or a backup - # --@@ -400,6 +410,7 @@ -- my ($self, $pkg, $nopostinstall) = @_; -+@@ -404,6 +414,7 @@ -+ my ($self, $pkg, %opts) = @_; - my $localtlpdb = $self->tlpdb; - my $tlp = $localtlpdb->get_package($pkg); - + my $usertree = $localtlpdb->setting("usertree"); - if (!defined($tlp)) { - tlwarn ("$pkg: package not present, cannot remove\n"); - } else { --@@ -426,9 +437,12 @@ -+@@ -430,9 +441,12 @@ - # in user mode we just remove the prefix, in normal mode we - # replace it with texmf-dist - # since we don't have user mode -@@ -544,9 +77,9 @@ - # - Index: tlpkg/TeXLive/TLPOBJ.pm - =================================================================== ----- tlpkg/TeXLive/TLPOBJ.pm (revision 16521) -+--- tlpkg/TeXLive/TLPOBJ.pm (revision 20263) - +++ tlpkg/TeXLive/TLPOBJ.pm (working copy) --@@ -459,6 +459,21 @@ -+@@ -473,6 +473,21 @@ - sub cancel_reloc_prefix { - my $self = shift; - my @docfiles = $self->docfiles; -@@ -570,9 +103,9 @@ - my @runfiles = $self->runfiles; - Index: tlpkg/TeXLive/TLUtils.pm - =================================================================== ----- tlpkg/TeXLive/TLUtils.pm (revision 16521) -+--- tlpkg/TeXLive/TLUtils.pm (revision 20263) - +++ tlpkg/TeXLive/TLUtils.pm (working copy) --@@ -1245,7 +1245,7 @@ -+@@ -1279,7 +1279,7 @@ - # if a package is relocatable we have to cancel the reloc prefix - # before we save it to the local tlpdb - if ($tlpobj->relocated) { Index: texmf/scripts/texlive/tlmgr.pl =================================================================== --- texmf/scripts/texlive/tlmgr.pl (revision 20263) |