VCS::LibCVS::WorkingUnmanagedFile - A file which is not managed by CVS.


VCS-LibCVS documentation Contained in the VCS-LibCVS distribution.

Index


Code Index:

NAME

Top

VCS::LibCVS::WorkingUnmanagedFile - A file which is not managed by CVS.

SYNOPSIS

Top

DESCRIPTION

Top

This object represents a file not from CVS.

SUPERCLASS

Top

VCS::LibCVS::WorkingFileOrDirectory

CLASS ROUTINES

Top

new()

$unmanaged_file = VCS::LibCVS::WorkingUnmanagedFile->new($filename)

return type: VCS::LibCVS::WorkingUnmanagedFile
argument 1 type: scalar string

The name of the file which is not under CVS control.

Creates a new WorkingUnmanagedFile. The filename may be relative or absolute, and is stored as such.

It throws an exception if the file is recorded in the CVS/Entries file, or should be ignored by CVS.

INSTANCE ROUTINES

Top

is_in_the_way()

if ($u_file->is_in_the_way()) {

return type: boolean scalar

Returns true if there is a file or a directory in the repository with the same name as this file. This file is in the way because it prevents the update from the repository.

An unusual case occurs if this file has the same contents as the one in the repository. In this case, "cvs update" will add the local administrative information and not report "in the way". This routine will still return true in that case.

SEE ALSO

Top

  VCS::LibCVS


VCS-LibCVS documentation Contained in the VCS-LibCVS distribution.
#
# Copyright (c) 2003,2004,2005 Alexander Taler (dissent@0--0.org)
#
# All rights reserved. This program is free software; you can redistribute it
# and/or modify it under the same terms as Perl itself.
#

package VCS::LibCVS::WorkingUnmanagedFile;

use strict;
use Carp;

###############################################################################
# Class constants
###############################################################################

use constant REVISION => '$Header: /cvsroot/libcvs-perl/libcvs-perl/VCS/LibCVS/WorkingUnmanagedFile.pm,v 1.9 2005/10/10 12:52:11 dissent Exp $ ';

use vars ('@ISA');
@ISA = ("VCS::LibCVS::WorkingFileOrDirectory");

###############################################################################
# Class variables
###############################################################################

###############################################################################
# Private variables
###############################################################################

###############################################################################
# Class routines
###############################################################################

sub new {
  my $class = shift;
  my $that = $class->SUPER::new(@_);
  my $full_name = $that->get_name();

  # Check if the file is managed by CVS
  $that->{Admin} = VCS::LibCVS::Admin->new($that->get_name({no_base => 1}));
  my $ent = $that->{Admin}->get_Entries()->{$that->get_name({no_dir => 1})};
  confess "$full_name is managed by CVS" if $ent;

  # Check if the file should be ignored by CVS
  my $ignorer = $that->get_repository()->get_ignoreChecker();
  confess "No such file $full_name" unless -f $full_name;
  confess "That's the admin dir" if $full_name eq $VCS::LibCVS::Admin_Dir_Name;
  confess "$full_name is being ignored" if $ignorer->ignore_check($full_name);

  return $that;
}

###############################################################################
# Instance routines
###############################################################################

# Perhaps make it return an enumerated state.  See bug #14189.

sub is_in_the_way {
  my $self = shift;

  # Issue an update command.  If it returns "nothing known about", then the
  # file is not in the way.  In any other case it is in the way, either because
  # a directory is there, or another file.
  my $up_c = new VCS::LibCVS::Command({}, "update", ["-ld"], [$self]);
  $up_c->issue($self->get_repository());
  my @errors = $up_c->get_errors("nothing known about");
  return !@errors;
}

###############################################################################
# Private routines
###############################################################################

# Directory names for reporting to the server.
# Routine called in Command.pm, see there for more details.
sub _get_repo_dirs {
  my $self = shift;
  my $l_dir = $self->get_name({no_base => 1});
  my $root_repo_dir = $self->{Admin}->get_Root()->{RootDir};
  my $within_repo_dir = $self->{Admin}->get_Repository()->as_string();
  my $r_dir = File::Spec::Unix->catdir($root_repo_dir, $within_repo_dir);

  return [ $l_dir, $r_dir ];
}

1;