Perl
# Inicio de Global Script UCU_CQActBeforeChact
sub UCU_CQActBeforeChact {
# el módulo Perl inglés se necesita para utilizar la variable OSNAME
use English;
if ( $OSNAME =~ /Win/i ) {
# Vía de acceso UNC para la compilación de CtCmd.pm para Windows
unshift ( @INC, "//otterpop/c/Progra\~1/Perl/site/lib/ClearCase" );
}
else {
# Vía de acceso NFS para la compilación de CtCmd.pm para Solaris
# si se van a utilizar otras plataformas, este bloque también debe comprobar el
# sistema Unix y la plataforma Linux y establecer la vía de acceso de inclusión
# según corresponda.
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) = @_;
# ---
# SQUID invoca este enganche de registro para invocar la política "Realizar acción
# de ClearQuest antes de cambiar actividad". Si la actividad no está en un proyecto
# de corriente de datos única, o bien, no está en una corriente de datos de
# integración del proyecto, la actividad de cambio de UCM debe dar error.
#
# ENTRADA:
# - El parámetro debe ser una serie con este formato:
# "tipo-entidad|id-entidad|info_proyecto|info_corrienteDatos"
# (las barras verticales
son delimitadores)
# que representa el vínculo de entidad a SUM_Project que se ha
# entregado, y si la entidad es válida o no
# SALIDA:
# - Si la entidad es válida, devuelve una serie vacía
# - Si la entidad no es válida, devuelve una serie
# que se muestra como un mensaje de error.
# ---
# Analizar la serie de parámetro, pero ignorar
# project_info y stream_info
en este ejemplo
my $entity_type;
my $entity_id;
my $project_info;
my $stream_info;
($entity_type, $entity_id, $project_info, $stream_info) = split ('\|',
$param);
# Crea instancia CtCmd
my $inst_cc = ClearCase::CtCmd->new();
# obtener corriente de datos padre y tipo de corriente de datos
my $status;
my $stream;
my $istream;
my $str_type;
my $project;
# obtener el nombre de corriente de datos de entity_id
($status, $stream) =
$inst_cc->exec("des","-fmt","%[stream]p",$entity_id);
# obtener el nombre del proyecto de la corriente de datos
($status, $project) = $inst_cc->exec("des","-fmt","%[project]p",$stream);
# obtener el nombre de la corriente de datos de integración del proyecto
($status, $istream) = $inst_cc->exec("des","-fmt","%[istream]p",
$project);
# obtener tipo de proyecto padre (nota: fmt de modelo está dividido
# en MCK, devuelve
serie en blanco)
my $proj_type;
($status, $proj_type) =
$inst_cc->exec("des","-fmt","%[model]p",$project);
# averiguar si el proyecto es una corriente de datos única o la
# corriente de datos padre
# una corriente de datos de integración
# NOTA: si proj_type es SIMPLE, la corriente de datos siempre
# debe ser una
corriente de datos de integración
if ( ($proj_type !~ "SIMPLE") && ($stream !~ $istream) ) {
$result = "Unable to change activity";
}
else {
$result = "";
}
return $result;
}
# Fin de Global Script UCU_CQActBeforeChact