VCS::LibCVS::Client::Request::Argument - an Argument request


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

Index


Code Index:

NAME

Top

VCS::LibCVS::Client::Request::Argument - an Argument request

SYNOPSIS

Top

  $switch = VCS::LibCVS::Client::Request::Argument->new("-m");
  $msg = VCS::LibCVS::Client::Request::Argument->new("2 line\nmessage");
  $msg = VCS::LibCVS::Client::Request::Argument->new( ["2 line","msg"] );
  $client->submit_request($switch);
  $client->submit_request($msg);

DESCRIPTION

Top

Used for sending arguments to the server. These are similar to the cvs command-line switches.

The only difference from a regular request is the constructor.

An Argument can contain arbitrary characters, including newlines. In order to support this the CVS client protocol has a request called Argumentx that appends a line to a previous Argument request. This library rolls these two requests into one object which can handle arguments with multiple lines.

SUPERCLASS

Top

  VCS::LibCVS::Client::Request

CLASS ROUTINES

Top

new()

$request = Client::Request::Argument->new($args_data)

return type: Client::Request::Argument
argument 1 type: . . .

&32;&32;option 1: scalar

All of the argument data, across any number of lines.

&32;&32;option 2: array ref

The elements of the array are joined with newlines between them to form a scalar which is used as the data.

Constructs and returns a new Argument Request.

SEE ALSO

Top

  VCS::LibCVS::Client::Request


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::Client::Request::Argument;

use strict;
use Carp;

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

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

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

sub BEGIN { push @VCS::LibCVS::Client::Request::Valid_requests, "Argument"; }

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

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

# Override the constructor, since it must handle a variable number of Datum.  In
# addition we give it the flexibility of allowing newlines in its args_data.
#
# Request::Argument CLASS->new($args_data)
#
# $args_data may be a scalar, or an array ref whose contents are join("\n")ed.

sub new {
  my ($class, $args_data) = @_;

  my $that = bless {}, $class;

  # Request name is always argument.  Change this if you subclass.
  $that->{RequestName} = "Argument";

  # Turn the $args_data into a big long string, split that into an array of
  # lines and store it that way, for easy writing to the server.
  if (!ref($args_data)) {
    $args_data = "" if !defined($args_data);
  } elsif (ref($args_data) eq "ARRAY") {
    $args_data = join "\n", @$args_data;
  } else {
    confess "Wrong type of args_data: " . ref($args_data);
  }

  my @args_data = split /\n/, $args_data;

  # As a hacky way of emulating Argumentx, prepend that string to all but the
  # first Argument.
  for (my $i=1; $i < @args_data; $i++) {
    $args_data[$i] = "Argumentx ".$args_data[$i];
  }
  my @args = map { "VCS::LibCVS::Datum::String"->new($_); } @args_data;

  $that->{Args} = \@args;

  return $that;
}

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

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

1;