Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re: Perl source safe get by label failure

by particle (Vicar)
on Aug 23, 2003 at 00:38 UTC ( [id://285966]=note: print w/replies, xml ) Need Help??


in reply to Perl source safe get by label failure

a problem, but no code backing it up. that's a tough problem to solve. okay, without the code, i can give you help on debugging skills, because you're going to have to do them yourself. here's a partial list:

  • start small -- create the smallest script that can recreate the error.
  • read the error -- is there something in your environment that is preventing sourcesafe from getting a file? must a directory exist before a get to that directory succeeds?
  • add debugging -- print out in perl where you think it'll help. calling the system? print the line first.
  • add more debugging -- use sourcesafe's debugging features to see what it's doing.

if you're still stumped, post the code here. some of us may have the (mis)forture of working with sourcesafe. but first, read jeffa's How (Not) To Ask A Question

~Particle *accelerates*

  • Comment on Re: Perl source safe get by label failure

Replies are listed 'Best First'.
Re: Re: Perl source safe get by label failure
by mgibian (Acolyte) on Aug 26, 2003 at 17:16 UTC
    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");

      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"} );

      Notes:

      • 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 http://www.experts-exchange.com/ has a forum for that?

      ~Particle *accelerates*

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others romping around the Monastery: (3)
As of 2024-04-18 23:12 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found