Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight

Re: Re: Perl source safe get by label failure

by mgibian (Acolyte)
on Aug 26, 2003 at 17:16 UTC ( #286787=note: print w/replies, xml ) Need Help??

in reply to Re: Perl source safe get by label failure
in thread Perl source safe get by label failure

The code I'm using comes in two parts. The general function for running source safe commands is:
sub PerformSS { my $self = shift; my ($cmdArg) = @_; my $cmd = "ss " . $cmdArg; my $status = 0; if ($self->doSS) { $status = system("$cmd 1>>$errorfile 2>&1"); $self->checkError($status, "PerformSS $cmd failed $status $!"); $self->trace("--- completed $cmd ---\n"); } else { $self->trace("--- PerformSS did not $cmd ---\n"); } return $status; }

The call I am trying to use to fetch by label from source safe is:
$status = $self->PerformSS("get \$/project -R -I-Y -V\"$label\"" +);

Note that checkError issues the error message and some addition supporting information if $status is not zero.

On the other hand, the following code works just fine, which is why I had omitted the code in my original posting. The question I have is still... is there something special or different about how the fetch by label returns?
$status = $self->PerformSS("get \$/project -R -I-Y");

Replies are listed 'Best First'.
Re^3: Perl source safe get by label failure
by particle (Vicar) on Aug 27, 2003 at 13:33 UTC

    well, it's been a long time since i've used vss, i must admit. i've used pvcs vm for seven years, and am now implementing a merant dimensions infrastructure. i've been doing conversions from vss, but i don't know specifics on fetch by label.

    i can, however, help you modify your PerformSS subroutine to make it safer, and more robust. using IPC::Run will give you better control over std(in|out|err). passing system a list instead of a scalar will make the subroutine safer. here's an example:

    #!/usr/bin/perl use strict; use warnings; $|++; use IPC::Run qw/run timeout/; sub PerformSS { my( $self, @cmdArgs )= @_; my $status; $self->trace("--- PerformSS did not $cmd ---\n") unless $self->doSS; $status= run ( 'ss', @cmdArgs ) => \my( $in, $out, $err ) => timeout(10); $self->checkError($status => <<ERROR }; PerformSS $cmd failed: status: $status stdout: $out stderr: $err ERROR $self->trace("--- completed $cmd ---\n"); return ( $status, $out, $err ); } my @result= $self->PerformSS( 'get' => '$/project', '-R', '-I-Y', qq{-V"$label"} );


    • this code is untested, but it's passed my in-head compiler.
    • i've taken the liberty of formatting it the way i code, including fat commas, uncuddled braces, spacing, parameter passing methods, etc.
    • i've also changed both the input and output to the PerformSS method. it expects a list as input, to secure the system command (via IPC::Run,) and it returns a list including the status, stdout, and stderr for the caller to handle (if it needs it.)
    • this info is no longer written to an errorfile--an errorfile that was already a package global, anyway, so there's one less use of a global var, which is considered (by some) a Good Thing, especially in OO code like yours.

    your mileage may vary, but IPC::Run is a powerful module that i use in all my automation when i'm working beyone the capabilities of system and qx{}.

    to diagnose the vss errors, i suggest you create a small script (like this one) that uses IPC::Run to test both methods, and inspect the results carefully. you'll have to find a vss forum for more expert help. perhaps has a forum for that?

    ~Particle *accelerates*

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://286787]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (7)
As of 2022-05-23 15:31 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (82 votes). Check out past polls.