diff options
author | Norbert Preining <preining@logic.at> | 2011-05-09 22:46:38 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2011-05-09 22:46:38 +0000 |
commit | 9f55eda0e50ee25f2dc228440fbea1cc3183ade3 (patch) | |
tree | 1c2661d4d6653970c95de94f7a9f043e6793a774 /Master/tlpkg/dev | |
parent | 5299a5975ba12e66b32ab39a3b9c206a144d75fb (diff) |
move files from tlpkg/dev/archive to tlpkg/archive
please don't keep two archive dirs
git-svn-id: svn://tug.org/texlive/trunk@22390 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/dev')
4 files changed, 0 insertions, 898 deletions
diff --git a/Master/tlpkg/dev/archive/dev.split-desktop-integration.README b/Master/tlpkg/dev/archive/dev.split-desktop-integration.README deleted file mode 100644 index ee3c6005306..00000000000 --- a/Master/tlpkg/dev/archive/dev.split-desktop-integration.README +++ /dev/null @@ -1,18 +0,0 @@ -split-desktop-integration - -I have implemented one additional installer option (and support in tlmgr) -that splits the current - desktop_integration -which currently relates to both shortcuts on the desktop and in the menu -into two options: - desktop_integration - menu_integration -that do one thing. - -Support is written for the installer (text, perltk, wizard), and tlmgr -(changing the settings). - -Karl mentioned that both options should be here, but menu_integration -should *not* be visible for the user at installation time, and should -only be used by $portable. - diff --git a/Master/tlpkg/dev/archive/dev.split-desktop-integration.patch b/Master/tlpkg/dev/archive/dev.split-desktop-integration.patch deleted file mode 100644 index 3020684ffea..00000000000 --- a/Master/tlpkg/dev/archive/dev.split-desktop-integration.patch +++ /dev/null @@ -1,86 +0,0 @@ -Index: install-tl -=================================================================== ---- install-tl (revision 19696) -+++ install-tl (working copy) -@@ -861,15 +861,13 @@ - sub do_tlpdb_postactions { - info ("running package specific postactions\n"); - # Run the post installation code in the postaction tlpsrc entries -- # For now the option_desktop_integrations maps to both desktop -- # and menu entries, but we can split that later - my $usedtlpdb = $vars{'from_dvd'} ? $tlpdb : $localtlpdb; - foreach my $package ($usedtlpdb->list_packages) { - &TeXLive::TLUtils::do_postaction("install", - $usedtlpdb->get_package($package), - $vars{'option_file_assocs'}, -+ $vars{'option_menu_integration'}, - $vars{'option_desktop_integration'}, -- $vars{'option_desktop_integration'}, - $vars{'option_post_code'}); - } - info ("finished with package specific postactions\n"); -@@ -1313,6 +1311,9 @@ - && ($tlpdb->option("paper") eq "letter" ? 1 : 0); - $vars{'option_desktop_integration'} = $tlpdb->option("desktop_integration"); - $vars{'option_desktop_integration'} = 1 if win32(); -+ # we unconditionally set the menu integration, this will be done in all -+ # cases but portable use, where we sanitize it away -+ $vars{'option_menu_integration'} = 1; - $vars{'option_path'} = $tlpdb->option("path"); - $vars{'option_path'} = 0 if !defined($vars{'option_path'}); - $vars{'option_path'} = 1 if win32(); -@@ -1496,6 +1497,7 @@ - $vars{'option_path'} &&= !$vars{'portable'}; - $vars{'option_file_assocs'} &&= !$vars{'portable'}; - $vars{'option_desktop_integration'} &&= !$vars{'portable'}; -+ $vars{'option_menu_integration'} &&= !$vars{'portable'}; - } - - sub prepare_installation { -@@ -1635,6 +1637,7 @@ - $previoustlpdb->option_pkg("00texlive.installation", - "create_formats"); - $vars{'option_desktop_integration'} = 1 if win32(); -+ $vars{'option_menu_integration'} = 1 if win32(); - $vars{'option_path'} = - $previoustlpdb->option_pkg("00texlive.installation", - "path"); -Index: texmf/scripts/texlive/tlmgrgui.pl -=================================================================== ---- texmf/scripts/texlive/tlmgrgui.pl (revision 19696) -+++ texmf/scripts/texlive/tlmgrgui.pl (working copy) -@@ -1098,7 +1098,7 @@ - - if (win32()) { - push @config_set_l, -- $back_config_set->Label(-text => __("Create shortcuts in menu and on desktop"), -anchor => "w"); -+ $back_config_set->Label(-text => __("Create shortcuts on the desktop"), -anchor => "w"); - push @config_set_m, - $back_config_set->Label(-textvariable => \$changeddefaults{"desktop_integration"}{'display'}); - push @config_set_r, -Index: texmf/scripts/texlive/NEWS -=================================================================== ---- texmf/scripts/texlive/NEWS (revision 19696) -+++ texmf/scripts/texlive/NEWS (working copy) -@@ -6,6 +6,8 @@ - <li>set LESS='-R' and unset LESSOPEN and LESSPIPE in the environment - before calling pod2usage. - <li>don't load the remote db if tlmgr update is called without arguments -+<li>menu shortcuts are installed unconditionally, the desktop_integration -+ option only controls shortcuts on the desktop (W32) - - tlmgr rev 19414 (TeX Live 2010 Release Version) - -Index: tlpkg/TeXLive/TLConfig.pm -=================================================================== ---- tlpkg/TeXLive/TLConfig.pm (revision 19696) -+++ tlpkg/TeXLive/TLConfig.pm (working copy) -@@ -140,7 +140,7 @@ - "Create formats on installation" ], - "desktop_integration" => - [ "b", 1, "desktop_integration", -- "Create shortcuts (menu and desktop) in postinst" ], -+ "Create shortcuts on the desktop in postinst" ], - "file_assocs" => - [ "n:0..2", 1, "fileassocs", - "Change file associations in postinst" ], diff --git a/Master/tlpkg/dev/archive/dev.usermode-tlmgr.README b/Master/tlpkg/dev/archive/dev.usermode-tlmgr.README deleted file mode 100644 index 9f1ae445d77..00000000000 --- a/Master/tlpkg/dev/archive/dev.usermode-tlmgr.README +++ /dev/null @@ -1,212 +0,0 @@ -Using the TeX Live Manager in Usermode -====================================== -(to be discussed and implemented) -(partial implementation working for install and remove is in - tlpkg/dev/dev.usermode-tlmgr.patch) - - -0. Contents ------------ - -0. Contents -1. Rational and definition -2. General layout -3. Description of actions -4. Open questions -5. Changes to the infrastructure - ---------------------------------------------------------------- - -0.1 Implementation notes ------------------------- - -- User has to first call - tlmgr init-usertree [ --usertree .... ] -- available_architectures is set to the empty list, this allows - updating packages depending on .ARCH packages, but I am not sure - if that is a good idea - fixed now, only relocated packages can be installed in usermode -- update, install, remove, paper done -- postinstall action call -sys variant if !$opts{"usermode"} -- most other actions exit 1 with warning if in usermode - ---------------------------------------------------------------- - -1. Rationale and definition ---------------------------- - -The idea behind developing a user mode for the TeX Live Manager is -providing a tool to manage different texmf trees for users without -write permissions to the system TeX Live installation on a multi user -system. - -If a user without write permissions to the main installation -tree is calling tlmgr, or it is called with --user (name to be decided) -command line argument, then tlmgr will work in "usermode" and will behave -as specified here. - -Already supported actions (where no write permissions are needed): - help, version, search, show, list, check, print-arch - -Actions that behave differently in usermode: - install, update, remove, option, paper, generate, backup, restore - uninstall, symlinks - -Actions that are not supported in usermode: - arch - -Actions I am not sure by now - gui - ------------------------------------------------------------- - -2. General layout ------------------ - -In usermode tlmgr manages a different texmf tree. By default it is TEXMFHOME -but can be changed with --user-tree ... (name to be decided) (which implies -automatically --user). The so managed texmf tree TREE contains a new toplevel -directory - TREE/tlpkg -which in turns contains the tlpdb, and the sub directory tlpkg/tlpobj. - -The file - TREE/tlpkg/texlive.tlpdb -contains only the packages that have been installed into the user tree TREE -plus additional options in the virtual package 00texlive.installation -(like with the main installation's texlive.tlpdb). - -Management in user mode is only possible for "relocatable" packages, that are -packages that share the common prefix - $TeXLive::TLConfig::RelocPrefix -which is set to - texmf-dist -That means that only a package where all files are from the texmf-dist tree -can be managed in usermode. - -These packages' containers are created relocatable, that is, the files in -the tar file do not have the "texmf-dist" part included, thus can be -unpacked directly into TEXMFHOME. In the tlpdb this fact is advertised -in a TLPOBJ with the new field - relocated 1 -As an example: - name 12many - category Package - revision ... - relocated 1 - shortdesc ... - ... - docfiles size=98 - RELOC/doc/latex/12many/12many.pdf - RELOC/doc/latex/12many/README - ... - srcfiles size=6 - RELOC/source/latex/12many/12many.dtx - RELOC/source/latex/12many/12many.ins - runfiles size=1 - RELOC/tex/latex/12many/12many.sty - ... - -The normal installation procedure of TeX Live (i.e., currently -TLUtils::install_package) will take care that when unpacking these -relocated containers the missing "texmf-dist" is added. - ------------------------------------------------ - -3. Description of actions -------------------------- - -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). - - Open question: Should we support installation of dependencies at all - or should install only work on single package in user mode. If only - on single package, what to do with collections and other dependencies? - Maybe the user has to install all packages by hand? - - 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. - -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. - -option: - only acts upon the user's texlive.tlpdb - -paper: - changes configuration files in user tree - -generate: - creates configuration files in user tree - -uninstall: - will remove all packages from the user's texlive.tlpdb, and then - remove the tlpkg directory in the user tree - -symlinks: - takes the settings from the user's texlive.tlpdb, other then that - it behaves the same way - -gui: - the GUI should be adapted to do (at least): - - if in usermode show all packages with specification whether it is - from user tree or system tree - - show packags that have versions in the user tree and the system tree - - other actions work as described above - -arch: - is simply not supported because it needs access to the binary directories - which are not in the texmf-dist prefix, so no operation is allowed - ------------------------------------------------------------------------ - -4. Open questions ------------------ - -a. Post install actions: - what should be done with post install actions: - - fileassoc -> ignore - - shortcuts -> make them only for the user? - - TLPackageConfigurations (should it go anyway) ? - - post install code scripts: we could pass the "user" argument - so scripts can react on that - -b. Behaviour if system tree has been updated and provides newer packages: - - warn the user - - automatically remove packages in the user tree that are older NO!!! - -c. Currently user mode is only when installing from CD/NET, but not - from svn/DVD. Should this be fixed? - --------------------------------------------------------------------------- - -5. Changes to the infrastructure (those already known) --------------------------------- - -- texlive.tlpdb: - entries can now files without any leading texmf tree, but then the - package has to contain the "relocated 1" key/value pair -- TLPOBJ.pm: accept new key "relocated" -- tl-update-container: - . add cmd line option for $opt_relative - . adjust the tlpobj if the container was build relocatable so that - texmf-dist prefix is removed from the files -- TLUtils.pm - install_package(s): check for relocatable and adjust $target by - adding $RelocPrefix -- tlmgr.pl - too many to actually list them - ---------------------------------------------------------------------------- -np, last changed 2009-05-02 diff --git a/Master/tlpkg/dev/archive/dev.usermode-tlmgr.patch b/Master/tlpkg/dev/archive/dev.usermode-tlmgr.patch deleted file mode 100644 index 1ae6bbe98ed..00000000000 --- a/Master/tlpkg/dev/archive/dev.usermode-tlmgr.patch +++ /dev/null @@ -1,582 +0,0 @@ -Index: tlpkg/TeXLive/TLConfig.pm -=================================================================== ---- tlpkg/TeXLive/TLConfig.pm (revision 20263) -+++ tlpkg/TeXLive/TLConfig.pm (working copy) -@@ -173,7 +173,8 @@ - - our %TLPDBSettings = ( - "platform" => [ "s", "Main platform for this computer" ], -- "available_architectures" => [ "l", "All available/installed architectures" ] -+ "available_architectures" => [ "l", "All available/installed architectures" ], -+ "usertree" => [ "b", "This tree acts as user tree" ] - ); - - our $WindowsMainMenuName = "TeX Live $ReleaseYear"; -Index: tlpkg/TeXLive/TLMedia.pm -=================================================================== ---- tlpkg/TeXLive/TLMedia.pm (revision 20263) -+++ tlpkg/TeXLive/TLMedia.pm (working copy) -@@ -59,6 +59,8 @@ - } - if (-d "$location/texmf/web2c") { - $media = 'DVD'; -+ } elsif (-d "$location/web2c") { -+ $media = 'DVD'; - } elsif (-d "$location/$Archive") { - $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; -+ if ($reloc) { -+ if ($totlpdb->setting("usertree")) { -+ $tlpobj->cancel_reloc_prefix; -+ } else { -+ $tlpobj->replace_reloc_prefix; -+ } - $tlpobj->relocated(0); - } - # we have to write out the tlpobj file since it is contained in the -@@ -321,7 +327,11 @@ - } elsif ($what =~ m,\.tar(\.xz)?$,) { - my $type = defined($1) ? "xz" : "tar"; - -- $target .= "/$TeXLive::TLConfig::RelocTree" if $reloc; -+ if ($reloc) { -+ if (!$totlpdb->setting("usertree")) { -+ $target .= "/$TeXLive::TLConfig::RelocTree" if $reloc; -+ } -+ } - - # this is the case when we install from CD or the NET, or a backup - # -@@ -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 { -@@ -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 -+ - if ($tlp->relocated) { - for (@files) { -- s:^$RelocPrefix/:$RelocTree/:; -+ if (!$usertree) { -+ s:^$RelocPrefix/:$RelocTree/:; -+ } - } - } - # -Index: tlpkg/TeXLive/TLPOBJ.pm -=================================================================== ---- tlpkg/TeXLive/TLPOBJ.pm (revision 20263) -+++ tlpkg/TeXLive/TLPOBJ.pm (working copy) -@@ -473,6 +473,21 @@ - sub cancel_reloc_prefix { - my $self = shift; - my @docfiles = $self->docfiles; -+ for (@docfiles) { s:^$RelocPrefix/::; } -+ $self->docfiles(@docfiles); -+ my @runfiles = $self->runfiles; -+ for (@runfiles) { s:^$RelocPrefix/::; } -+ $self->runfiles(@runfiles); -+ my @srcfiles = $self->srcfiles; -+ for (@srcfiles) { s:^$RelocPrefix/::; } -+ $self->srcfiles(@srcfiles); -+ # if there are bin files they have definitely NOT the -+ # texmf-dist prefix, so we cannot cancel it anyway -+} -+ -+sub replace_reloc_prefix { -+ my $self = shift; -+ my @docfiles = $self->docfiles; - for (@docfiles) { s:^$RelocPrefix/:$RelocTree/:; } - $self->docfiles(@docfiles); - my @runfiles = $self->runfiles; -Index: tlpkg/TeXLive/TLUtils.pm -=================================================================== ---- tlpkg/TeXLive/TLUtils.pm (revision 20263) -+++ tlpkg/TeXLive/TLUtils.pm (working copy) -@@ -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) { -- $tlpobj->cancel_reloc_prefix; -+ $tlpobj->replace_reloc_prefix; - } - $totlpdb->add_tlpobj($tlpobj); - # we have to write out the tlpobj file since it is contained in the -Index: texmf/scripts/texlive/tlmgr.pl -=================================================================== ---- texmf/scripts/texlive/tlmgr.pl (revision 20263) -+++ texmf/scripts/texlive/tlmgr.pl (working copy) -@@ -128,6 +128,8 @@ - "persistent-downloads" => "!", - "no-execute-actions" => 1, - "pause" => 1, -+ "usermode" => 1, -+ "usertree" => "=s", - "print-platform|print-arch" => 1, - "version" => 1, - "help|h|?" => 1); -@@ -333,13 +335,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")) { -@@ -510,6 +529,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$/) { -@@ -573,6 +595,8 @@ - { - my $errors = 0; - -+ my $sysmode = ($opts{"usermode"} ? "" : "-sys"); -+ - if ($::files_changed) { - $errors += do_cmd_and_check("mktexlsr"); - $::files_changed = 0; -@@ -603,14 +627,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; - } - - -@@ -655,7 +679,7 @@ - # 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 --no-error-if-no-format --byengine $e"); -+ $errors += do_cmd_and_check("fmtutil$sysmode --no-error-if-no-format --byengine $e"); - } - # now rebuild all other formats - for my $f (keys %do_enable) { -@@ -663,7 +687,7 @@ - # ignore disabled formats - next if !$::execute_actions{'enable'}{'formats'}{$f}{'mode'}; - 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; - } - } -@@ -704,7 +728,7 @@ - } - 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"); - } - } - } -@@ -713,7 +737,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; - } -@@ -881,8 +905,13 @@ - # - sub action_paper { - 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 -@@ -894,7 +923,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); -@@ -902,7 +931,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 -@@ -919,7 +948,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); - } - } - -@@ -971,6 +1000,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" -@@ -1071,6 +1101,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("tlmgr: action path needs one argument, either add or remove\n"); -@@ -2078,7 +2112,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(); -@@ -2939,16 +2976,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"; -+ } - } - } - } -@@ -2961,7 +3000,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"}; -@@ -3029,6 +3068,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"; -@@ -3248,11 +3296,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 { -@@ -3285,6 +3333,10 @@ - warn("action `platform' not supported on Windows\n"); - return(); - } -+ if ($opts{"usermode"}) { -+ tlwarn("action `platform' not supported in usermode\n"); -+ exit 1; -+ } - my $what = shift @ARGV; - init_local_db(1); - info("platform: dry run, no changes will be made\n") if $opts{"dry-run"}; -@@ -3421,6 +3473,10 @@ - # GENERATE - # - sub action_generate { -+ if ($opts{"usermode"}) { -+ tlwarn("action `generate' not supported in usermode!\n"); -+ exit 1; -+ } - my $what = shift @ARGV; - init_local_db(); - -@@ -4284,6 +4340,35 @@ - } - } - -+# INIT USER TREE -+# sets up the user tree for tlmgr in user mode -+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"); -+} -+ - # CONF - # tries to mimic texconfig conf but can also set values for both tlmgr - # and texmf conf files. -@@ -4408,10 +4493,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)) { -@@ -4845,6 +4930,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"); -@@ -5017,6 +5103,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: -@@ -5923,7 +6018,110 @@ - C<updmap-local.cfg>, you need to run C<tlmgr generate updmap> yourself - after making any local changes. - -+ -+=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 CONFIGURATION FILE - - A small subset of the command line options can be set in a config file |