230 likes | 402 Views
Perl/ClearCase Programming. With an emphasis on UNIX/Windows interoperation David Boyce. General Notes. Me dsb@cleartool.com http://www.cleartool.com Focus: Scripting vs Programming Portability vs Interoperability Perl vs Java (philosophy). Sharing modules.
E N D
Perl/ClearCase Programming With an emphasis on UNIX/Windows interoperation David Boyce
General Notes • Me • dsb@cleartool.com • http://www.cleartool.com • Focus: Scripting vs Programming • Portability vs Interoperability • Perl vs Java (philosophy)
Sharing modules • Make use of SMB symlink translation • Must be on UNIX/Samba/TAS/NAS • Some SMB’s require symlink switch • Even WIN32 binary modules work • Share /usr/local/bin (\\server\ulb) or /usr/local (\\server\local). • All maintenance from UNIX.
A Co-Operating Win32 Perl • ClearCase bundled perl (ccperl) • Local-only WIN32 build • Local with network modules • Networked standard build • Networked ActiveState build
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 perl’s 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
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 CR’s • 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 EV’s • Prepend, Append, Remove • InsertBefore, InsertAfter • Uniqify, DeleteNonexistent • Replace, Whence (take RE’s) • 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 • Advance 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 (->ccpathnorm) • 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