INTEGRATION: CWS cvsprot01 (1.1.2); FILE ADDED
2006/03/17 15:39:59 hr 1.1.2.1: #i63313# perl implementation of the CVS client protocol
This commit is contained in:
parent
8dab32fa27
commit
59804e8893
2 changed files with 258 additions and 0 deletions
166
solenv/bin/modules/PCVSLib/lib/PCVSLib/ModeTime.pm
Normal file
166
solenv/bin/modules/PCVSLib/lib/PCVSLib/ModeTime.pm
Normal file
|
@ -0,0 +1,166 @@
|
|||
#*************************************************************************
|
||||
#
|
||||
# OpenOffice.org - a multi-platform office productivity suite
|
||||
#
|
||||
# $RCSfile: ModeTime.pm,v $
|
||||
#
|
||||
# $Revision: 1.2 $
|
||||
#
|
||||
# last change: $Author: vg $ $Date: 2007-08-27 13:35:02 $
|
||||
#
|
||||
# The Contents of this file are made available subject to
|
||||
# the terms of GNU Lesser General Public License Version 2.1.
|
||||
#
|
||||
#
|
||||
# GNU Lesser General Public License Version 2.1
|
||||
# =============================================
|
||||
# Copyright 2005 by Sun Microsystems, Inc.
|
||||
# 901 San Antonio Road, Palo Alto, CA 94303, USA
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License version 2.1, as published by the Free Software Foundation.
|
||||
#
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
#*************************************************************************
|
||||
|
||||
|
||||
#
|
||||
# ModeTime.pm - helper class for getting and setting file mode and
|
||||
# modification time
|
||||
#
|
||||
|
||||
package PCVSLib::ModeTime;
|
||||
|
||||
use Carp;
|
||||
use Fcntl ':mode';
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use PCVSLib::Time;
|
||||
|
||||
#### ctor ####
|
||||
|
||||
sub new
|
||||
{
|
||||
my $invocant = shift;
|
||||
my $class = ref($invocant) || $invocant;
|
||||
my $path_string = shift;
|
||||
my $self = {};
|
||||
|
||||
$self->{path} = undef;
|
||||
|
||||
bless ($self, $class);
|
||||
|
||||
if ( defined($path_string) ) {
|
||||
$self->{path} = $path_string;
|
||||
}
|
||||
return $self;
|
||||
}
|
||||
|
||||
#### instance accessors #####
|
||||
|
||||
for my $datum qw(path) {
|
||||
no strict "refs";
|
||||
*$datum = sub {
|
||||
my $self = shift;
|
||||
$self->{$datum} = shift if @_;
|
||||
return $self->{$datum};
|
||||
}
|
||||
}
|
||||
|
||||
#### public methods ####
|
||||
|
||||
sub get_mode
|
||||
{
|
||||
my $self = shift;
|
||||
|
||||
my $path = $self->{path};
|
||||
my @sb = stat($path);
|
||||
if ( !@sb ) {
|
||||
croak("PCVSLib::Mode::get_mode(): can't stat file '$path': $!");
|
||||
}
|
||||
|
||||
return $self->numeric_to_mode($sb[2]);
|
||||
}
|
||||
|
||||
sub set_mode
|
||||
{
|
||||
my $self = shift;
|
||||
my $mode = shift;
|
||||
|
||||
my $numeric_mode = $self->mode_to_numeric($mode);
|
||||
my $path = $self->{path};
|
||||
if ( !chmod($numeric_mode, $path) ) {
|
||||
croak("PCVSLib::File::set_mode(): can't change permission on file '$path': $!");
|
||||
}
|
||||
}
|
||||
|
||||
sub touch
|
||||
{
|
||||
my $self = shift;
|
||||
my $time = shift;
|
||||
|
||||
my $path = $self->{path};
|
||||
|
||||
if ( !utime($time, $time, $path) ) {
|
||||
croak("PCVSLib::ModeTime::touch(): can't set modification time of '$path': $!");
|
||||
}
|
||||
}
|
||||
|
||||
#### private methods ####
|
||||
|
||||
sub numeric_to_mode
|
||||
{
|
||||
my $self = shift;
|
||||
my $numeric_mode = shift;
|
||||
|
||||
my $mode = 'u=';
|
||||
$mode .= 'r' if $numeric_mode & S_IRUSR;
|
||||
$mode .= 'w' if $numeric_mode & S_IWUSR;
|
||||
$mode .= 'x' if $numeric_mode & S_IXUSR;
|
||||
$mode .= ',g=';
|
||||
$mode .= 'r' if $numeric_mode & S_IRGRP;
|
||||
$mode .= 'w' if $numeric_mode & S_IWGRP;
|
||||
$mode .= 'x' if $numeric_mode & S_IXGRP;
|
||||
$mode .= ',o=';
|
||||
$mode .= 'r' if $numeric_mode & S_IROTH;
|
||||
$mode .= 'w' if $numeric_mode & S_IWOTH;
|
||||
$mode .= 'x' if $numeric_mode & S_IXOTH;
|
||||
|
||||
return $mode;
|
||||
}
|
||||
|
||||
sub mode_to_numeric
|
||||
{
|
||||
my $self = shift;
|
||||
my $mode = shift;
|
||||
|
||||
my ($user, $group, $other) = split(/,/, $mode);
|
||||
my $numeric_mode = 0;
|
||||
|
||||
$numeric_mode |= S_IRUSR if $user =~ /r/;
|
||||
$numeric_mode |= S_IWUSR if $user =~ /w/;
|
||||
$numeric_mode |= S_IXUSR if $user =~ /x/;
|
||||
$numeric_mode |= S_IRGRP if $group =~ /r/;
|
||||
$numeric_mode |= S_IWGRP if $group =~ /w/;
|
||||
$numeric_mode |= S_IXGRP if $group =~ /x/;
|
||||
$numeric_mode |= S_IROTH if $other =~ /r/;
|
||||
$numeric_mode |= S_IWOTH if $other =~ /w/;
|
||||
$numeric_mode |= S_IXOTH if $other =~ /x/;
|
||||
|
||||
return $numeric_mode;
|
||||
}
|
||||
|
||||
1;
|
||||
# vim: set ts=4 shiftwidth=4 expandtab syntax=perl:
|
92
solenv/bin/modules/PCVSLib/lib/PCVSLib/PathName.pm
Normal file
92
solenv/bin/modules/PCVSLib/lib/PCVSLib/PathName.pm
Normal file
|
@ -0,0 +1,92 @@
|
|||
#*************************************************************************
|
||||
#
|
||||
# OpenOffice.org - a multi-platform office productivity suite
|
||||
#
|
||||
# $RCSfile: PathName.pm,v $
|
||||
#
|
||||
# $Revision: 1.2 $
|
||||
#
|
||||
# last change: $Author: vg $ $Date: 2007-08-27 13:35:11 $
|
||||
#
|
||||
# The Contents of this file are made available subject to
|
||||
# the terms of GNU Lesser General Public License Version 2.1.
|
||||
#
|
||||
#
|
||||
# GNU Lesser General Public License Version 2.1
|
||||
# =============================================
|
||||
# Copyright 2005 by Sun Microsystems, Inc.
|
||||
# 901 San Antonio Road, Palo Alto, CA 94303, USA
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License version 2.1, as published by the Free Software Foundation.
|
||||
#
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
#*************************************************************************
|
||||
|
||||
|
||||
#
|
||||
# PathName.pm - package for encapsulating 'pathnames'. Many Responses return
|
||||
# a pathname, see the cvs client documentation for details
|
||||
#
|
||||
|
||||
package PCVSLib::PathName;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
#### ctor ####
|
||||
|
||||
sub new
|
||||
{
|
||||
my $invocant = shift;
|
||||
my $class = ref($invocant) || $invocant;
|
||||
my $self = {};
|
||||
|
||||
$self->{local_directory} = undef;
|
||||
$self->{repository} = undef;
|
||||
$self->{name} = undef;
|
||||
|
||||
bless ($self, $class);
|
||||
return $self;
|
||||
}
|
||||
|
||||
#### instance accessors #####
|
||||
|
||||
for my $datum qw(local_directory repository name) {
|
||||
no strict "refs";
|
||||
*$datum = sub {
|
||||
my $self = shift;
|
||||
$self->{$datum} = shift if @_;
|
||||
return $self->{$datum};
|
||||
}
|
||||
}
|
||||
|
||||
# conveniance method
|
||||
sub local_path
|
||||
{
|
||||
my $self = shift;
|
||||
my $dir = $self->{local_directory};
|
||||
my $name = $self->{name};
|
||||
|
||||
if ( !defined($dir) || !defined($name) ) {
|
||||
croak("PCVSLib::PathName::local_path(): path_name not set");
|
||||
}
|
||||
else {
|
||||
return "$dir/$name";
|
||||
}
|
||||
}
|
||||
|
||||
#### public methods ####
|
||||
|
||||
1;
|
||||
# vim: set ts=4 shiftwidth=4 expandtab syntax=perl:
|
Loading…
Reference in a new issue