# Rsync.pm
# Author: Noah Friedman <friedman@splode.com>
# Created: 1996-06-17
# Public domain.

# $Id: Rsync.pm,v 1.1 2000/03/01 09:51:08 friedman Exp $

# Commentary:
# Code:

package NF::Rsync;

use NF::Pipeline;
use strict;

use Exporter;
use vars qw($VERSION @ISA @EXPORT);
$VERSION     = 1.00;
@ISA         = qw(Exporter);
@EXPORT      = qw(pipeline
                  pipeline_exitlist
                  rsync
                  rsync_mirror
                  rsync_finish
                  $rsync_program
                  $rsync_io_timeout
                  $rsync_verbose
                  @rsync_global_flags
                  @rsync_mirror_flags);


use vars qw($rsync_program $rsync_io_timeout $rsync_verbose $rsync_recursive);
use vars qw(@rsync_global_flags @rsync_mirror_flags);

$rsync_program    = "rsync";
$rsync_io_timeout = 300;
$rsync_verbose    = 0;
$rsync_recursive  = 0;

@rsync_global_flags =
  ("--rsync-path=/usr/local/bin/rsync");

@rsync_mirror_flags =
  ("--devices",
   "--force",
   "--group",
   "--hard-links",
   "--links",
   "--owner",
   "--perms",
   "--sparse",
   "--times");


sub rsync
{
  my @verbose;
  push (@verbose, "--verbose") if ($rsync_verbose > 0);
  push (@verbose, "--quiet")   if ($rsync_verbose < 0);

  pipeline ($rsync_program,
            @verbose,
            "--timeout=" . $rsync_io_timeout,
            @rsync_global_flags,
            @_);
}

sub rsync_mirror
{
  rsync (@rsync_mirror_flags, @_);
}

sub rsync_finish ($;$)
{
  my $cmd = shift;
  my $waitp = shift;
  close ($cmd->{inhandle})  if (exists $cmd->{inhandle});
  close ($cmd->{outhandle}) if (exists $cmd->{outhandle});
  pipeline_exitlist ($cmd, $waitp);  # call wait on terminated processes
}

1;
