Added client work scripts
[clearscm.git] / clients / Ameriquest / triggers / CommentSQLCode.pl
diff --git a/clients/Ameriquest/triggers/CommentSQLCode.pl b/clients/Ameriquest/triggers/CommentSQLCode.pl
new file mode 100644 (file)
index 0000000..038794a
--- /dev/null
@@ -0,0 +1,153 @@
+#!/usr/bin/perl
+################################################################################
+#
+# File:         CommentSQLCode.pl
+# Description:  This trigger script will gather certain information and write
+#              that information into the element being checked in in the form
+#              of a comment.
+#
+#              Here are the requirements as I understand them for the
+#              trigger that Steve Lipson wants for the SQL
+#              checkins. Basically he desires a trigger that will
+#              capture the checkin comment and other information and
+#              insert that information in the form of a comment at
+#              the top of the checked in element. This trigger will:
+#
+#                      * Be a postop trigger for the checkin action
+#                      * Not be an all element trigger rather it will
+#                      be attached to certain file elements in the
+#                      vob
+#                      * Be made for the <fill in vob name here> vob
+#                      * Only work on file elements - directory
+#                      elements are to be skipped
+#                      * Only work on file elements that have an
+#                      extension of .sql - other elements will be
+#                      skipped
+#
+# Author:       Andrew@DeFaria.com
+# Created:      Mon Jul 19 10:54:01 PDT 2004
+# Language:     Perl
+# Modifications:Wed Aug  4 12:41:47 PDT 2004
+#
+# (c) Copyright 2004, Andrew@DeFaria.com, all rights reserved
+#
+################################################################################
+use strict;
+use warnings;
+use File::Spec;
+
+# This will be set in the BEGIN block but by putting them here the become
+# available for the whole script.
+my (
+  $abs_path,
+  $lib_path,
+  $log_path,
+  $me,
+  $triggers_path
+);
+
+BEGIN {
+  # Extract relative path and basename from script name.
+  $0 =~ /(.*)[\/\\](.*)/;
+
+  $abs_path    = (!defined $1) ? "." : File::Spec->rel2abs ($1);
+  $me          = (!defined $2) ? $0  : $2;
+
+  # Setup paths
+  $lib_path            = "$abs_path/../lib";
+  $log_path            = "$abs_path/../log";
+  $triggers_path       = "$abs_path/../triggers";
+
+  # Add the appropriate path to our modules to @INC array.
+  unshift (@INC, "$lib_path");
+} # BEGIN
+
+use TriggerUtils;
+
+sub getCurrentTime {
+  my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime (time);
+  $mon++;
+  $year += 1900;
+  $hour = "0" . $hour if $hour < 10;
+  $min  = "0" . $min  if $min  < 10;
+  return "$mon/$mday/$year\@$hour:$min";
+} # getCurrentTime
+
+sub parseLSActivity {
+  my ($activity_id, $activity_title, $activity_owner);
+
+  my @output = `cleartool lsactivity -cact -long`;
+
+  if ($? ne 0 || $#output eq -1) {
+    clearmsg "You are not set to an activity!";
+    exit 1;
+  } # if
+
+  foreach (@output) {
+    if (/^activity \"(\S*)\"/) {
+      $activity_id = $1;
+      next;
+    } elsif (/owner: AMERIQUEST\\(\S*)/) {
+      $activity_owner = $1;
+      next;
+    } elsif (/title: (.*)/) {
+      $_ = $1;
+      chomp; chop if /\r/;
+      $activity_title = $_;
+      next;
+    } # if
+  } # foreach
+
+  return ($activity_id, $activity_owner, $activity_title);
+} # parseLSActivity
+
+# Get name of element and its type
+my $pname        = $ENV{CLEARCASE_PN};
+my $element_type = $ENV{CLEARCASE_ELTYPE};
+
+# Skip directories and elements that aren't .sql
+exit if $element_type =~ /directory/i || $pname !~ /\.sql$/i;
+
+# Get comment and user
+my $comment   = $ENV{CLEARCASE_COMMENT};
+my $userid    = $ENV{CLEARCASE_USER};
+
+# Format timestamp
+my $timestamp = getCurrentTime;
+
+# Parse output of lsactivity -cact -long
+my ($activity_id, $activity_owner, $activity_title) = parseLSActivity;
+
+# Open up $pname for reading and $pname.trig for writting
+open PNAME_IN, $pname
+  or clearlogmsg "Unable to open $pname for reading - $!\n", exit 1;
+
+open PNAME_OUT, ">$pname.trig"
+  or clearlogmsg "Unable to open $pname.trig for writing - $!\n", exit 1;
+
+# Add comment to top of file
+my $activity_str       = "$activity_id: $activity_title";
+my $owner_str          = $activity_owner =~ /\$userid/i ? "$activity_owner ($userid)" : "$activity_owner";
+
+print PNAME_OUT <<END;
+-- Date:\t$timestamp
+-- Activity:\t$activity_str
+-- Owner:\t$owner_str
+-- Comment:\t$comment
+--------------------------------------------------------------------------------\n
+END
+
+# Append $pname
+while (<PNAME_IN>) {
+  print PNAME_OUT $_;
+} # while
+
+close PNAME_IN;
+close PNAME_OUT;
+
+# Switch $pname.trig -> $pname
+rename "$pname.trig", $pname
+  or clearlogmsg "Internal error - Unable to rename $pname.trig to $pname", exit 1;
+
+# Allow checkin to proceed
+exit 0;