[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#420836: [tex-live] Patch for "texdoc -s" to use the ls-R database



On 5/25/07, Frank Küster <frank@kuesterei.ch> wrote:

Hi all,

with teTeX, I've been using "texdoc -s" a lot.  With a full texlive
install, this is hardly usable, because it runs "find" over all
$TEXMF/doc trees, which takes ages.  Of course if you use it a second
time, it's much faster as long as the directories are cached, but you
never want to use it the first time, not with utilities like "locate"
present on your system.

I not sure what you mean.  Your script just looks in the last
texmf-tree.  The reason for using TEXDOCS is to ensure that
all the $TEXMF/doc trees are searched.

Unfortunately, kpsewhich --expand-path='$TEXDOCS'
gives directories under the top-level "doc" directory.

I suggest that "texdoc -s" should use the ls-R database, just as usual
texdoc does.  It's hard, however, to get the exactly same result as the
current behavior only with shell scripting, because of the format of the
ls-R database.  The approach I took was to search for directories that
match first (that makes long listings more readable, anyway), and for
non-directory files afterwards.

The attached patch does that, except that I don't know whether

tree=${database%ls-R}

is portable (would have to use echo | sed instead).

Comments?

I like that it lists the directories (I've been using a version hacked
to add a "-d" option that only looks for directories).

The loop to construct lsR_files:

     OLDIFS=$IFS
     IFS=':'
     for path in `kpsewhich --expand-path='$TEXMF'`; do
      lsR_files=$(eval TEXMFDBS=\$path kpsewhich ls-R)
     done
     IFS=$OLDIFS

saves only the last one.  Do you want to exclude the other
trees, or did you mean:

      lsR_files="$lsR_files $(env TEXMFDBS=$path kpsewhich ls-R)"

There are still performance problems.  Try to find the latin modern
docs:

"texdoc -s lmodern" doesn't help, but "texdoc -s lm" takes much too
long because the last kpathsea search is run for every lm*.tfm file!

What is needed is a way to select only the shortest prefixes from
"kpsewhich --expand-path='$TEXDOCS'" so that find isn't searching
the same places over and over:

$ kpsewhich --expand-path='$TEXDOCS' | tr ':' ' ' | wc
     1    1630  110497


--
George N. White III <aa056@chebucto.ns.ca>
Head of St. Margarets Bay, Nova Scotia



Reply to: