X-Git-Url: https://defaria.com/gitweb/?a=blobdiff_plain;f=clients%2FAmeriquest%2Fbin%2Ftagit.pl;fp=clients%2FAmeriquest%2Fbin%2Ftagit.pl;h=9696b946683f9f41847a85c875f81b47c1e19021;hb=a8c84d2892f07a6863b68a11eb0a4a79ffd71fb5;hp=0000000000000000000000000000000000000000;hpb=95384f94f88aceeb5eef2d322210ba4a438b6512;p=clearscm.git diff --git a/clients/Ameriquest/bin/tagit.pl b/clients/Ameriquest/bin/tagit.pl new file mode 100644 index 0000000..9696b94 --- /dev/null +++ b/clients/Ameriquest/bin/tagit.pl @@ -0,0 +1,183 @@ +#!/usr/bin/perl -w +################################################################################# +# +# File: tagit +# Description: Script to tag views or vobs into the current region. The main +# motivation for this script is to be able to tag things quickly +# and easily. As such we employ heuristics to find these objects. +# Author: Andrew@DeFaria.com +# Created: Fri Apr 9 12:19:04 PDT 2004 +# Language: Perl +# +# (c) Copyright 2004, Andrew@DeFaria.com, all rights reserved. +# +################################################################################ +use strict; +use File::Spec; + +my $me; + +BEGIN { + # Extract relative path and basename from script name. + $0 =~ /.*[\/\\](.*)/; + $me = (!defined $1) ? $0 : $1; +} # BEGIN + +# Check to see if we are running on Windows +my $windows = ($^O =~ /MSWin/) ? "yes" : "no"; +my $null = $windows eq "yes" ? "NUL" : "/dev/null"; +my $backslashes = $windows eq "yes" ? "\\" : "\\\\"; + +sub Usage { + print "Usage $me: [[ -view ] ] [ -vob ]\n"; + print "\nWhere:\n"; + print "\t-view\tView tag to tag in current region\n"; + print "\t-vob\tVob tag to tag in current region\n"; + exit 1; +} # Usage + +sub GetCurrentRegion { + my @lines = `cleartool hostinfo -l`; + + foreach (@lines) { + chomp; chop $_ if /\r/; + + if (/Registry region: (\S+)/) { + return $1; + } # if + } # foreach + + return undef; +} # GetCurrentRegion + +my $current_region = GetCurrentRegion; +my @regions = `cleartool lsregion`; + +sub FindView { + my $view_tag = shift; + + foreach (@regions) { + chomp; chop if /\r/; + + my $output = `cleartool lsview -region $_ $view_tag 2> $null`; + chomp $output; chop $output if /\r/; + + if ($output =~ /$view_tag\s*(.*)/) { + my $view_storage = $1; + $view_storage =~ tr /\\/\/\//; + return ($view_storage, $_); + } # if + } # foreach + + return; +} # FindView + +sub FindVob { + my $vob_tag = shift; + + foreach (@regions) { + chomp; chop if /\r/; + + my $output = `cleartool lsvob -region $_ $backslashes$vob_tag 2> $null`; + chomp $output; chop $output if /\r/; + + if ($output =~ /$vob_tag\s*(\S*)/) { + my $vob_storage = $1; + $vob_storage =~ tr /\\/\/\//; + return ($vob_storage, $_); + } # if + } # foreach + + return; +} # FindVob + +sub MkViewTag { + my $view_tag = shift; + my $view_storage = shift; + + # Check to see if view tag already exists + if (!system "cleartool lsview $view_tag > $null 2>&1") { + print "$view_tag already exists in $current_region\n"; + return 0; + } else { + if (system "cleartool mktag -view -tag $view_tag $view_storage") { + die "Unable to make view tag: $view_tag in $current_region\n"; + } # if + return 1; + } # if +} # MkViewTag + +sub MkVobTag { + my $vob_tag = shift; + my $vob_storage = shift; + + # Check to see if vob tag already exists + if (!system "cleartool lsvob $backslashes$vob_tag > $null 2>&1") { + print "$vob_tag already exists in $current_region\n"; + return 1; + } else { + print "cleartool mktag -vob -tag $backslashes$vob_tag $vob_storage\n"; + if (system "cleartool mktag -vob -tag $backslashes$vob_tag $vob_storage") { + die "Unable to make vob tag: $vob_tag in $current_region\n"; + } # if + return 0; + } # if +} # MkVobTag + +my $view_tag; +my $vob_tag; + +# Get parms +while ($#ARGV >= 0) { + if ($ARGV [0] eq "-u" or $ARGV [0] eq "-usage") { + Usage; + } # if + + if ($ARGV [0] eq "-vob") { + shift; + $vob_tag = $ARGV [0]; + # Script all backslashes - we'll re-add them when needed... + $vob_tag =~ s/\\//; + shift; + next; + } # if + + if ($ARGV [0] eq "-view") { + shift; + $view_tag = $ARGV [0]; + next; + } # if +} # while + +if (!(defined $view_tag or defined $vob_tag)) { + Usage "Must specify a view or a vob to tag!"; +} # if + +if (defined $view_tag) { + my ($view_storage, $view_region) = FindView $view_tag; + + die "Unable to find view $view_tag in any region!\n" if !defined $view_region; + die "Unable to find storage area for $view_tag\n" if !defined $view_storage; + + if ($view_region eq $current_region) { + print "$view_tag already exists in $current_region\n"; + } else { + print "$view_tag, from $view_region region, added to $current_region region\n" if MkViewTag $view_tag, $view_storage;; + } # if +} # if + +if (defined $vob_tag) { + my ($vob_storage, $vob_region) = FindVob $vob_tag; + + die "Unable to find vob $vob_tag in any region!\n" if !defined $vob_region; + die "Unable to find storage area for $vob_tag\n" if !defined $vob_storage; + + if ($vob_region eq $current_region) { + print "$vob_tag already exists in $current_region\n"; + } else { + print "$vob_tag, from $vob_region, added to $current_region region\n" if MkVobTag $vob_tag, $vob_storage;; + } # if +} # if + +exit 0; +