diff options
-rwxr-xr-x | Master/texmf/scripts/texlive/tlmgr.pl | 120 | ||||
-rw-r--r-- | Master/tlpkg/TeXLive/TLDownload.pm | 14 | ||||
-rw-r--r-- | Master/tlpkg/TeXLive/TLPDB.pm | 6 |
3 files changed, 77 insertions, 63 deletions
diff --git a/Master/texmf/scripts/texlive/tlmgr.pl b/Master/texmf/scripts/texlive/tlmgr.pl index 5480276ed5a..79c49b102f5 100755 --- a/Master/texmf/scripts/texlive/tlmgr.pl +++ b/Master/texmf/scripts/texlive/tlmgr.pl @@ -879,7 +879,8 @@ sub action_remove { # user that it is still needed # # remove all .ARCH dependencies, too, unless $opts{"no-depends-at-all"} - @packs = $localtlpdb->expand_dependencies("-only-arch", $localtlpdb, @packs) unless $opts{"no-depends-at-all"}; + @packs = $localtlpdb->expand_dependencies("-only-arch", $localtlpdb, @packs) + unless $opts{"no-depends-at-all"}; # remove deps unless $opts{"no-depends"} @packs = $localtlpdb->expand_dependencies("-no-collections", $localtlpdb, @packs) unless $opts{"no-depends"}; my %allpacks; @@ -920,7 +921,7 @@ sub action_remove { # into %already_removed. if ($tlp->category eq "Collection") { my $foo = 0; - info ("remove $pkg\n"); + info ("$prg: removing $pkg\n"); if (!$opts{"dry-run"}) { $foo = $localtlpdb->remove_package($pkg); logpackage("remove: $pkg"); @@ -935,13 +936,13 @@ sub action_remove { # be removed at the second state. Note that if a package has # already been removed due to a removal of a collection # it will be marked as such in %already_removed and not tried again - push @more_removal, $pkg; + push (@more_removal, $pkg); } } } foreach my $pkg (sort @more_removal) { if (!defined($already_removed{$pkg})) { - info ("remove $pkg\n"); + info ("$prg: removing package $pkg\n"); if (!$opts{"dry-run"}) { if ($localtlpdb->remove_package($pkg)) { # removal was successful @@ -958,7 +959,7 @@ sub action_remove { $localtlpdb->save; my @foo = sort keys %already_removed; if (@foo) { - info("tlmgr: actually removed these packages: @foo\n"); + info("tlmgr: ultimately removed these packages: @foo\n"); } else { info("tlmgr: no packages removed.\n"); } @@ -3508,8 +3509,8 @@ sub show_list_of_packages { # easier for people to use # tlmgr pinning show # tlmgr pinning check -# tlmgr pinning add <repo> <pkgglob> [<pkgglob>, ...] -# tlmgr pinning remove <repo> <pkgglob> [<pkgglob>, ...] +# tlmgr pinning add <repo> <pkgglob> [<pkgglob> ...] +# tlmgr pinning remove <repo> <pkgglob> [<pkgglob> ...] # tlmgr pinning remove <repo> --all sub action_pinning { my $what = shift @ARGV; @@ -3517,29 +3518,33 @@ sub action_pinning { init_local_db(); init_tlmedia_or_die(); if (!$remotetlpdb->is_virtual) { - tlwarn("tlmgr: not a virtual database, no pinning actions supported!\n"); + tlwarn("$prg: only one repository configured, " + . "pinning actions not supported.\n"); return; } my $pinref = $remotetlpdb->virtual_pindata(); my $pf = $remotetlpdb->virtual_pinning(); + if ($what =~ m/^show$/i) { my @pins = @$pinref; if (!@pins) { - tlwarn("No pinning data present by now.\n"); + tlwarn("$prg: no pinning data present.\n"); return 0; } - print "Defined pinning data:\n"; + info("$prg: this pinning data is defined:\n"); for my $p (@pins) { - print " ", $p->{'repo'}, ":", $p->{'glob'}, "\n"; + info(" ", $p->{'repo'}, ":", $p->{'glob'}, "\n"); } return 1; + } elsif ($what =~ m/^check$/i) { - tlwarn("Not implemented yet, sorry!\n"); + tlwarn("$prg: not implemented yet, sorry!\n"); return 0; + } elsif ($what =~ m/^add$/i) { # we need at least two more arguments - if ($#ARGV < 1) { - tlwarn("missing arguments to pinning add\n"); + if (@ARGV < 2) { + tlwarn("$prg: need at least two arguments to pinning add\n"); return; } my $repo = shift @ARGV; @@ -3548,37 +3553,40 @@ sub action_pinning { $pf->value($repo, @ov); $remotetlpdb->virtual_update_pins(); $pf->save; - info("Added/Updated pinning data for $repo\n"); + info("$prg: new pinning data for $repo: @ARGV\n"); return 1; + } elsif ($what =~ m/^remove$/i) { my $repo = shift @ARGV; if (!defined($repo)) { - tlwarn("missing arguments to pinning add\n"); + tlwarn("$prg: missing repository argument to pinning remove\n"); return 0; } if ($opts{'all'}) { - if ($#ARGV >= 0) { - tlwarn("no additional argument allowed when --all is given\n"); - return; + if (@ARGV) { + tlwarn("$prg: additional argument(s) not allowed with --all: @ARGV\n"); + return 0; } $pf->delete_key($repo); $remotetlpdb->virtual_update_pins(); $pf->save; + info("$prg: all pinning data removed for repository $repo\n"); return 1; } # complicated case, we want to remove only one setting my @ov = $pf->value($repo); my @nv; for my $pf (@ov) { - push @nv, $pf if (!member($pf, @ARGV)); + push (@nv, $pf) if (!member($pf, @ARGV)); } $pf->value($repo, @nv); $remotetlpdb->virtual_update_pins(); $pf->save; - info("Removed pinning data for $repo\n"); + info("$prg: removed pinning data for repository $repo: @ARGV\n"); return 1; + } else { - tlwarn("Unknown argument to pinning action: $what\n"); + tlwarn("$prg: unknown argument for pinning action: $what\n"); return 0; } # $pin{'repo'} = $repo; @@ -3784,7 +3792,7 @@ sub action_repository { return; } # we are still here, unknown command to repository - tlwarn("$prg: unknown directive to tlmgr repository: $what\n"); + tlwarn("$prg: unknown subaction for tlmgr repository: $what\n"); return; } @@ -5204,7 +5212,7 @@ sub init_local_db { sub init_tlmedia_or_die { my ($ret, $err) = init_tlmedia(); if (!$ret) { - tldie("$prg: $err"); + tldie("$prg: $err\n"); } } @@ -6487,7 +6495,7 @@ Shows the current pinning data. Pins the packages matching the I<pkgglob>(s) to the repository I<repo>. -=item C<pinning remove I<repo> I<pgkglob>... +=item C<pinning remove I<repo> I<pkgglob>... Any packages recorded in the pinning file matching the <pkgglob>s for the given repository I<repo> are removed. @@ -7032,23 +7040,25 @@ or should not be included in TeX Live, for whatever reason. The simplest and most reliable method is to temporarily set the installation source to any repository (with the C<-repository> or C<option repository> command line options), and perform your operations. + When you are using multiple repositories over a sustained time, however, -this is inconvenient. Thus, it's possible to tell C<tlmgr> about -additional repositories you want to use. The basic command is C<tlmgr -repository add>. The rest of this section explains further. +explicitly switching between them becomes inconvenient. Thus, it's +possible to tell C<tlmgr> about additional repositories you want to use. +The basic command is C<tlmgr repository add>. The rest of this section +explains further. When using multiple repositories, one of them has to be set as the main -repository, which distributes most of the installed packages. If you +repository, which distributes most of the installed packages. When you switch from a single repository installation to a multiple repository -installation, the previously set repository will be set as the main +installation, the previous sole repository will be set as the main repository. By default, even if multiple repositories are configured, packages are -still I<only> installed from the main repository. Thus, simply adding a -second repository does not actually enable installation of anything from -there. You also have to specify which packages should be taken from a -different repository by specifying so-called ``pinning'' rules, -described next. +I<still> I<only> installed from the main repository. Thus, simply +adding a second repository does not actually enable installation of +anything from there. You also have to specify which packages should be +taken from the new repository, by specifying so-called ``pinning'' +rules, described next. =head2 Pinning @@ -7056,12 +7066,9 @@ When a package C<foo> is pinned to a repository, a package C<foo> in any other repository, even if it has a higher revision number, will not be considered an installable candidate. -By default, everything is pinned to the main repository, -as if the last line of C<pinning.txt> was - - main:* - -=head2 Multiple repository example with tlcontrib +As mentioned above, by default everything is pinned to the main +repository. Let's now go through an example of setting up a second +repository and enabling updates of a package from it. First, check that we have support for multiple repositories, and have only one enabled (as is the case by default): @@ -7070,8 +7077,9 @@ only one enabled (as is the case by default): List of repositories (with tags if set): /var/www/norbert/tlnet -Let's add the C<tlcontrib> repository (L<http://tlcontrib.metatex.org>, -maintained by Taco Hoekwater et al.), with the tag C<tlcontrib>: +Ok. Let's add the C<tlcontrib> repository (this is a real +repository, hosted at L<http://tlcontrib.metatex.org>, maintained by +Taco Hoekwater et al.), with the tag C<tlcontrib>: $ tlmgr repository add http://tlcontrib.metatex.org/2012 tlcontrib @@ -7082,32 +7090,38 @@ Check the repository list again: http://tlcontrib.metatex.org/2012 (tlcontrib) /var/www/norbert/tlnet (main) -Specify a pinning entry to get the package C<context> from C<tlcontrib>: +Now we specify a pinning entry to get the package C<context> from +C<tlcontrib>: - $ tlocal=`kpsewhich -var-value TEXMFLOCAL` - $ echo "tlcontrib:context" > $tlocal/tlpkg/pinning.txt + $ tlmgr pinning add tlcontrib context Check that we can find C<context>: - $ tlmgr show microtype - tlmgr: using pinning file .../tlpkg/pinning.txt + $ tlmgr show context tlmgr: package repositories: ... - package: microtype - category: Package + package: context + repository: tlcontrib/26867 ... - install C<context>: $ tlmgr install context - tlmgr: using pinning file .../tlpkg/pinning.txt tlmgr: package repositories: ... - [1/1, ??:??/??:??] install: context @tlcontrib [39k] + [1/1, ??:??/??:??] install: context @tlcontrib [ -In the output here you can see that the C<context> package is now +In the output here you can see that the C<context> package has been installed from the C<tlcontrib> repository (C<@tlcontrib>). +Finally, C<tlmgr pinning> also supports removing certain or all packages +from a given repository: + + $ tlmgr pinning remove tlcontrib context # remove just context + $ tlmgr pinning remove tlcontrib --all # take nothing from tlcontrib + +A summary of the C<tlmgr pinning> actions is given above. + =head1 GUI FOR TLMGR diff --git a/Master/tlpkg/TeXLive/TLDownload.pm b/Master/tlpkg/TeXLive/TLDownload.pm index 15c10cb964b..d1528d89768 100644 --- a/Master/tlpkg/TeXLive/TLDownload.pm +++ b/Master/tlpkg/TeXLive/TLDownload.pm @@ -101,14 +101,14 @@ sub decr_errorcount return($self->errorcount(0)); } } -sub reset_errorcount -{ + +sub reset_errorcount { my $self = shift; $self->{'errorcount'} = 0; } -sub get_file -{ - my ($self, $url, $out, $size) = @_; + +sub get_file { + my ($self,$url,$out,$size) = @_; # # automatically disable if error count is getting too big if ($self->errorcount > $MAX_ERRORCOUNT) { @@ -134,8 +134,8 @@ sub get_file return $outfh; } } else { - tlwarn("TLDownload::get_file: response error:\n"); - tlwarn(" " . $response->status_line . "\n"); + tlwarn("TLDownload::get_file: response error: " + . $response->status_line . " (for $url)\n"); $self->incr_errorcount; return; } diff --git a/Master/tlpkg/TeXLive/TLPDB.pm b/Master/tlpkg/TeXLive/TLPDB.pm index 7321df9533b..4abb1561977 100644 --- a/Master/tlpkg/TeXLive/TLPDB.pm +++ b/Master/tlpkg/TeXLive/TLPDB.pm @@ -2504,9 +2504,9 @@ sub check_evaluate_pinning { # check that all pinning lines where hit for my $p (@pins) { next if defined($p->{'hit'}); - tlwarn("pinning warning: the entry in line\n ", $p->{'line'}, - "\nconcerning the package pattern ", $p->{'glob'}, - "\nis not matched by any package!\n"); + tlwarn("tlmgr: pinning warning: the package pattern ", $p->{'glob'}, + " on the line:\n ", $p->{'line'}, + "\n does not match any package\n"); } } |