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]
>
>
>
>