gnu-system-discuss
[Top][All Lists]
Advanced

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

Re: info-dir translator


From: Ben Asselstine
Subject: Re: info-dir translator
Date: Fri, 22 Jul 2005 19:26:51 -0400

Hi again,

All of this presumes that an info-dir translator is in fact a good idea.
Why put install-info functionality into a translator so that a package
installer doesn't have to run it explicitly?

When we run install-info implicitly through a translator, we have to
wait for filesystem notifications and then do the computation of
updating `dir'.
When executed explicity, it just does the install-info computation and exits.

Is the switch from explicit to implicit worth the extra cpu cycles? 
Does it reduce the complexity of a package installer?  What's the
benefit and how much do we gain?

Ben

On 7/22/05, Ben Asselstine <address@hidden> wrote:
> Hey folks,
> 
> Here's the start of a document that explains what an info-dir
> translator is, and how (in general terms) it might be implemented.
> 
> Ben
> 
> --
> 
> The info-dir translator
> 
>   Currently we need to run install-info on new info files so that they get
>   included into the `info' program's top-level table of contents.  This
>   document describes a translator for the Hurd that will automatically keep
>   the top-level table of contents up to date by reflecting which info files 
> are
>   installed in /share/info.
> 
>   The translator almost always sits on /share/info/dir.
>   It watches a directory and any other dirs below it for file notifications.
>   The directory it watches is a translator parameter.  This value is almost
>   always /share/info.
> 
>   The translator changes the underlying file to contain the info dir file, so
>   that when `info' runs, it shows the table of contents.
> 
>   The translator makes heavy use of install-info (from the texinfo source),
>   to know how to install and uninstall info pages.
> 
> 
> How the translator would install an info file:
> 
>   Whenever a new file arrives, it runs the equivalent of:
>     install-info --quiet --info-file=/share/info/yorick.info.gz
> --info-dir=/share/info
> 
>   Now the info file must contain something like:
>     (install-info already expects this)
> 
>   INFO-DIR-SECTION Miscellaneous
>   START-INFO-DIR-ENTRY
>   * Yorick: (yorick).       Yorick interpreted language.
>   END-INFO-DIR-ENTRY
> 
>   The info-file IS the newly arrived file.
>   The info-dir is the parent dir of where our translating `dir' file sits.
> 
>   Watch out, a newly arrived file could be our own `dir' file.
> 
>   It's important to safely fall-through (eg. not crash on) non-info files.
> 
> 
> How the translator would uninstall an info file:
> 
>   When a file leaves /share/info/*, it runs the equivalent of:
>     install-info --quiet --remove
> --info-file=/share/info/yorick.info.gz --info-dir=/share/info
> 
> How the translator would monitor many dirs:
> 
>   Whenever a new dir shows up, we monitor that one too.
> 
> Implementation details:
> 
>   There's a locking issue here.
>   We have to P() on changing the underlying the /share/info/dir file.
> 
>   It's not a good idea for a translator to have to know where it's sitting, 
> and
>   that exactly what the --info-dir option in install-info implies.
>   Change it to pass down an open port for the info-dir file.
> 
> Usage examples:
> 
>   to run info-dir we run the following comamand:
> 
>     $ settrans -a /share/info/dir /hurd/info-dir /share/info
> 
>     /share/info/dir is the table of contents you see when you start up
>     `info' without any options.
>     /share/info is the name of the directory that we're monitoring.
>     again, we're monitoring that directory, and all dirs underneath it.
>     we do not assume that our dir file is /share/info/dir.
> 
>   installing an info page:
> 
>     $ cp /tmp/yorick.info.gz /share/info/
>     now when we copy yorick.info.gz into /share/info, the
>     /share/info/dir file gets updated automatically by the translator.  If
>     we were to copy a bunch of files into /share/info at the same time, it
>     would update `dir' in sequence with locking.
> 
>   uninstalling an info page:
> 
>     $ rm /share/info/yorick.info.gz
>     The translator notices that yorick.info.gz has gone away and then updates
>     `dir' to reflect this.
> 
>   to stop the info-dir translator we run the following command:
> 
>     settrans -fgap /share/info/dir
> 
>     the translator stops, but the /share/info/dir file is still all there.
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]