I'm sending you the slightly improved code for keeping a checked out copy,
using loginfo and autoexport filter, based on code from CVS Infopages,
http://www.cvshome.org/dev/text2/sklar
CVSROOT/loginfo has something like
DEFAULT (cat > /tmp/cvs.exp.$USER 2>&1; (sleep 2; \
/www/webpage_update.pl %{sVv} < /tmp/cvs.exp.$USER) &)
The tempfile and "sleep 2" is to avoid lock-contention issues, as in the
original article. ATTENTION: there is %{sVv} instead of %s!
P.S. I'm novice in Perl, so please excuse my lack of programming skills.
This script is by no means complete, and it needs improving.
See also the patch submitted to info-cvs list by
Gianni Mariani <[EMAIL PROTECTED]>.
P.P.S. I would be grateful, if copies of any replies were send to my
private e-mail, [EMAIL PROTECTED], because I am not subscribed to
[EMAIL PROTECTED] mailing list.
--
Jakub Narębski mailto:[EMAIL PROTECTED]
Poland
#!/usr/bin/perl -w
my($cvsRoot) = '/opt/cvsroot/';
my($exportDir) = '/opt/httpd/html/cift/';
my(@importFiles) = qw();
my(@files_to_unlink) = qw();
my(@files_to_export) = qw();
my($subDir) = "";
my($fileList) = "";
#
# make argv[0] into a list of files
# first token is the subdirectory
#
if ($ARGV[0] =~ /^(\S+?) (.+)$/) {
$subDir = $1;
my($rest) = $2;
# in case of 'import' we have to parse input
if ($rest eq "- Imported sources") {
while(<STDIN>) {
chomp;
if ($_ =~ /^Update of /) { # not really needed
$subDir = $_;
$subDir =~ s/^Update of $cvsRoot//;
} elsif ($_ =~ /^(U|N) (\S+)$/) { # can lead astray for some log messages
my $fname = $2;
$fname =~ s|//+|/|g;
push(@importFiles, $fname);
}
}
# new (marked with N flag) files need not to be removed
@files_to_unlink = @importFiles;
@files_to_export = @importFiles;
} elsif ($rest eq "- New directory") {
# is this really needed?
push(@files_to_export, $subDir);
} elsif ($rest =~ /^- /) {
die "Unknown argument";
} else {
my(@fileInfo) = split(' ', $rest);
foreach my($fileInfo) (@fileInfo) {
my ($fname, $in_rev, $out_rev) = split(',', $fileInfo);
unless (defined $out_rev) {
$out_rev = $in_rev;
undef $in_rev;
}
push(@files_to_unlink, $subDir . "/" . $fname) unless ($in_rev eq
"NONE");
push(@files_to_export, $subDir . "/" . $fname) unless ($out_rev eq
"NONE");
}
}
} else {
die "No arguments";
}
#
# remove any existing versions of the files
#
unlink(map {$exportDir.'/'.$_ } @files_to_unlink);
#
# export the files
#
$fileList = join(' ',@files_to_export);
umask 002; # umask command is available only in csh and bash shells
my($output) = `cd $exportDir; /usr/bin/cvs -d $cvsRoot export -D now $fileList`;