ea2f76763ad6914a252112b624b00ad2c6aec2ee
[clearscm.git] / CCDB / triggers / Activity.pl
1 #!/usr/bin/perl
2
3 =pod
4
5 =head1 NAME $RCSfile: Activity.pl,v $
6
7 This trigger will update CCDB when activities 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/04/02 00:28:21 $
28
29 =back
30
31 =head1 DESCRIPTION
32
33 This trigger will update the CCDB when UCM activities are added or removed. It
34 is implemented as a post operation trigger on the mkactivity and rmactivity
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_ACTIVITY
39    Description:  Updates CCDB when activities are made or removed
40    Type:         -element -all
41    Opkinds:      -postop mkactivity,rmactivity,chactivity
42    ScriptEngine: Perl
43    Script:       Activity.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 my $VERSION  = '$Revision: 1.6 $';
63   ($VERSION) = ($VERSION =~ /\$Revision: (.*) /);
64   
65 triglog 'Starting trigger';
66   
67 TriggerUtils::dumpenv;
68
69 my ($name, $pvob) = split /\@/, $ENV{CLEARCASE_ACTIVITY};
70 my ($stream)      = split /\@/, $ENV{CLEARCASE_STREAM};
71
72 trigdie 'Activity name not known', 1
73   unless $name;
74
75 trigdie 'Pvob name not known', 1
76   unless $pvob;
77
78 $pvob = vobname $pvob;
79
80 my $CCDBService = CCDBService->new;
81
82 trigdie 'Unable to connect to CCDBService', 1
83   unless $CCDBService->connectToServer;
84   
85 my ($err, $msg, $request);
86
87 triglog "CLEARCASE_OP_KIND: $ENV{CLEARCASE_OP_KIND}";
88
89 if ($ENV{CLEARCASE_OP_KIND} eq 'mkactivity') {
90   my $activity = Dumper {
91     name => $name,
92     pvob => $pvob,
93     type => $name !~ /^(deliver|rebase|integrate|revert|tlmerge)/i
94           ? 'regular'
95           : 'integration',
96   };
97   
98   # Squeeze out extra spaces
99   $activity =~ s/ = /=/g;
100   $activity =~ s/ => /=>/g;
101   
102   $request = "AddActivity $activity";
103   
104   triglog "Executing request: $request";
105   
106   ($err, $msg) = $CCDBService->execute ($request);
107
108   trigdie "Activity: Unable to execute request: $request\n"
109         . join ("\n", @$msg), $err
110     if $err;
111   
112   triglog "Success";
113   
114   my $streamActivityXref = Dumper {
115     stream   => $stream,
116     activity => $name,
117     pvob     => $pvob,
118   };
119   
120   # Squeeze out extra spaces
121   $streamActivityXref =~ s/ = /=/g;
122   $streamActivityXref =~ s/ => /=>/g;
123   
124   $request = "AddStreamActivityXref $streamActivityXref"
125 } elsif ($ENV{CLEARCASE_OP_KIND} eq 'rmactivity') {
126   # Note: The delete on cascade option in the MySQL database for CCDB should
127   # handle clean up of any associated records like any stream_activity_xref
128   # records.
129   $request = "DeleteActivity $name $pvob";
130 } elsif ($ENV{CLEARCASE_OP_KIND} eq 'chactivity') {
131   # Need to move changeset items from $ENV{CLEARCASE_ACTIVITY} -> 
132   # $ENV{CLEARCASE_TO_ACTIVITY}. I believe we will be called once for each
133   # element version since it says that CLEARCASE_ID_STR will be set and 
134   # CLEARCASE_ID_STR uniquely identifies an element/version
135   triglog "Processing chactivity";
136   
137   my ($fromActivity) = split /@/, $ENV{CLEARCASE_ACTIVITY};
138   
139   my ($toActivity) = split /@/, $ENV{CLEARCASE_TO_ACTIVITY};
140   
141   my $update = Dumper {
142     activity => $toActivity
143   };
144   
145   # Squeeze out extra spaces
146   $update =~ s/ = /=/g;
147   $update =~ s/ => /=>/g;
148   
149   my $elementName = $ENV{CLEARCASE_PN};
150      $elementName =~ s/\\/\//g;
151      $elementName = removeViewTag $elementName;
152   my $version     = $ENV{CLEARCASE_ID_STR};
153      $version     =~ s/\\/\//g;
154   
155   $request  = "UpdateChangeset $fromActivity $elementName ";
156   $request .= "$version $pvob $update";
157 } # if
158
159 triglog "Executing request: $request";
160   
161 ($err, $msg) = $CCDBService->execute ($request);
162
163 trigdie "Activity: Unable to execute request: $request\n"
164       . join ("\n", @$msg), $err
165   if $err;
166
167 triglog "Success";
168
169 $CCDBService->disconnectFromServer;
170
171 triglog 'Ending trigger';
172
173 exit 0;
174
175 =pod
176
177 =head1 CONFIGURATION AND ENVIRONMENT
178
179 DEBUG: If set then $debug is set to this level.
180
181 VERBOSE: If set then $verbose is set to this level.
182
183 TRACE: If set then $trace is set to this level.
184
185 =head1 DEPENDENCIES
186
187 =head2 Perl Modules
188
189 L<FindBin>
190
191 L<Data::Dumper|Data::Dumper>
192
193 =head2 ClearSCM Perl Modules
194
195 =begin man 
196
197  CCDBSerivce
198  TriggerUtils
199
200 =end man
201
202 =begin html
203
204 <blockquote>
205 <a href="http://clearscm.com/php/cvs_man.php?file=CCDB/lib/CCDBService.pm">CCDBService</a><br>
206 <a href="http://clearscm.com/php/cvs_man.php?file=CCDB/triggers/TriggerUtils.pm">TriggerUtils</a><br>
207 </blockquote>
208
209 =end html
210
211 =head1 BUGS AND LIMITATIONS
212
213 There are no known bugs in this script
214
215 Please report problems to Andrew DeFaria <Andrew@ClearSCM.com>.
216
217 =head1 LICENSE AND COPYRIGHT
218
219 Copyright (c) 2011, ClearSCM, Inc. All rights reserved.
220
221 =cut