Initial add of defaria.com
[clearscm.git] / defaria.com / Computers / code / bin / clearcase / label
1 #!/bin/bash
2 ################################################################################
3 #
4 # File:         label
5 # Description:  Applies a label to the vob, creating the lbtype if needed.
6 # Author:       Andrew@DeFaria.com
7 # Created:      Wed Jun 11 13:22:11 PDT 2003
8 # Language:     Bash Shell
9 # Modifications:
10 #
11 # (c) Copyright 2003, Andrew@DeFaria.com, all rights reserved
12 #
13 ################################################################################
14 # Set me to command name
15 me=$(basename $0)
16
17 # Source /etc/site_parms
18 if [ -f /etc/site_parms ]; then
19   . /etc/site_parms
20 else
21   echo "$me: WARNING: /etc/site_parms does not exist!"
22 fi
23
24 # Set adm_base
25 adm_base="$SITE_TOOLS_PATH/adm"
26
27 # Set adm_fpath
28 adm_fpath=${adm_fpath:-$adm_base/functions}
29
30 # Source functions
31 . $adm_fpath/common
32
33 # Commands used
34 ssmtp=/usr/sbin/ssmtp
35
36 # Set a logfile for the merge
37 logfile=/tmp/$me.$$.log
38
39 function usage {
40   if [ ! -z "$1" ]; then
41     error "$1\n"
42   fi
43   display "Usage: $me: -l|abel <label> [-da|ted] [-lo|ck] [-m|ove]"
44   display "\t      [-v|erbose] [-d|ebug] [-u|sage]"
45   display "\t      [-r|ecurse] <path> [[-r|ecurse] <path>]"
46   display
47   display "Where:"
48   display "\t-label:\t\tLabel to apply"
49   display "\t-dated:\t\tAppend date (format _MM_DD_YYYY) to label"
50   display "\t-lock:\t\tLock label (-nusers \$USER)"
51   display "\t-move:\t\tMove labels"
52   display "\t-verbose:\tTurn on verbose mode"
53   display "\t-debug:\t\tTurn on debug mode"
54   display "\t-usage:\t\tDisplay usage"
55   display "\t-recurse:\tRecursively apply label from <path>"
56   display "\t<path>:\t\tPathname in vob to start labeling process"
57   display
58   display "NOTE: Multiple path names can be supplied either with or without the"
59   display "      -recurse option."
60   exit 1
61 } # usage
62
63 function log {
64   msg="$1"
65
66   display "$1" >> $logfile
67   verbose "$1"
68 } # log
69
70 # Get parameters
71 label=""
72 dated="no"
73 lock="no"
74 move=""
75 recurse="no"
76 paths=""
77 declare -i i=0
78 while [ $# -ge 1 ]; do                                                          
79   case "$1" in                                                                  
80       -u|-usage)
81         usage
82       ;;
83
84       -v|-verbose)
85         verbose=yes
86       ;;
87
88       -d|-debug)
89         debug=yes
90       ;;                                                                        
91
92       -l|-label)
93         if [ $# -le 1 ]; then
94           usage "Label missing"
95         else
96           shift
97           label="$(echo $1 | tr [:lower:] [:upper:])"
98         fi
99       ;;
100
101       -da|-dated)
102         dated="yes"
103       ;;
104
105       -lo|-lock)
106         lock="yes"
107       ;;
108
109       -m|-move)
110         move="-replace"
111       ;;
112
113       -r|-recurse)
114         if [ $# -le 1 ]; then
115           usage "Recurse must be associated with a path"
116         else
117           shift
118           recurse[$i]="yes"
119           paths[$i]="$1"
120           ((i++))
121         fi
122       ;;
123
124       *)
125         # Assume a path name with no valid recurse before it
126         recurse[$i]="no"
127         paths[$i]="$1"
128         ((i++))
129       ;;
130   esac
131   shift
132 done
133
134 if [ $dated = "yes" ]; then
135   label="${label}_$(date +%d_%m_%Y)"
136 fi
137
138 # Clear logfile
139 cat /dev/null > $logfile
140
141 # Check if label type already exists
142 cleartool lstype lbtype:$label > /dev/null 2>&1
143
144 if [ $? -ne 0 ]; then 
145   # Create label type
146   log "Creating new label $label"
147   cleartool mklbtype -nc $label >> $logfile 2>&1
148
149   if [ $? -ne 0 ]; then
150     log "Unable to create label type $label"
151     error "Unable to create label type $label" 1
152   fi
153 fi
154
155 # Lock label?
156 if [ $lock = "yes" ]; then
157   log "Locking label $label"
158   cleartool lock -nc -replace -nusers $USER lbtype:$label >> $logfile 2>&1
159
160   if [ $? -ne 0 ]; then
161     log "Unable to lock label $label"
162     error "Unable to lock label $label" 2
163   fi
164 fi
165
166 # Apply label(s)
167 i=0
168
169 while [[ ! -z ${recurse[$i]} ]]; do
170   if [ ${recurse[$i]} = "yes" ]; then
171     if [[ -z $move ]]; then
172       log "Applying label $label to ${paths[$i]} (recursively)"
173     else
174       log "Replacing label $label to ${paths[$i]} (recursively)"
175     fi
176     cleartool mklabel $move -nc -recurse lbtype:$label ${paths[$i]} >> $logfile 2>&1
177   else 
178     if [[ -z $move ]]; then
179       log "Applying label $label to ${paths[$i]} (non-recursively)"
180     else
181       log "Replacing label $label to ${paths[$i]} (non-recursively)"
182     fi
183     cleartool mklabel $move -nc lbtype:$label ${paths[$i]} >> $logfile 2>&1
184   fi
185
186   # Check for errors
187   if [ $? -ne 0 ]; then
188     error "Unable to apply label: $label" 3
189   fi
190
191   ((i++))
192 done
193