package VCP::Utils::cvs ; =head1 NAME VCP::Utils::cvs - utilities for dealing with the cvs command =head1 SYNOPSIS use VCP::Utils::cvs ; =head1 DESCRIPTION A mix-in class providing methods shared by VCP::Source::cvs and VCP::Dest::cvs, mostly wrappers for calling the cvs command. =cut use strict ; use Carp ; use VCP::Debug qw( debug debugging ) ; use File::Spec ; use File::Temp qw( mktemp ) ; use POSIX ':sys_wait_h' ; =head1 METHODS =item cvs Calls the cvs command with the appropriate cvsroot option. =cut sub cvs { my $self = shift ; my $args = shift ; unshift @$args, "-d" . $self->repo_server if defined $self->repo_server; return $self->run_safely( [ qw( cvs -Q -z9 ), @$args ], @_ ) ; } =item create_cvs_workspace Creates a temp dir named "co" for C to work in, checks out the module there, and sets the work root and cvs working dir to that directory. =cut sub create_cvs_workspace { my $self = shift ; confess "Can't create_workspace twice" unless $self->none_seen ; ## establish_workspace in a directory named "co" for "checkout". This is ## so that VCP::Source::cvs can use a different directory to contain ## the revs, since all the revs need to be kept around until the VCP::Dest ## is through with them. $self->command_chdir( $self->tmp_dir( "co" ) ) ; my ( $module ) = $self->rev_root =~ m{^/*(.*?)(/|\Z)} ; die "Unable to parse cvs module name from '", $self->rev_root, "'\n" unless defined $module and length $module ; $self->cvs( [ 'checkout', $module ] ) ; $self->work_root( $self->tmp_dir( "co", $self->rev_root ) ) ; $self->command_chdir( $self->tmp_dir( "co", $self->rev_root ) ) ; } =head1 COPYRIGHT Copyright 2000, Perforce Software, Inc. All Rights Reserved. This module and the VCP package are licensed according to the terms given in the file LICENSE accompanying this distribution, a copy of which is included in L. =cut 1 ;