Changed cvs_man.php -> scm_man.php.
[clearscm.git] / CCDB / triggers / Stream.pl
1 #!/usr/bin/perl
2
3 =pod
4
5 =head1 NAME $RCSfile: Stream.pl,v $
6
7 This trigger will update CCDB when streams are added or removed.
8
9 =head1 VERSION
10
11 =over
12
13 =item Author
14
15 Andrew DeFaria <Andrew@ClearSCM.com>
16
17 =item Revision
18
19 $Revision: 1.6 $
20
21 =item Created:
22
23 Fri Mar 11 17:45:57 PST 2011
24
25 =item Modified:
26
27 $Date: 2011/03/26 06:24:44 $
28
29 =back
30
31 =head1 DESCRIPTION
32
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:
37  
38  Trigger:        CCDB_STREAM
39    Description:  Updates CCDB when a stream is made or removed
40    Type:         -element -all
41    Opkinds:      -postop mkstream,rmstream
42    ScriptEngine: Perl
43    Script:       Stream.pl
44    Vobs:         ucm
45  EndTrigger
46
47 =cut
48
49 use strict;
50 use warnings;
51
52 use FindBin;
53 use Data::Dumper;
54   
55 $Data::Dumper::Indent = 0;
56
57 use lib $FindBin::Bin, "$FindBin::Bin/../lib", "$FindBin::Bin/../../lib";
58
59 use TriggerUtils;
60 use CCDBService;
61
62 triglog 'Starting trigger';
63
64 my $VERSION  = '$Revision: 1.6 $';
65   ($VERSION) = ($VERSION =~ /\$Revision: (.*) /);
66
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.
73 exit 0
74   if ($ENV{CLEARCASE_MTYPE} and $ENV{CLEARCASE_MTYPE} eq 'project');
75
76 my ($name, $pvob) = split /\@/, $ENV{CLEARCASE_STREAM};
77
78 trigdie 'Stream name not known', 1
79   unless $name;
80
81 trigdie 'Pvob name not known', 1
82   unless $pvob;
83
84 $pvob = vobname $pvob;
85
86 my $CCDBService = CCDBService->new;
87
88 trigdie 'Unable to connect to CCDBService', 1
89   unless $CCDBService->connectToServer;
90
91 my ($err, $msg, $request);
92
93 triglog "CLEARCASE_OP_KIND: $ENV{CLEARCASE_OP_KIND}";
94
95 if ($ENV{CLEARCASE_OP_KIND} eq 'mkstream') {
96   my $stream = Dumper {
97     name => $name,
98     pvob => $pvob
99   };
100   
101   # Squeeze out extra spaces
102   $stream =~ s/ = /=/g;
103   $stream =~ s/ => /=>/g;
104   
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} ||= '';
112   
113   foreach (split / /, $ENV{CLEARCASE_DLVR_ACTS}) {
114     my ($activity) = split /\@/;
115
116     foreach (split / /, $ENV{CLEARCASE_BASELINES}) {
117       my ($baseline) = split /\@/;
118       
119       my $baselineActivityXref = Dumper {
120         baseline => $baseline,
121         activity => $activity,
122         pvob     => $pvob,
123       };
124     
125       # Squeeze out extra spaces
126       $baselineActivityXref =~ s/ = /=/g;
127       $baselineActivityXref =~ s/ => /=>/g;
128   
129       $request = "AddBaselineActivityXref $baselineActivityXref";
130       
131       triglog "Executing request: $request";
132
133       ($err, $msg) = $CCDBService->execute ($request);
134       
135       # Just ignore dups
136       trigdie "Unable to execute request: $request\n"
137             . join ("\n", @$msg), $err
138         unless $err == 0 or $err == 1062;
139     } # foreach
140   } # foreach
141   
142   exit 0;
143 } # if
144
145 triglog "Executing request: $request";
146
147 ($err, $msg) = $CCDBService->execute ($request);
148
149 trigdie "Unable to execute request: $request\n"
150       . join ("\n", @$msg), $err
151   if $err;
152   
153 $CCDBService->disconnectFromServer;
154
155 triglog 'Ending trigger';
156
157 exit 0;
158
159 =pod
160
161 =head1 CONFIGURATION AND ENVIRONMENT
162
163 DEBUG: If set then $debug is set to this level.
164
165 VERBOSE: If set then $verbose is set to this level.
166
167 TRACE: If set then $trace is set to this level.
168
169 =head1 DEPENDENCIES
170
171 =head2 Perl Modules
172
173 L<FindBin>
174
175 L<Data::Dumper|Data::Dumper>
176
177 =head2 ClearSCM Perl Modules
178
179 =begin man 
180
181  CCDBSerivce
182  TriggerUtils
183
184 =end man
185
186 =begin html
187
188 <blockquote>
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>
191 </blockquote>
192
193 =end html
194
195 =head1 BUGS AND LIMITATIONS
196
197 There are no known bugs in this script
198
199 Please report problems to Andrew DeFaria <Andrew@ClearSCM.com>.
200
201 =head1 LICENSE AND COPYRIGHT
202
203 Copyright (c) 2011, ClearSCM, Inc. All rights reserved.
204
205 =cut
206