Come utilizzare CtCmd per UCM e Rational ClearQuest

Perl

# Start of Global Script UCU_CQActBeforeChact



sub UCU_CQActBeforeChact {
# the English Perl module is necessary for the use of the OSNAME variable

use English;

if ( $OSNAME =~ /Win/i ) {

    # UNC path to CtCmd.pm built for Windows

    unshift ( @INC, "//otterpop/c/Progra\~1/Perl/site/lib/ClearCase" );

} 

else {

    # NFS path to CtCmd.pm built for Solaris

    # if other platforms will be used, this block should also check for the 

    # Unix system and Linux platform and set the include path accordingly.

    unshift ( @INC, 
"/net/qsun176/usr1/rational/common/lib/perl5/site_perl/5.6.1/sun4-solaris-mu
lti/ClearCase" );

}

    require ("CtCmd.pm");

    my ($result);

    my ($param) = @_;

    # ---

    # This record hook is invoked by SQUID to invoke the "Perform ClearQuest

    # Action Before Changing Activity" policy. If the activity is not in

    # a single stream project, or is not in the project's integration

    # stream, the UCM change activity should fail.

    #

    # INPUT:

    #  - Param must be a string with this format:

    #     "entity-type|entity-id|project_info|stream_info" (vertical bars are 
delimeters)

    #    which represents the entity bound to the SUM_Project which was

    #    delivered, and whether the entity is valid or not

    # OUTPUT:

    #  - If the entity is valid, this returns an empty string

    #  - If the entity is not valid, this returns a string

    #    to be displayed as an error message.

    # ---

    # Parse the param string, but we will ignore project_info and stream_info 
in this example

    my $entity_type;

    my $entity_id;

    my $project_info;

    my $stream_info;

    ($entity_type, $entity_id, $project_info, $stream_info) = split ('\|', 
$param);

    # Create CtCmd instance

    my $inst_cc = ClearCase::CtCmd->new();

    # get parent stream and stream type

    my $status;

    my $stream;

    my $istream;

    my $str_type;

    my $project;

    # get the stream name from the entity_id

    ($status, $stream) = 
$inst_cc->exec("des","-fmt","%[stream]p",$entity_id);

    # get the project name from the stream

    ($status, $project) = $inst_cc->exec("des","-fmt","%[project]p",$stream);

    # get the name of the project's integration stream

    ($status, $istream) = $inst_cc->exec("des","-fmt","%[istream]p", 
$project);

    # get parent project type (note: model fmt is broken in MCK, returns blank 
string)

    my $proj_type;

    ($status, $proj_type) = 
$inst_cc->exec("des","-fmt","%[model]p",$project);

    # find out if project is single stream or parent stream is 

    # integration stream

    #  NOTE: if proj_type is SIMPLE, then stream should always be an 
integration stream

    if ( ($proj_type !~ "SIMPLE") && ($stream !~ $istream) ) {

        $result = "Unable to change activity";

    }

    else {

        $result = "";

    }

    return $result;

}

# End of Global Script UCU_CQActBeforeChact 

Feedback