On Fri, Jan 04, 2002 at 03:56:51AM -0800, David Muir Sharnoff wrote:
> 
> Hi.  I've got two additional modules to that are ready or
> nearly ready... 
> 
> The first recevies mail via SMTP.  It doesn't implement all
> the various SMTP extensions, but it works well enough to 
> receive mail from sendmail.  It queues the mail it receives.
> Delivery of the mail received is left as an exercise for
> the reader and is accomplished by subclassing 
> Net::SMTP::Receive.  This module is working in production
> but has not yet been packaged for distribution.
> 
> The second module parses rdist distfile and can emulate
> rdist using rsync.  This module is all ready to go.  I
> enclose the README.
> 
> I would like both modules listed in The Module List so I'm
> looking for apporval of the names:
> 
>       Net::SMTP::Receive
>       Text::ParseRdist

Text::* isn't where I'd expect to find a module for parsing rdist distfiles.

Perhaps a ParseConfig:: category would be a useful addition

        ParseConfig::Rdist

Tim.

> Thanks,
> 
> -Dave
> 
> 
> NAME
>     Text::ParseRdist - read rdist distfiles, emulate using rsync
> 
> SYNOPSIS
>             use Text::ParseRdist
> 
>             @dist_blocks = parse_rdist($distfile, %options)
> 
>             ($args, $extras, @dist_blocks) = rdist(@ARGV);
> 
>             rsync(@ARGV)
> 
>             perl -MText::ParseRdist -e 'rsync(qw/rdist command flags/)'
> 
> DESCRIPTION
>     Text::ParseRdist parses and understands rdist distfiles and command lines.
> 
>     It can share it's understanding by returning what it got (`parse_rdist()' and 
>`rdist()') or
>     it can attempt to emulate rdist using rsync.
> 
>     Why?
> 
>     Well, because rdist is so slow it's unusable and rsync has such a limited 
>interface that
>     it's unusable. I'm sure a better specification language than rdist's could be 
>developed,
>     but rdist's language already exists so I used it to drive rsync.
> 
> WARNING
>     As of this writing, this code is still green. Use the `-D' `-n' and `-v' options 
>and look
>     at the output. Look carefully. If it looks good, then try running it for real. 
>If it
>     deletes all your files, then you didn't look carefully enough. Don't blame me. 
>See the
>     LICENSE.
> 
> DATA STRUCTURE
>     The main return value from rdist is an array of distribution blocks.
> 
>     They look like:
> 
>             {
>                     HOSTS           => [ host1 user@host2 host3 etc...],
>                     FILES           => [ /etc/rc.* /etc/hosts /usr etc...],
>                     EXCEPT          => [
>                             # tuples of type & file
>                             EXCEPT_PAT      /etc/p.*d       # regular expression
>                             EXCEPT          /etc/rc.local   # glob
>                             RSYNC_EXCLUDE   /etc/rc.loc*    # glob-style pattern 
>exclusions
>                             RSYNC_INCLUDE   /etc/rc.*       # glob-style pattern 
>inclusions
>                     ]
>                     SPECIAL         => [
>                                 {
>                                     FILES   => /etc/login.conf      # glob okay
>                                     COMMAND => "cap_mkdb $FILE"     # a command to 
>run
>                                 },
>                                 {
>                                     FILES   => /etc/named.conf      # glob okay
>                                     COMMAND => "ndc reload"         # a command to 
>run
>                                 },
>                             ]
>                     RSYNC_OPTION    => [ --dry-run --verbose ]
>                     INSTALL         => [
>                                 {
>                                     DESTINATION => /usr             # where to 
>install
>                                     FLAGS       => {
>                                             R => 1,                 # remove extra
>                                             w => 1,                 # append whole 
>path
>                                     }
>                                 }
>                     TSFILE          => /some/file                   # touch file name
>             }
> 
> DETAILS
>             @dist_blocks = parse_rdist($distfile, %options)
> 
>     There is one "dist_block" for each `"::"' or `"-'"> entry in the distfile.
> 
>     The options supported by parse_rdist are DEFINES => {} which override variable 
>definitions
>     made in the distfile and TARGETS => [] which filters the results so that entries 
>that don't
>     match label targets (if any match) and files that don't match file targets are 
>removed.
> 
>             ($args, $extras, @dist_blocks) = rdist(@ARGV);
> 
>     $args comes from Getopt::Declare. See the grammer inside Text::ParseRdist for 
>full details,
>     but basically `$args-'{'-y'}> is true if `@ARGV' contained `'-y''.
> 
>     $extras is a hash of a few items that are sometimes useful. $extras->{HOSTS} is 
>the list of
>     hosts specified with the `'-m'' option. $extras->{DEFINES} is a hash of `'-d'' 
>variable
>     definitions. $extras->{RSYNCOPT} is a list of rsync options specified in @ARGV. 
>$extra-
>     >{TARGETS} is a list of distfile entries (by label) or filenames given in @ARGV 
>to limit
>     the scope of the invocation. $extra->{CFLAG} is a dist_block created if there is 
>a command-
>     line style distfile.
> 
>             rsync(@ARGV)
> 
>     The rsync() function does the whole job.
> 
> COMPATABILITY
>     All rdist switches except `-i' are honored. The output is quite different from 
>rdist.
>     Multiple invocations of rsync can be required to do a single rdist.
> 
>     Two features of rdist are currently ignored: email notification and timestamp 
>checking with
>     `"::"' productions.
> 
>     There are some additional features that are useful when using rsync().
> 
>     First, the long-form of rsync command line arguments are noticed by rdist() and 
>used by
>     rsync().
> 
>     Second, in the "->" productions, three new commands are available:
> 
>             'rsync_options' <options> ';'
>             'rsync_include' <name list> ';'
>             'rsync_exclude' <name list> ';'
> 
>     Rsync_options will be passed to any rsync commands called by rsync() that 
>operate on the
>     block in question.
> 
>     Rsync_include and rsync_exclude will be passed to rsync with "- " prepended for 
>the
>     excludes and "+ " prepended for the includes. When building rsync exclusion 
>lists, the
>     order of the 'rsync_include', 'rsync_exclude', 'except', and 'except_pat' are 
>taken into
>     account and preserved.
> 
> LICENSE
>     Copyright (C) 2002 David Muir Sharnoff. License hereby granted for anyone to 
>use, modify or
>     redistribute this module at their own risk. Use of this module consitutes an 
>agreement to
>     indemnify and hold harmless the author(s) for whatever might happen when using 
>this code.
>     Please feed useful changes back to [EMAIL PROTECTED]
> 
> 
> 
> 

Reply via email to