Added client work scripts
[clearscm.git] / clients / Salira / CheckinPostop.pl
diff --git a/clients/Salira/CheckinPostop.pl b/clients/Salira/CheckinPostop.pl
new file mode 100644 (file)
index 0000000..61147d5
--- /dev/null
@@ -0,0 +1,102 @@
+#!/usr/bin/perl -w
+################################################################################
+#
+# File:         CheckinPostop.pl
+# Description:  This script is run on check in post op. It will pick up the
+#              bug IDs from the comment and label the elements that have just
+#              been checked in.
+# Author:       Andrew@DeFaria.com
+# Created:      Fri Oct 26 15:32:12  2001
+# Language:     Perl
+# Modifications:10/22/2002: Changed to not complain about missing bug IDs if
+#              the branch was main.
+#              04/11/2003: Changed to support multiple bug IDs in the comment.
+# (c) Copyright 2003, Andrew@DeFaria.com, all rights reserved
+#
+################################################################################
+use strict;
+
+BEGIN {
+  # Add the appropriate path to our modules to @INC array. We use ipconfig to
+  # get the current host's IP address then determine whether we are in the US
+  # or China. If neither then we fallback to using T:/Triggers.
+  my @ipconfig = grep (/IP Address/, `ipconfig`);
+  my ($ipaddr) = ($ipconfig[0] =~ /(\d{1,3}\.\d{1,3}.\d{1,3}\.\d{1,3})/);
+
+  # US is in the subnets of 192 and 172 while China is in the subnet of 10
+  if ($ipaddr =~ /^192|^172/) {
+    unshift (@INC, "//sons-clearcase/Views/official/Tools/lib");
+  } elsif ($ipaddr =~ /^10/) {
+    unshift (@INC, "//sons-cc/Views/official/Tools/lib");
+  } else {
+    die "Internal Error: Unable to find our modules!\n"
+  } # if
+} # BEGIN
+
+use TriggerUtils;
+
+# The following environment variables are set by Clearcase when this
+# trigger is called
+my $comment = $ENV{CLEARCASE_COMMENT};
+my $branch  = $ENV{CLEARCASE_BRTYPE};
+my $pname   = $ENV{CLEARCASE_PN};
+my $user    = $ENV{CLEARCASE_USER};
+
+sub ExtractBugIDs {
+  my $comment = shift;
+
+  my @fields  = split /\W/,$comment;
+
+  # Use associative array to insure uniqueness
+  my %bugids;
+  # Return unique array
+  my @bugids;
+
+  foreach (@fields) {
+    if (/BUGS2[0-9]{8}/) {
+      $bugids{$_} = $_;
+    } # if
+  } # foreach
+
+  foreach (keys %bugids) {
+    push @bugids, $_;
+  }
+
+  return @bugids;
+} # ExtractBugIDs
+
+sub mklabel {
+  my $label = shift;
+
+  my $result = system "cleartool lstype lbtype:$label@\\salira";
+
+  return $result if ($result eq 0);
+
+  $result = system "cleartool mklbtype -nc -shared -pbranch $label@\\salira";
+
+  if ($result eq 0) {
+    clearlog "Created label for $label";
+  } else {
+    clearlogmsg "Unable to mklbtype for $label (Error #: $result)";
+  } # if
+
+  return $result;
+} # mklabel
+
+foreach my $bugid (ExtractBugIDs ($comment)) {
+  if (mklabel ($bugid) eq 0) {
+    my $result = system "cleartool mklabel -replace $bugid \"$pname\"";
+
+    if ($result ne 0) {
+      clearlogmsg "Unable to apply label $bugid to $pname (Error #: $result)";
+      exit 1;
+    } else {
+      clearlog "Attached label $bugid to $pname";
+    } # if
+
+    clearlog "Successful postcheckin of $pname on $branch branch with bug ID $bugid";
+  } # if
+
+} # foreach
+
+exit 0;