#!/usr/bin/perl #機能 # CVS作業領域とCVSリポジトリの同期を取る。 # リポジトリに存在し、CVS作業領域に存在しないファイルをリポジトリからremoveする。 # CVS作業領域に存在し、リポジトリに存在しないファイルをリポジトリにaddする。 # CVS作業領域の全ファイル及び上記結果に対してcommitする。 #注意事項 # 対象のリポジトリは、複数のメンバによって共有されていないものとする。 # #使い方 # パラメータ1:オプション(F:実行) # パラメータ2:CVSリポジトリ(フルパス) # パラメータ3:CVS作業領域 (フルパス) #パラメータ取得 $option = $ARGV[0]; $cvsrepo = $ARGV[1]; $cvswork = $ARGV[2]; #パラメータチェック if (($option eq "F")) {} else { print("parm1 is F. parm1=$option\n"); exit 8; } if (-d $cvsrepo) {} else { print("parm2 is not directry. parm2=$cvsrepo\n"); exit 8; } if (-d $cvswork) {} else { print("parm3 is not directry. parm3=$cvswork\n"); exit 8; } #同期開始 print "Sync CVS start ==========\n"; print "Sync CVS add and remove ==========\n"; addremove ($cvsrepo,$cvswork); #追加・削除・更新のcommit print "Sync CVS commit ==========\n"; $rcd = commit ($cvsrepo,$cvswork); #空ディレクトリ削除 if ($rcd == 0) { print "Sync CVS empty directry remove ==========\n"; update ($cvsrepo,$cvswork); } #同期終了 print "Sync CVS end ==========\n"; ########################## sub addremove { my($cvsrepo) = $_[0]; my($cvswork) = $_[1]; my($addctr) = 1; my($rcd) = 0; my($updatecom) = "cvs -n -d ".$cvsrepo." update -R \"".$cvswork."\""; while ($addctr != 0) { $addctr = 0; open (CVSS, $updatecom." |"); while ($cvssline=) { if ($cvssline =~/^\? +(.*)$/) { $addctr = $addctr +1; $rcd = addfile ($cvsrepo,$1); if ($rcd > 0){return $rcd;} } if ($cvssline =~/^U +(.*)$/) { $rcd = removefile ($cvsrepo,$1); if ($rcd > 0){return $rcd;} } } close (CVSS); } return $rcd; } sub addfile { my($cvsrepo) = $_[0]; my($cvswork) = $_[1]; my($rcd) = 0; my($cvscommand)="cvs -d \"".$cvsrepo."\" add -m'auto' \"".$cvswork."\""; print "#",$cvscommand,"\n"; $rcd = system ($cvscommand); if ( $rcd > 0 ) { print "#SCC0001-E"," operation error rcd=",$rcd,"\n"; } return $rcd; } sub removefile { my($cvsrepo) = $_[0]; my($cvswork) = $_[1]; my($rcd) = 0; my($cvscommand)="cvs -d \"".$cvsrepo."\" remove \"".$cvswork."\""; print "#",$cvscommand,"\n"; $rcd = system ($cvscommand); if ( $rcd > 0 ) { print "#SCC0002-E"," operation error rcd=",$rcd,"\n"; } return $rcd; } sub commit { my($cvsrepo) = $_[0]; my($cvswork) = $_[1]; my($rcd) = 0; my($cvscommand)="cvs -d \"".$cvsrepo."\" commit -m'auto' \"".$cvswork."\""; print "#",$cvscommand,"\n"; $rcd = system ($cvscommand); if ( $rcd > 0 ) { print "#SCC0003-E"," operation error rcd=",$rcd,"\n"; } return $rcd; } sub update { my($cvsrepo) = $_[0]; my($cvswork) = $_[1]; my($rcd) = 0; my($cvscommand) = "cvs -d \"".$cvsrepo."\" update -P -R \"".$cvswork."\""; print "#",$cvscommand,"\n"; $rcd = system ($cvscommand); if ( $rcd > 0 ) { print "#SCC0004-E"," operation error rcd=",$rcd,"\n"; } return $rcd; } ##########################