#!/usr/bin/perl
require "prcs-parse.pl";
use Getopt::Std;
getopts('vd:r:');
$|=1;

if ($opt_d) { $host=$opt_d; 
  $precommand="rsh $host"; 
}
else { $host="localhost"; 
  $precommand="";
}

$command=shift @ARGV;
if ( $command ne "info" ) {
  die "No project file present" unless ($project, $version)=&get_default_project; }
$version=$opt_r if $opt_r;

if ( $command eq "checkout" || $command eq "co" ) { &checkout; }
elsif ( $command eq "checkin" || $command eq "ci" ) { &checkin; }
elsif ( $command eq "update" ) { &update; }
elsif ( $command eq "info" ) { &info; }
elsif ( $command eq "check" ) { &check; }
elsif ( $command eq "history" ) { &history; }
else { system("$precommand prcs $command @ARGV"); }

sub checkout { 
  my $dir="spool/$project$version";
  if ( $version eq "" ) {
    print "$precommand \"rmdir -rf $dir; mkdir -p $dir; cd $dir; prcs checkout -f $project @ARGV\"\n"; 
    system("$precommand \"rmdir -rf $dir; mkdir -p $dir; cd $dir; prcs checkout -f $project @ARGV\""); }
  else { 
    print "$precommand \"rm -rf $dir; mkdir -p $dir; cd $dir; prcs checkout -f -r $version $project @ARGV\"\n"; 
    system("$precommand \"rm -rf $dir; mkdir -p $dir; cd $dir; prcs checkout -f -r $version $project @ARGV\""); }
  sync("$host:$dir/", ".", 0);
}

sub checkin { 
  sync(".", "$host:spool/$project$version/", 0);
  print "$precommand \"cd spool/$project$version; prcs checkin -f -r $version $project\"\n";
  system("$precommand \"cd spool/$project$version; prcs checkin -f -r $version $project\"");
}

sub update { }

sub check { 
  system("prcs-check -d $host -r $version $project");
}

sub info { 
  if ( $opt_v ) { system("$precommand prcs-info -v $project"); }
  else { system("$precommand prcs-info $project"); }
}

sub history { system("$precommand prcs-history @ARGV"); }

sub sync {
  my ($from, $to, $force_overwrite)=@_;
  if ($force_overwrite) { 
    print "rsync -avzb $from $to\n";
    system("rsync -avzb $from $to"); }
  else { 
    print "rsync -avuzb $from $to\n"; 
    system("rsync -avuzb $from $to"); }
}
