-#!/usr/bin/perl
+#!/usr/bin/env cqperl
+
+=pod
+
+=head1 NAME $RCSfile: testclearcase.pl,v $
+
+Test Clearcase
+
+=head1 VERSION
+
+=over
+
+=item Author
+
+Andrew DeFaria <Andrew@ClearSCM.com>
+
+=item Revision
+
+$Revision: 2.1 $
+
+=item Created:
+
+Tue Apr 10 13:14:15 CDT 2007
+
+=item Modified:
+
+$Date: 2011/01/09 01:01:32 $
+
+=back
+
+=head1 SYNOPSIS
+
+ Usage: testclearcase.pl: [-us|age] [-ve|rbose]
+ [-c|onfig <file>] [-b|ase] [-uc|m]
+
+ Where:
+ -v|erbose: Display progress output
+ -d|ebug: Display debug info
+ -us|age: Display usage
+
+ -c|onfig <file>: Config file (Default: testclearcase.conf)
+ -[no]b|ase: Perform base Clearcase tests (Default: base)
+ -[no]uc|m: Perform UCM Clearcase tests (Default: noucm)
+ -[no]clean: Cleanup after yourself (Default: clean)
+
+=head1 DESCRIPTION
+
+Clearcase smoke tests. Perform simple Clearcase operations to validate that
+Clearcase minimally works.
+
+If -ucm is specified then additional UCM related tests are performed.
+
+=cut
+
use strict;
use warnings;
+use Cwd;
use FindBin;
-use Term::ANSIColor qw(:constants);
+use Getopt::Long;
+#use Term::ANSIColor qw(:constants);
-my $libs;
+use lib "$FindBin::Bin/../lib";
-BEGIN {
- $libs = $ENV{SITE_PERLLIB} ? $ENV{SITE_PERLLIB} : "$FindBin::Bin/../lib";
-
- die "Unable to find libraries\n"
- unless -d $libs;
-} # BEGIN
+use Clearcase;
+use Clearcase::Element;
+use Clearcase::View;
+use Clearcase::Views;
+use Clearcase::Vob;
+use Clearcase::Vobs;
-use lib $libs;
+use Clearcase::UCM;
+use Clearcase::UCM::Activity;
+use Clearcase::UCM::Baseline;
+use Clearcase::UCM::Component;
+use Clearcase::UCM::Folder;
+use Clearcase::UCM::Project;
+use Clearcase::UCM::Pvob;
+use Clearcase::UCM::Stream;
-use Clearcase;
+use DateUtils;
use Display;
+use GetConfig;
+use Logger;
+use OSDep;
+use TimeUtils;
+use Utils;
+
+# Globals
+my $VERSION = '2.1';
+
+my (
+ $test_vob,
+ $test_view,
+ $test_pvob,
+ $test_folder,
+ $test_project,
+ $test_activity,
+ $test_baseline,
+ $test_component,,
+ $test_devstream,
+ $test_intstream,
+ $test_devview,
+ $test_intview,
+);
+
+my (%default_opts, %opts);
+
+my ($script) = ($FindBin::Script =~ /^(.*)\.pl/);
+
+my $log = Logger->new;
+
+# LogOpts: Log the %opts has to the log file so we can tell the options used for
+# this run.
+sub LogOpts() {
+ $log->msg(
+ "$script v$VERSION run at "
+ . YMDHM
+ . ' with the following options:'
+ );
+
+ for (sort keys %opts) {
+ if (ref $opts{$_} eq 'ARRAY') {
+ my $name = $_;
+ $log->msg("$name:\t$_") for @{$opts{$_}};
+ } else {
+ $log->msg("$_:\t$opts{$_}");
+ } # if
+ } # for
+
+ return;
+} # LogOpts
+
+sub CreateVob($) {
+ my ($tag) = @_;
+
+ my $vobname = Clearcase::vobname $tag;
+
+ $log->msg ("Creating vob $tag");
+
+ my $newvob = Clearcase::Vob->new($tag);
+
+ my ($status, @output) = $newvob->create($opts{vobhost}, "$opts{vobstore}/$vobname.vbs");
+
+ $log->log($_) for @output;
+
+ return ($status, $newvob);
+} # CreateVob
+
+sub CreatePvob($) {
+ my ($tag) = @_;
+
+ my $vobname = Clearcase::vobname $tag;
+
+ my $pvob = Clearcase::UCM::Pvob->new($tag);
+
+ #my ($status, @output) = $pvob->create($opts{vobhost}, "$opts{vobstore}/$vobname.vbs", 'A test Pvob');
+ my ($status, @output) = $pvob->create($opts{vobhost}, "$opts{vobstore}/$vobname.vbs");
+
+ $log->log($_) for @output;
+
+ return ($status, $pvob);
+} # CreatePvob
+
+sub MountVob($) {
+ my ($vob) = @_;
+
+ $log->msg('Mounting vob ' . $vob->tag);
+
+ # Create mount directory
+ my ($status, @output);
+
+ ($status, @output) = Execute 'mkdir -p ' . $vob->tag . ' 2>&1' unless -d $vob->tag;
+
+ $log->log($_) for @output;
+
+ ($status, @output) = $vob->mount;
+
+ $log->log($_) for @output;
+
+ return $status;
+} # MountVob
+
+sub DestroyVob($) {
+ my ($vob) = @_;
+
+ my ($status, @output);
+
+ ($status, @output) = $Clearcase::CC->execute('cd');
+
+ $log->msg('Unmounting vob ' . $vob->tag);
+
+ ($status, @output) = $vob->umount;
+
+ $log->msg('Removing vob ' . $vob->tag);
+
+ ($status, @output) = $vob->remove;
+
+ $log->log($_) for @output;
+
+ return $status;
+} # DestroyVob
+
+sub CreateView($) {
+ my ($tag) = @_;
+
+ $log->msg("Creating view $tag");
+
+ my $view = Clearcase::View->new($tag);
+
+ my ($status, @output) = $view->create($opts{viewhost}, "$opts{viewstore}/$tag.vws");
+
+ $log->log($_) for @output;
+
+ return ($status, $view);
+} # CreateView
+
+sub SetView($) {
+ my ($view) = @_;
+
+ $log->msg('Setting view ' . $view->tag);
+
+ my ($status, @output) = $view->set;
+
+ $log->log($_) for @output;
+
+ return $status;
+} # SetView
+
+sub DestroyView($) {
+ my ($view) = @_;
+
+ $log->msg('Removing view ' . $view->tag);
+
+ my ($status, @output) = $Clearcase::CC->execute('cd');
-my ($status, @output) = $Clearcase::CC->execute ('-ver');
+ $log->log($_) for @output;
-error 'Clearcase is not installed on this system', 1
- if $status;
+ chdir $ENV{HOME}
+ or $log->err("Unable to chdir $ENV{HOME}", 1);
+
+ ($status, @output) = $view->remove;
+
+ $log->log($_) for @output;
+
+ return $status;
+} # DestroyView
+
+sub CreateViewPrivateFiles(@) {
+ my (@elements) = @_;
+
+ $log->msg('Creating test files');
+
+ for (@elements) {
+ my $file;
+
+ $log->msg("Creating $_");
+
+ open $file, '>>', $_
+ or $log->err("Unable to open $_ for writing - $!", 1);
+
+ print $file "This is file $_\n";
+
+ close $file;
+ } # for
+
+ return;
+} # CreateViewPrivateFiles
+
+sub CheckOut($) {
+ my ($element) = @_;
+
+ my ($status, @output);
+
+ if (ref $element eq 'ARRAY') {
+ for (@{$element}) {
+ $log->msg("Checking out $_");
+
+ my $newElement = Clearcase::Element->new($_);
+
+ ($status, @output) = $newElement->checkout;
+
+ $log->log($_) for @output;
+
+ $log->err("Unable to check out $_", $status) if $status;
+ } # for
+ } else {
+ $log->msg("Checking out $element");
+
+ my $newElement = Clearcase::Element->new($element);
+
+ ($status, @output) = $newElement->checkout;
+
+ $log->log($_) for @output;
+
+ $log->err("Unable to check out $element", $status) if $status;
+ } # if
+
+ return;
+} # CheckOut
+
+sub CheckIn($) {
+ my ($element) = @_;
+
+ my ($status, @output);
+
+ if (ref $element eq 'ARRAY') {
+ for (@{$element}) {
+ $log->msg("Checking in $_");
+
+ my $newElement = Clearcase::Element->new($_);
+
+ ($status, @output) = $newElement->checkin;
+
+ $log->log($_) for @output;
+
+ $log->err("Unable to check in $_", $status) if $status;
+ } # for
+ } else {
+ $log->msg("Checking in $element");
+
+ my $newElement = Clearcase::Element->new($element);
+
+ ($status, @output) = $newElement->checkin;
+
+ $log->log($_) for @output;
+
+ $log->err("Unable to check in $element", $status) if $status;
+ } # if
+
+ return;
+} # CheckIn
+
+sub ComparingFiles(@) {
+ my (@elements) = @_;
+
+ for (@elements) {
+ my @lines = ReadFile $_;
+
+ $log->err("Element $_ should contain only two lines", 2) if scalar @lines != 2;
+ } # for
+
+ return;
+} # ComparingFiles
+
+sub MakeElements(@) {
+ my (@elements) = @_;
+
+ for (@elements) {
+ $log->msg("Mkelem $_");
+
+ my $newElement = Clearcase::Element->new($_);
+
+ my ($status, @output) = $newElement->mkelem;
+
+ $log->log($_) for @output;
+
+ $log->err("Unable to make $_ an element", $status) if $status;
+ } # for
+
+ return;
+} # MakeElements
+
+sub RunTests() {
+ # Simple tests:
+ #
+ # . Create a few elements
+ # . Check them in
+ # . Check them out
+ # . Modify them
+ # . Check them in
+ #
+ # Assumptions:
+ #
+ # . $vob_tag is already created
+ # . $view_tag is already created
+ # . View is set and we are in the vob
+ # . There are no vob elements for @elements
+ my @elements = (
+ 'cctest.h',
+ 'ccsetup.c',
+ 'cctest.c',
+ 'Makefile',
+ );
+
+ $log->msg("$script: Start Base Clearcase Tests");
+ $log->msg('Removing test files');
+
+ unlink $_ for @elements;
+
+ $log->msg('Creating view private files');
+
+ CreateViewPrivateFiles @elements;
+
+ $log->msg('Making elements');
+
+ CheckOut '.';
+ MakeElements @elements;
+ CheckIn \@elements;
+ CheckIn '.';
+
+ $log->msg('Checking out files');
+
+ CheckOut \@elements;
+
+ $log->msg('Modifying files');
+
+ CreateViewPrivateFiles @elements;
+
+ $log->msg('Checking in files');
+
+ CheckIn \@elements;
+
+ $log->msg('Comparing files');
+
+ ComparingFiles @elements;
+
+ $log->msg("$script: End Base Clearcase Tests");
+
+ return 0;
+} # RunTests
+
+sub Cleanup(;$$$) {
+ my ($view, $vob) = @_;
+
+ my $status = 0;
+
+ $log->msg('Cleaning up');
+
+ if ($view && $view->exists) {
+ $status += DestroyView($view);
+ } # if
+
+ if ($vob && $vob->exists) {
+ $status += DestroyVob($vob);
+ } # if
+
+ return $status;
+} # Cleanup
+
+sub CleanupUCM() {
+ my ($rc, $status, @output);
+
+ $log->msg('Removing ' . $test_activity->name);
+
+ ($rc, @output) = $test_activity->remove;
+
+ $status += $rc;
-display YELLOW . "Global Clearcase Variables\n" . RESET;
+ $log->log($_) for @output;
+
+ # Need to remove baselines from streams first using rebase (Devstream)
+ $log->msg('Rebasing ' . $test_devstream->name . ' to remove baseline');
+
+ $status += RebaseStream(
+ $test_devstream,
+ ' -dbaseline ' . $test_baseline->name . '@' . $test_baseline->pvob->tag .
+ ' -view ' . $test_devview->name . ' -complete',
+ );
+
+ # Change intstream to not have a recommended baseline
+ $log->msg('Changing ' . $test_intstream->name . ' to remove recommended baseline');
+
+ ($rc, @output) = $test_intstream->nrecommended;
+
+ $status += $rc;
+
+ $log->log($_) for @output;
+
+ $status += DestroyView($test_devview);
+
+ $log->msg('Removing ' . $test_baseline->name);
+
+ ($rc, @output) = $test_baseline->remove;
+
+ $status += $rc;
+
+ $log->log($_) for @output;
+
+ $log->msg('Rebasing ' . $test_intstream->name . ' to remove INITIAL baseline');
+
+ $status += RebaseStream(
+ $test_intstream,
+ ' -dbaseline tc.component_INITIAL' . '@' . $test_intstream->pvob->tag .
+ ' -view ' . $test_intview->name . ' -complete',
+ );
+
+ $log->msg('Removing ' . $test_component->name . ' from ' . $test_project->name);
+
+ ($rc, @output) = $test_project->change(
+ '-dmodcomp ' . $test_component->name . '@' . $test_project->pvob->tag
+ );
+
+ $status += $rc;
+
+ $log->log($_) for @output;
+
+ $log->msg('Removing ' . $test_component->name);
+
+ ($rc, @output) = $test_component->remove;
+
+ $status += $rc;
+
+ $log->log($_) for @output;
+
+ $status += DestroyView($test_intview);
+
+ $log->msg('Removing '. $test_devstream->name);
+
+ ($rc, @output) = $test_devstream->remove;
+
+ $status += $rc;
+
+ $log->log($_) for @output;
+
+ $log->msg('Removing ' . $test_intstream->name);
+
+ ($rc, @output) = $test_intstream->remove;
+
+ $status += $rc;
+
+ $log->log($_) for @output;
+
+ $log->msg('Removing ' . $test_project->name);
+
+ ($rc, @output) = $test_project->remove;
+
+ $status += $rc;
+
+ $log->log($_) for @output;
+
+ $log->msg('Removing ' . $test_folder->name);
+
+ ($rc, @output) = $test_folder->remove;
+
+ $status += $rc;
+
+ $log->log($_) for @output;
+
+ $log->msg('Removing ' . $test_pvob->name);
+
+ ($rc, @output) = DestroyVob($test_pvob);
+
+ $log->log($_) for @output;
+
+ return $status;
+} # CleanupUCM
+
+sub SetupTest($$) {
+ my ($vob_tag, $view_tag) = @_;
+
+ my ($status, @output);
+
+ $log->msg('Setup test environment');
+
+ my $view = Clearcase::View->new($view_tag);
+
+ if ($view->exists) {
+ $log->msg('Removing old view ' . $view_tag);
+
+ ($status, @output) = $view->remove;
+
+ $log->err('Unable to remove old view ' . $view->tag, $status) if $status;
+ } # if
+
+ ($status, $test_view) = CreateView($view_tag);
+
+ return $status if $status != 0;
+
+ $status = $test_view->start;
+
+ my $vob = Clearcase::Vob->new($vob_tag);
+
+ if ($vob->exists) {
+ $log->msg('Removing old vob ' . $vob_tag);
+
+ ($status, @output) = DestroyVob($vob);
+
+ $log->err('Unable to remove old vob '. $vob->tag, $status) if $status;
+ } # if
+
+ ($status, $test_vob) = CreateVob($vob_tag);
+
+ return $status if $status != 0;
+
+ $status = MountVob($test_vob);
+
+ return $status if $status != 0;
+
+ my $dir = $Clearcase::VIEWTAG_PREFIX . '/' . $test_view->tag . $test_vob->tag;
+
+ chdir $dir
+ or $log->err("Unable to chdir to $dir", ++$status);
+
+ ($status, @output) = $Clearcase::CC->execute("cd $dir");
+
+ if ($status != 0) {
+ $log->log($_) for @output;
+ } # if
+
+ return $status;
+} # SetupTest
+
+sub SetupUCMTest() {
+ my $status;
+
+ $log->msg("Creating UCM Pvob $Clearcase::VOBTAG_PREFIX/tc.pvob");
+
+ ($status, $test_pvob) = CreatePvob("$Clearcase::VOBTAG_PREFIX/tc.pvob");
+
+ return $status;
+} # SetupUCMTest
+
+sub CreateUCMProject() {
+ # Get the root folder to put this project into (may create folders later)
+ $test_folder = Clearcase::UCM::Folder->new('tc.folder', $test_pvob);
+
+ $test_project = Clearcase::UCM::Project->new('tc.project', $test_folder, $test_pvob);
+
+ $test_project->remove if $test_project->exists;
+
+ $log->msg('Creating UCM Project tc.project');
+
+ my ($status, @output) = $test_project->create;
+
+ $log->log($_) for @output;
+
+ return $status;
+} # CreateUCMProject
+
+sub CreateUCMIntStream() {
+ $test_intstream = Clearcase::UCM::Stream->new('tc.intstream', $test_pvob);
+
+ $log->msg('Creating UCM Stream tc.intstream');
+
+ my ($status, @output) = $test_intstream->create($test_project, '-integration');
+
+ $log->log($_) for @output;
+
+ return $status;
+} # CreateUCMIntStream
+
+sub CreateUCMDevStream() {
+ $test_devstream = Clearcase::UCM::Stream->new('tc.devstream', $test_pvob);
+
+ $log->msg('Creating UCM Stream tc.devstream');
+
+ my ($status, @output) = $test_devstream->create($test_project);
+
+ $log->log($_) for @output;
+
+ return $status;
+} # CreateUCMDevStream
+
+sub CreateUCMComponent() {
+ $test_component = Clearcase::UCM::Component->new('tc.component', $test_pvob);
+
+ $log->msg('Creating UCM Component tc.component');
+
+ my ($status, @output) = $test_component->create(
+ "$Clearcase::VIEWTAG_PREFIX/" . $test_intview->tag . $test_vob->tag
+ );
+
+ $log->log($_) for @output;
+
+ return $status;
+} # CreateUCMComponent
+
+sub AddModifiableComponent() {
+ my ($status, @output) = $Clearcase::CC->execute(
+ 'chproj -nc -amodcomp ' . $test_component->name . '@' . $test_pvob->tag .
+ ' ' . $test_project->name . '@' . $test_pvob->tag
+ );
+
+ $log->log($_) for @output;
+
+ return $status;
+} # AddModifiableCOmponent
+
+sub CreateUCMIntView() {
+ $log->msg("Creating UCM Int View tc.intview");
+
+ $test_intview = Clearcase::View->new('tc.intview');
+
+ my ($status, @output) = $test_intview->create(
+ $opts{viewhost}, "$opts{viewstore}/tc.intview.vws",
+ '-stream ' . $test_intstream->name . '@' . $test_pvob->tag
+ );
+
+ $log->log($_) for @output;
+
+ $test_intview->start unless $status;
+
+ return $status;
+} # CreateUCMIntView
+
+sub CreateUCMDevView() {
+ $log->msg("Creating UCM Dev View tc.devview");
+
+ $test_devview = Clearcase::View->new('tc.devview');
+
+ my ($status, @output) = $test_devview->create(
+ $opts{viewhost}, "$opts{viewstore}/tc.devview.vws",
+ '-stream ' . $test_devstream->name . '@' . $test_pvob->tag
+ );
+
+ $log->log($_) for @output;
+
+ $test_devview->start unless $status;
+
+ return $status;
+} # CreateUCMDevView
+
+sub CreateUCMBaseline() {
+ $test_baseline = Clearcase::UCM::Baseline->new('tc.baseline', $test_pvob);
+
+ $log->msg('Creating UCM Baseline tc.baseline');
+
+ my ($status, @output) = $test_baseline->create($test_intview, undef, '-identical');
+
+ $log->log($_) for @output;
+
+ return $status;
+} # CreateUCMBaseline
+
+sub CreateUCMActivity() {
+ $test_activity = Clearcase::UCM::Activity->new('tc.activity', $test_pvob);
+
+ $log->msg('Creating UCM Activity tc.activity');
+
+ my ($status, @output) = $test_activity->create($test_devstream, 'A UCM Test Activity');
+
+ $log->log($_) for @output;
+
+ return $status;
+} # CreateUCMActivity
+
+sub RebaseStream($$) {
+ my ($stream, $opts) = @_;
+
+ my ($status, @output) = $stream->rebase($opts);
+
+ $log->log($_) for @output;
+
+ return $status;
+} # RebaseStream
+
+sub RecommendBaseline($$) {
+ my ($stream, $baseline) = @_;
+
+ my ($status, @output) = $stream->recommend($baseline);
+
+ $log->log($_) for @output;
+
+ return $status;
+} # RecommentBaseline
+
+sub RunUCMTests() {
+ my $status = 0;
+
+ $log->msg("$script: Start UCM Clearcase Tests");
+
+ $status += CreateUCMProject;
+ $status += CreateUCMIntStream;
+ $status += CreateUCMDevStream;
+ $status += CreateUCMIntView;
+ $status += CreateUCMDevView;
+ $status += CreateUCMComponent;
+ $status += AddModifiableComponent;
+ $status += RebaseStream($test_intstream, '-baseline tc.component_INITIAL -complete');
+ $status += RecommendBaseline($test_intstream, 'tc.component_INITIAL');
+ $status += CreateUCMBaseline;
+ $status += RebaseStream($test_devstream, '-baseline tc.baseline -complete');
+ $status += RecommendBaseline($test_devstream, 'tc.baseline');
+ $status += CreateUCMActivity;
+
+ $log->msg("$script: End UCM Clearcase Tests");
+
+ return $status;
+} # RunUCMTests
+
+## Main
+my $startTime = time;
+my $conf_file = "$FindBin::Bin/$script.conf";
+my $status = 0;
+
+$opts{base} = 1;
+$opts{clean} = 1;
+
+GetOptions(
+ \%opts,
+ 'verbose' => sub { set_verbose },
+ 'debug' => sub { set_debug },
+ 'usage' => sub { Usage },
+ 'config=s',
+ 'base!',
+ 'ucm!',
+ 'clean!',
+) or Usage;
+
+# Read the config file
+if (-f $conf_file) {
+ %default_opts = GetConfig $conf_file;
+} else {
+ $log->err("Unable to find config file $conf_file", 1);
+} # if
+
+# Overlay default opts if not specified
+for (keys %default_opts) {
+ $opts{$_} = $default_opts{$_} if !$opts{$_};
+} # for
+
+$log->msg("$script: Start");
+
+LogOpts;
+
+# Since we are creating private vobs (to avoid complications with having to
+# know and code the registry password when making public vobs), we'll simply
+# change $Clearcase::VOBTAG_PREFIX
+$Clearcase::VOBTAG_PREFIX = $ENV{TMP} || '/tmp';
+
+if ($opts{base}) {
+ $status = SetupTest "$Clearcase::VOBTAG_PREFIX/tc.vob", 'tc.view';
+
+ if ($status == 0) {
+ $status += RunTests;
+ } else {
+ $log->err('Tests not run. Failure occurred in SetupTest - check logfile');
+ } # if
+
+ # Note if we are doing UCM tests then we need the view and vob here...
+ $status += Cleanup($test_view, $test_vob) if $opts{clean} and !$opts{ucm};
+
+ if ($status != 0) {
+ $log->err("$script: Failed (Base Clearcase)");
+ } else {
+ $log->msg("$script: Passed (Base Clearcase)");
+ } # if
+} # if
+
+if ($opts{ucm}) {
+ $status = SetupUCMTest;
+
+ if ($status == 0) {
+ $status += RunUCMTests;
+ } else {
+ $log->err('UCM Tests not run. Failure occurred in SetupUCMTest - check logfile');
+ } # if
+
+ if ($opts{clean}) {
+ $status += CleanupUCM;
+ $status += Cleanup($test_view, $test_vob);
+ } # if
+
+ if ($status != 0) {
+ $log->err("$script: Failed (UCM Clearcase)");
+ } else {
+ $log->msg("$script: Passed (UCM Clearcase)");
+ } # if
+} # if
+
+display_duration $startTime, $log;
+
+$log->msg("$script: End");
+
+exit $status;
+
+=pod
+
+=head1 CONFIGURATION AND ENVIRONMENT
+
+DEBUG: If set then $debug is set to this level.
+
+VERBOSE: If set then $verbose is set to this level.
+
+TRACE: If set then $trace is set to this level.
+
+=head1 DEPENDENCIES
+
+=head2 Perl Modules
+
+L<Cwd>
+
+L<FindBin>
+
+L<Getopt::Long|Getopt::Long>
+
+L<Term::ANSIColor|Term::ANSIColor>
-my $view_drive = $Clearcase::VIEW_DRIVE;
-my $vob_mount = $Clearcase::VOB_MOUNT;
-my $win_vob_prefix = $Clearcase::WIN_VOB_PREFIX;
-my $vobtag_prefix = $Clearcase::VOBTAG_PREFIX;
-my $countdb = $Clearcase::COUNTDB;
+=head2 ClearSCM Perl Modules
-display MAGENTA . "View Drive:\t\t" . RESET . $view_drive;
-display MAGENTA . "VOB Mount:\t\t" . RESET . $vob_mount;
-display MAGENTA . "Windows VOB prefix:\t" . RESET . $win_vob_prefix;
-display MAGENTA . "VOB Tag Prefix:\t\t" . RESET . $vobtag_prefix;
-display MAGENTA . "CountDB:\t\t" . RESET . $countdb;
+=begin man
-display CYAN . "\nGlobal Clearcase Configuration\n" . RESET;
+ Clearcase
+ Clearcase::Element
+ Clearcase::View
+ Clearcase::Views
+ Clearcase::Vob
+ Clearcase::Vobs
+ DateUtils
+ Display
+ GetConfig
+ Logger
+ OSDep
+ Utils
-display MAGENTA . "Client:\t\t\t" . RESET . $Clearcase::CC->client;
-display MAGENTA . "Hardware type:\t\t" . RESET . $Clearcase::CC->hardware_type;
-display MAGENTA . "License host:\t\t" . RESET . $Clearcase::CC->license_host;
-display MAGENTA . "OS:\t\t\t" . RESET . $Clearcase::CC->os;
-display MAGENTA . "Region:\t\t\t" . RESET . $Clearcase::CC->region;
-display MAGENTA . "Registry host:\t\t" . RESET . $Clearcase::CC->registry_host;
-display MAGENTA . "Sitename:\t\t" . RESET . $Clearcase::CC->sitename;
-display MAGENTA . "Version:\t\t" . RESET . $Clearcase::CC->version;
+=end man
-display GREEN . "\nCleartool Access\n" . RESET;
+=begin html
-display_nolf MAGENTA . "Views:\t" . RESET;
+<blockquote>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase.pm">Clearcase</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase/Element.pm">Element</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase/View.pm">View</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase/Views.pm">Views</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase/Vob.pm">Vob</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase/Vobs.pm">Vobs</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase/UCM.pm">UCM</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase/UCM/Activity.pm">Activity</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase/UCM/Baseline.pm">Baseline</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase/UCM/Component.pm">Component</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase/UCM/Project.pm">Project</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase/UCM/Pvob.pm">Pvob</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Clearcase/UCM/Stream.pm">Stream</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/DateUtils.pm">DateUtils</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Display.pm">Display</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/GetConfig.pm">GetConfig</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Logger.pm">Logger</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/OSDep.pm">OSDep</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Utils.pm">Utils</a><br>
+</blockquote>
-($status, @output) = $Clearcase::CC->execute ("lsview -s");
+=end html
-display scalar @output;
+=head1 BUGS AND LIMITATIONS
-display_nolf MAGENTA . "VOBs:\t" . RESET;
+There are no known bugs in this script
-($status, @output) = $Clearcase::CC->execute ("lsvob -s");
+Please report problems to Andrew DeFaria <Andrew@ClearSCM.com>.
-display scalar @output;
+=head1 LICENSE AND COPYRIGHT
-($status, @output) = $Clearcase::CC->execute ("invalid command");
+Copyright (c) 2010, ClearSCM, Inc. All rights reserved.
-display $_ foreach (@output);
+=cut