5 =head1 NAME $RCSfile: Stream.pl,v $
7 This trigger will update CCDB when streams are added or removed.
15 Andrew DeFaria <Andrew@ClearSCM.com>
23 Fri Mar 11 17:45:57 PST 2011
27 $Date: 2011/03/26 06:24:44 $
33 This trigger will update the CCDB when UCM streams are added or removed. It
34 is implemented as a post operation trigger on the mkstream and rmstream
35 Clearcase operations. It should be attached to all UCM vobs (i.e. pvobs) that
36 you wish CCDB to monitor. If using mktriggers.pl the trigger defintion is:
39 Description: Updates CCDB when a stream is made or removed
41 Opkinds: -postop mkstream,rmstream
55 $Data::Dumper::Indent = 0;
57 use lib $FindBin::Bin, "$FindBin::Bin/../lib", "$FindBin::Bin/../../lib";
62 triglog 'Starting trigger';
64 my $VERSION = '$Revision: 1.6 $';
65 ($VERSION) = ($VERSION =~ /\$Revision: (.*) /);
67 # UCM fires the mkstream trigger operation (CLEARCASE_OP_KIND=mkstream) twice,
68 # once with CLEARCASE_MTYPE set to stream and another time with it set to
69 # project. The reason for this is to update the project that we now have this
70 # new stream. Normally we would use this to update a table in CCDB regarding
71 # the relationship between UCM projects and streams, but we're not tracking that
72 # so we can simply exit.
74 if ($ENV{CLEARCASE_MTYPE} and $ENV{CLEARCASE_MTYPE} eq 'project');
76 my ($name, $pvob) = split /\@/, $ENV{CLEARCASE_STREAM};
78 trigdie 'Stream name not known', 1
81 trigdie 'Pvob name not known', 1
84 $pvob = vobname $pvob;
86 my $CCDBService = CCDBService->new;
88 trigdie 'Unable to connect to CCDBService', 1
89 unless $CCDBService->connectToServer;
91 my ($err, $msg, $request);
93 triglog "CLEARCASE_OP_KIND: $ENV{CLEARCASE_OP_KIND}";
95 if ($ENV{CLEARCASE_OP_KIND} eq 'mkstream') {
101 # Squeeze out extra spaces
102 $stream =~ s/ = /=/g;
103 $stream =~ s/ => /=>/g;
105 $request = "AddStream $stream";
106 } elsif ($ENV{CLEARCASE_OP_KIND} eq 'rmstream') {
107 $request = "DeleteStream $name $pvob";
108 } elsif ($ENV{CLEARCASE_OP_KIND} eq 'deliver_complete' or
109 $ENV{CLEARCASE_OP_KIND} eq 'rebase_complete') {
110 # Add $ENV{CLEARCASE_DLV_ACTS} to $ENV{CLEARCASE_BASELINES}.
111 $ENV{CLEARCASE_DLVR_ACTS} ||= '';
113 foreach (split / /, $ENV{CLEARCASE_DLVR_ACTS}) {
114 my ($activity) = split /\@/;
116 foreach (split / /, $ENV{CLEARCASE_BASELINES}) {
117 my ($baseline) = split /\@/;
119 my $baselineActivityXref = Dumper {
120 baseline => $baseline,
121 activity => $activity,
125 # Squeeze out extra spaces
126 $baselineActivityXref =~ s/ = /=/g;
127 $baselineActivityXref =~ s/ => /=>/g;
129 $request = "AddBaselineActivityXref $baselineActivityXref";
131 triglog "Executing request: $request";
133 ($err, $msg) = $CCDBService->execute ($request);
136 trigdie "Unable to execute request: $request\n"
137 . join ("\n", @$msg), $err
138 unless $err == 0 or $err == 1062;
145 triglog "Executing request: $request";
147 ($err, $msg) = $CCDBService->execute ($request);
149 trigdie "Unable to execute request: $request\n"
150 . join ("\n", @$msg), $err
153 $CCDBService->disconnectFromServer;
155 triglog 'Ending trigger';
161 =head1 CONFIGURATION AND ENVIRONMENT
163 DEBUG: If set then $debug is set to this level.
165 VERBOSE: If set then $verbose is set to this level.
167 TRACE: If set then $trace is set to this level.
175 L<Data::Dumper|Data::Dumper>
177 =head2 ClearSCM Perl Modules
189 <a href="http://clearscm.com/php/scm_man.php?file=CCDB/lib/CCDBService.pm">CCDBService</a><br>
190 <a href="http://clearscm.com/php/scm_man.php?file=CCDB/triggers/TriggerUtils.pm">TriggerUtils</a><br>
195 =head1 BUGS AND LIMITATIONS
197 There are no known bugs in this script
199 Please report problems to Andrew DeFaria <Andrew@ClearSCM.com>.
201 =head1 LICENSE AND COPYRIGHT
203 Copyright (c) 2011, ClearSCM, Inc. All rights reserved.