You are on page 1of 23

Perl/ClearCase Programming

With an emphasis on UNIX/Windows interoperation David Boyce BMRCCUG 9/25/2001

General Notes
 Me
 dsb@cleartool.com  http://www.cleartool.com

 Focus: Scripting vs Programming  Portability vs Interoperability  Perl vs Java (philosophy)

A Co-Operating Win32 Perl


 ClearCase bundled perl (ccperl)  Local-only WIN32 build  Local with network modules  Networked standard build  Networked ActiveState build

Sharing modules
 Make use of SMB symlink translation
 Must

be on UNIX/Samba/TAS/NAS  Some SMBs require symlink switch

 Even WIN32 binary modules work


 Share /usr/local/bin (\\server\ulb)

or /usr/local (\\server\local).
 All maintenance from UNIX.

Sharing and executing scripts


 Choices: executing scripts on Windows  Register the .pl/.plx extension  Use pl2bat  Use a redirector:
@echo off \\server\perl\bin\perl \\server\ulb\whence %*

 Local .bat, remote/shared perl script (ulb)  Use perls bin directory  UNC path entries must be user and at end

Trigger Definition
% ct lstype -l trtype:mkelem_post trigger type "mkelem_post" 02-Aug-99.18:35:01 by [VOB Admin] (vobadm.ccusers@sparc5) owner: vobadm group: ccusers all element trigger post-operation mkelem action: -execunix /usr/local/bin/perl /data/ccase/triggers/mkelem_post.tgr action: -execwin perl //ultra10/triggers/mkelem_post.tgr excluded users: vobadm  My triggers are at http://www.cleartool.com

Interop Tips and Tricks


 use constant MSWIN => $^O =~ /MSWin32|Windows_NT/i;

 Quoting: make use of qq() and q()  Especially in e scripts  No single quote () in cmd.exe  Remember: 2>&1 works on Windows  -e foo@@/main/0  Useful for testing dynamic-vs-snapshot  Follow with ct desc for snapshot support

Interop Tips and Tricks (cont)


 Make a DNS alias usr for the fileserver
 Enables

e.g. //usr/local/bin anywhere  Useful for includes in cspecs etc.


 Use the notify command for email (4.0)  Beware of PERL5LIB et al (CC bug)  Use binmode on all binary files  Cleartool returns native version paths

Interop Tips and Tricks (cont)


Use s%\\%/%g if MSWIN;  File::Spec 0.82 (abstract pathnames)

File::Spec->rel2abs($path); # native fmt File::Spec::Unix->rel2abs($path); # force Unix fmt

my $nul = MSWIN ? NUL : /dev/null;




system(cmd >$nul 2>&1);

Interop: system() and exec()


 The documentation lies!
 system()

always uses a shell  exec() always exits


 Perl 5.6.0 emulates fork but not exec
 emulation:

exit(system(cmd)!=0));

 Best: use ClearCase::Argv


 for

complex/long-running programs

My Perl Modules
 ClearCase::ClearPrompt  ClearCase::Wrapper  ClearCase::SyncTree  ClearCase::CRDB  Env::Path  IPC::ClearTool  ClearCase::Argv

ClearCase::ClearPrompt
 Handles temp files automatically  Capable of asynchronous operation  Handles trigger series automatically  Captures/emails error msgs (*CC 4.2)
use ClearCase::ClearPrompt qw(clearprompt +TRIGGERSERIES +CAPTURE=vobadm); clearprompt(proceed, -prompt, Hi!)); $bug = clearprompt(qw(text -def 0 prompt), Bug #?);

ClearCase::Wrapper
 Not an API, a program in module form  Potentially wraps all cleartool access  Cannot affect Windows GUI  Many cmdline features (-rec/-all/-dir)

ClearCase::SyncTree
 Analogous to citree, clearfsimport  Preserves CRs  Maps filenames  Takes or derives file lists  Regular expression filtering  Comes with synctree program

ClearCase::CRDB
 Unreleased  CR analysis (impact analysis)  Comes with whouses program  Forward or backward analysis

Env::Path
 Simply adds methods to existing EVs  Prepend, Append, Remove  InsertBefore, InsertAfter  Uniqify, DeleteNonexistent  Replace, Whence (take REs)  Comes with envpath program  Comes with whence program for Windows
use Env::Path PATH; PATH->Remove(/usr/ucb);

IPC::ClearTool
 Interop  Speedup: order of magnitude, or none.  Significant constant overhead  CAL on Windows, coprocess on UNIX  Preferred interface via ClearCase::Argv

ClearCase::Argv Features
 Command line as object  Advanced Option Parsing (option sets)  Interoperability
 Prog,

opts, args  Attributes:


Verbosity (debug, quiet)  Execution exceptions (autofail)


Can exit or call exception handler

ClearCase::Argv for Interop


 Quoting (->autoquote)  Path normalization (->outpathnorm)  Output (->stdout, ->stderr)  Globbing (->autoglob)  Xargs behavior (->qxargs, ->syxargs)

ClearCase::Argv examples
my $ct = ClearCase::Argv->new; $ct->autochomp(1); my @co = $ct->lsco([-s, -all], .)->qx; $ct->ci([-c, comment], @co)->system; my @co = ctqx(lsco s all .); ctsystem(qw(mkelem c comment), @co);

Special-purpose Objects
my $ct = ClearCase::Argv->new; $ct->autofail(1); $ct->autochomp(1); my $ctq = ClearCase::Argv->new; $ct->stdout(0); $ct->stderr(0);

Setting attributes
 Per-object: $ct->stderr(1);  Globally: ClearCase::Argv->stderr(1);  export ARGV_STDERR=1  ClearCase::Argv->attropts;
 -/dbg=1  -/quiet=1  -/ipc=1

Question Time
 At http://www.cleartool.com:
 This

presentation  Code samples  Detailed documents

You might also like