Initial add of defaria.com
[clearscm.git] / defaria.com / Computers / code / bin / release
1 #!/bin/bash
2 ################################################################################
3 #
4 # File:         release
5 # Description:  Copies files to the release area
6 # Author:       Andrew@DeFaria.com
7 # Created:      Thu Dec 13 19:11:15  2001
8 # Language:     Bash Shell
9 # Modifications:07/09/2003: AD: Added sequential option so as to perform the
10 #               copying sequentially.
11 #               07/23/2003: AD: Added check on release number
12 #
13 # (c) Copyright 2001, Andrew@DeFaria.com, all rights reserved
14 #
15 ################################################################################
16 # Set me to command name
17 me=$(basename $0)
18
19 # Source /etc/site_parms
20 if [ -f /etc/site_parms ]; then
21   . /etc/site_parms
22 else
23   echo "$me: WARNING: /etc/site_parms does not exist!"
24 fi
25
26 # Set adm_base
27 adm_base="$SITE_TOOLS_PATH/adm"
28
29 # Set adm_fpath
30 adm_fpath=${adm_fpath:-$adm_base/functions}
31
32 # Source functions
33 . $adm_fpath/common
34
35 # Get cards definition
36 . $SITE_TOOLS_PATH/adm/etc/cards
37
38 function usage {
39   if [ ! -z "$1" ]; then
40     display -e "$me: Error: $1\n"
41   fi
42   display "Usage: $me: [-v|erbose} [-d|ebug] [-c|reate] [-view <view_path>]"
43   display "\t\t[-s|equential] [-o|verwrite] [-n|ocheck] -r|elease <release>"
44   display
45   display "Where:"
46   display
47   display "\t-verbose\tCauses verbose output"
48   display "\t-debug\t\tCauses debug output"
49   display "\t-create\t\tWill create release areas if they didn't exist"
50   display "\t-view\t\tSpecify alternate path to view to get images from"
51   display "\t\t\t(Default: Current directory)"
52   display "\t-sequential\tPerform copying sequentially (Default: off)"
53   display "\t-overwrite\tOverwrite old files (default don't overwrite)"
54   display "\t-nocheck\tDo not check that the release string is in the"
55   display "\t\t\tsuperfile (default check)"
56   display "\t-release\tRelease area name (Required)"
57   exit 1
58 } # usage
59
60 function copyfile {
61   from="$1"
62   to="$2"
63
64   if [ -f "$to" ]; then
65     if [ $overwrite = "no" ]; then
66       filedate=$(ls -l "$to" | awk '{printf "%s-%s-%s", $7, $8, $9}' | tr ":" ".")
67       verbose "Saving previous file as $to.$filedate"
68       nice mv "$to" "$to".$filedate
69     else
70       rm -f "$to"
71     fi
72   fi
73   nice cp "$from" "$to"
74   chmod 444 "$to"
75 } # copyfile
76
77 release=
78 verbose=
79 debug=
80 create=
81 background="&"
82 viewarea=$(pwd)
83 overwrite="no"
84 check="yes"
85
86 while [ $# -ge 1 ]; do
87   case "$1" in
88     -usage|-u)
89       usage
90     ;;
91
92     -release|-r)
93       if [ $# -le 1 ]; then
94         usage "Release ID not specified!"
95       fi
96       shift
97       release="$1"
98     ;;
99
100     -c|-create)
101       create="yes"
102     ;;
103
104     -v|-verbose)
105       verbose=yes
106     ;;
107
108     -view)
109       if [ $# -le 1 ]; then
110         usage "View not specified!"
111       fi
112       shift
113       viewarea="$1/salira/neopon/build"
114     ;;
115
116     -d|-debug)
117       debug=yes
118     ;;
119
120     -s|-sequential)
121       background=""
122     ;;
123
124     -o|-overwrite)
125       overwrite="yes"
126     ;;
127
128     -n|-nocheck)
129       check="no"
130     ;;
131
132     *)
133       usage "Unknown parameter encountered: \"$1\""
134       ;;
135   esac
136   shift
137 done
138
139 # Check release
140 if [ -z "$release" ]; then
141   usage "Release not specified!"
142 fi
143
144 # Go to view area
145 cd $viewarea
146
147 if [ $check = "yes" ]; then
148   # Check release string is correct
149   # Find a superfile
150   for card in $cards; do
151     if [ -f "$card.sf" ]; then
152       break
153     fi
154   done
155
156   release_string=$(dumpsf -f $card.sf | grep "Build Version:" | awk '{print $NF}')
157   if [ "$release_string" != "$release" ]; then
158     error "Release specified ($release) does not match release in superfile ($release_string)" 2
159   fi
160 fi
161 # Get release areas
162 declare -i i=1
163 for site_release_server in $SITE_RELEASE_SERVER; do
164   site_release_server[$i]=$site_release_server
165   ((i++))
166 done
167
168 i=1
169
170 for site_release_path in $SITE_RELEASE_PATH; do
171   site_release_path[$i]=$site_release_path
172   ((i++))
173 done
174
175 i=1
176 while [[ ! -z ${site_release_server[$i]} ]]; do
177   if [ $i -eq 1 ]; then
178     release_areas="//${site_release_server[$i]}/${site_release_path[$i]}/$release"
179   else
180     release_areas="$release_areas //${site_release_server[$i]}/${site_release_path[$i]}/$release"
181   fi
182   ((i++))
183 done
184
185 for area in $release_areas; do
186   if [ ! -d "$area" ]; then
187     if [ "$create" = "yes" ]; then
188       mkdir "$area"
189       verbose "Created release area $area"
190     else
191       warning "$area does not exist!" 2
192       answer=
193       echo -e "Would you like to create this area? (y/n): \c"
194
195       read answer
196       answer=$(echo $answer | tr [:upper:] [:lower:])
197
198       if [ "$answer" = "y" ]; then
199         mkdir "$area"
200
201         if [ $? -ne 0 ]; then
202           error "Unable to create area: $area"
203         fi
204       else
205         display "Area not created!"
206         exit 1
207       fi
208     fi
209   fi
210 done
211
212 for area in $release_areas; do
213   for card in $cards; do
214     # Check to see if card's build directory is present
215     if [ "$card" = "scc" ]; then
216       card_dirname="sc"
217     else
218       card_dirname=$card
219     fi
220
221     if [ -d "$viewarea/$card_dirname" ]; then
222       # Copy logfile...
223       if [ ! -f "$viewarea/$card.build.log" ]; then
224         warning "No build log found for card $card! - Skipping"
225       else
226         verbose "Copying $card.build.log to $area/$card.build.log"
227         debug "Executing: \"$viewarea/$card.build.log\" \"$area/$card.build.log\" $background"
228         copyfile "$viewarea/$card.build.log" "$area/$card.build.log" $background
229         debug "Executed: \"$viewarea/$card.build.log\" \"$area/$card.build.log\" $background"
230       fi
231
232       # Copy superfile...
233       if [ ! -f "$viewarea/$card.sf" ]; then
234         warning "No superfile found for card $card! - Skipping"
235       else
236         verbose "Copying $card.sf to $area/$card.sf"
237         debug "Executing: \"$viewarea/$card.sf\" \"$area/$card.sf\" $background"
238         copyfile "$viewarea/$card.sf" "$area/$card.sf" $background
239         debug "Executed: \"$viewarea/$card.sf\" \"$area/$card.sf\" $background"
240       fi
241
242       # Copy elf files and map files
243       if [ ! -f $viewarea/$card_dirname/vxWorks_st.elf ]; then
244         warning "No image for $card found! - Skipping"
245       else
246         verbose "Copying $card image to $area/$card.[elf|map]"
247         debug "Executing: \"$viewarea/$card_dirname/vxWorks_st.elf\" \"$area/$card.elf\" $background"
248         copyfile "$viewarea/$card_dirname/vxWorks_st.elf" "$area/$card.elf" $background
249         debug "Executed: \"$viewarea/$card_dirname/vxWorks_st.elf\" \"$area/$card.elf\" $background"
250         debug "Executing: \"$viewarea/$card_dirname/vxWorks_st.map\" \"$area/$card.map\" $background"
251         copyfile "$viewarea/$card_dirname/vxWorks_st.map" "$area/$card.map" $background
252         debug "Executed: \"$viewarea/$card_dirname/vxWorks_st.map\" \"$area/$card.map\" $background"
253       fi
254     fi
255   done
256 done
257
258 if [ "$sequenctial" = "&" ]; then
259   echo -n "Waiting for copying to complete... "
260   wait
261 fi
262
263 echo "done"