#!/usr/bin/perl -w -s use strict; use Tie::Cvs; our ($v); sub bchmod{ my $p=shift or die("usage: chmod base:file [user:group]"); my $ug=shift || "apache.cvs"; my $base; if($p =~ m/([^:]*):(.*)/){ $base="/breviario/$1"; $p=$2 } else { $base="/breviario/$p"; $p="" } my $new = ! -d "$base.co"; if($new){ die("base not found\n")} elsif($p){ psys("cd $base.co; chown $ug $p the::$p; chmod ug+rw $p the::$p") } else { psys("cd $base.co; chown -R $ug .; find . -type d -exec chmod 2775 {} \\; ; find . -type f -exec chmod ug+rw {} \\; ") } } sub psys{ print ($_[0]) if $v; die("Erro em $_[0]:$!\n") if system ("$_[0]"); } sub bcp{ my ($base1 , $base2); my $p1 = shift; my $p2 = shift or die "usage: cp origin destiny\n"; my ($f1,$f2,$t1,$t2); if($p1 =~ m/^([^:]*):([^:].*)$/){ $base1="/breviario/$1.co"; $p1=Tie::Cvs::norm($2); $f1="$base1/$p1"; $t1="$base1/the::$p1"} else { $base1=""; $f1 = $p1; $t1 = "";} if($p2 =~ m/^([^:]*):([^:].*)$/){ $base2="/breviario/$1.co"; $p2=Tie::Cvs::norm($2); $f2="$base2/$p2"; $t2="$base2/the::$p2"} else { $base2=""; $f2 = $p2; $t2 = "";} my $exist = -f $f1 or die("can find $base1/$p1\n"); my $old = -f $f2; psys("cp $f1 $f2") ; psys("cp $t1 $t2") if ($t1 and $t2) ; if($base2){ if($old){ psys("cd $base2; cvs update $p2; cvs ci -m 'bcp' $p2"); psys("cd $base2; cvs update the::$p2; cvs ci -m 'bcp' the::$p2")if($base1)} else { psys("cd $base2; cvs add $p2; cvs ci -m 'bcp' $p2"); psys("cd $base2; cvs add the::$p2; cvs ci -m 'bcp' the::$p2") if $base1} } } sub bvi{ my $base; my $p=shift or die("usage: brecom vi base:file\n"); if($p =~ m/([^:]*):(.*)/){ $base="/breviario/$1"; } else { $base="/breviario/breviario"; } $p=Tie::Cvs::norm($2); my $new = ! -f "$base.co/$p"; psys("vi $base.co/$p"); if($new){ psys("cd $base.co; cvs add $p; cvs ci -m 'editado por bvi' $p")} else { psys("cd $base.co; cvs update $p; cvs ci -m 'editado por bvi' $p")} } sub bnew{ my $p=shift or die("usage: new base"); psys("breviario -create $p"); bchmod($p); } sub bls{ my $p=shift or die("usage: ls base[:patt]"); my $base; if($p =~ m/([^:]*):(.*)/){ $base="/breviario/$1"; $p=$2 } else { $base="/breviario/$p"; $p="" } psys("cd $base.co; ls $p| grep -v 'the::'"); } sub brm{ my $base; my $p=shift or die("usage: brm base:file"); if($p =~ m/([^:]*):(.*)/){ $base="/breviario/$1"; $p=$2 } else { $base="/breviario/breviario"; } $p=Tie::Cvs::norm($p); my $new = ! -f "$base.co/$p"; psys("rm $base.co/$p"); psys("rm $base.co/the::$p"); if($new){ warn("File not found\n")} else { psys("cd $base.co; cvs delete $p the::$p; cvs ci -m 'deleted by brm' $p the::$p")} } my $command= shift or die ("usage: brevcom cp file base:file brevcom new base brevcom cp base1:file1 base2:file2 brevcom chmod file base:file brevcom vi base:file brevcom rm base:file brevcom ls base[:patt] options: -v -- shows the executed shell commands\n"); bvi(@ARGV) if $command eq "vi"; bchmod(@ARGV) if $command eq "chmod"; bcp(@ARGV) if $command eq "cp"; brm(@ARGV) if $command eq "rm"; bls(@ARGV) if $command eq "ls"; bnew(@ARGV) if $command eq "new"; __END__ =head1 NAME brevcom - execute unix like commands over breviario topics =head1 SYNOPSIS brevcom cp file base:file brevcom cp base1:file1 base2:file2 brevcom chmod file base:file brevcom vi base:file brevcom rm base:file brevcom ls base[:patt] options: -v -- shows the executed shell commands =head1 DESCRIPTION cp - copy file from breviário or filesystem =head2 EXPORT =head1 AUTHOR J.Joao Almeida, jj@di.uminho.pt =head1 SEE ALSO perl(1). breviario =cut