summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <preining@logic.at>2024-04-24 12:09:11 +0000
committerNorbert Preining <preining@logic.at>2024-04-24 12:09:11 +0000
commitfc6726a875a4e250c0ed24bb91eff6952e99b8fb (patch)
treec2219244d29981491a593416a277e9987e77eba6
parent077a0be4f7b6a200df25e6b56f81467c867be744 (diff)
tlmgr search: support --json
git-svn-id: svn://tug.org/texlive/trunk@71056 c570f23f-e606-0410-a88d-b1316a301751
-rwxr-xr-xMaster/texmf-dist/scripts/texlive/tlmgr.pl45
1 files changed, 35 insertions, 10 deletions
diff --git a/Master/texmf-dist/scripts/texlive/tlmgr.pl b/Master/texmf-dist/scripts/texlive/tlmgr.pl
index d24047b077a..fdc7b9c8055 100755
--- a/Master/texmf-dist/scripts/texlive/tlmgr.pl
+++ b/Master/texmf-dist/scripts/texlive/tlmgr.pl
@@ -1843,13 +1843,29 @@ sub action_search {
$tlpdb = $localtlpdb;
}
- my ($foundfile, $founddesc) = search_tlpdb($tlpdb, $r,
+ my $ret = search_tlpdb($tlpdb, $r,
$opts{'file'} || $opts{'all'},
(!$opts{'file'} || $opts{'all'}),
$opts{'word'});
-
- print $founddesc;
- print $foundfile;
+
+ if ($opts{'json'}) {
+ my $json = TeXLive::TLUtils::encode_json($ret);
+ print($json);
+ } else {
+ my $retfile = '';
+ my $retdesc = '';
+ for my $pkg (sort keys %{$ret->{"packages"}}) {
+ $retdesc .= "$pkg - " . $ret->{"packages"}{$pkg} . "\n";
+ }
+ for my $pkg (sort keys %{$ret->{"files"}}) {
+ $retfile .= "$pkg:\n";
+ for my $f (@{$ret->{"files"}{$pkg}}) {
+ $retfile .= "\t$f\n";
+ }
+ }
+ print ($retdesc);
+ print ($retfile);
+ }
return ($F_OK | $F_NOPOSTACTION);
}
@@ -1896,20 +1912,24 @@ sub search_tlpdb {
# first report on $pkg - $shortdesc found
my $retfile = '';
my $retdesc = '';
+ my %ret = ( "packages" => {}, "files" => {} );
for my $pkg (sort keys %$fndptr) {
if ($fndptr->{$pkg}{'desc'}) {
- $retdesc .= "$pkg - " . $fndptr->{$pkg}{'desc'} . "\n";
+ $ret{"packages"}{$pkg} = $fndptr->{$pkg}{'desc'};
}
}
for my $pkg (sort keys %$fndptr) {
if ($fndptr->{$pkg}{'files'}) {
- $retfile .= "$pkg:\n";
- for my $f (keys %{$fndptr->{$pkg}{'files'}}) {
- $retfile .= "\t$f\n";
- }
+ $ret{"files"}{$pkg} = [ keys %{$fndptr->{$pkg}{'files'}} ];
}
}
- return($retfile, $retdesc);
+ # {
+ # require Data::Dumper;
+ # print Data::Dumper->Dump([\%retjson], [qw(retjson)]);
+ # my $json = TeXLive::TLUtils::encode_json(\%retjson);
+ # print($json);
+ # }
+ return (\%ret);
}
sub search_pkg_files {
@@ -9467,6 +9487,11 @@ filenames) to match only full words. For example, searching for
C<table> with this option will not output packages containing the word
C<tables> (unless they also contain the word C<table> on its own).
+=item B<--json>
+
+Output search results as json hash with two keys: B<files> and B<packages>.
+
+
=back
=back