Mercurial > hg > easyhg-kdiff3
comparison kdiff3/admin/install-sh @ 66:efe33e938730
0.9.86
author | joachim99 |
---|---|
date | Thu, 16 Sep 2004 02:40:08 +0000 |
parents | 415083d043f3 |
children | 8febbfb1148c |
comparison
equal
deleted
inserted
replaced
65:8ea11c8efeb5 | 66:efe33e938730 |
---|---|
54 dst="" | 54 dst="" |
55 dir_arg="" | 55 dir_arg="" |
56 | 56 |
57 while [ x"$1" != x ]; do | 57 while [ x"$1" != x ]; do |
58 case $1 in | 58 case $1 in |
59 -c) instcmd="$cpprog" | 59 -c) instcmd=$cpprog |
60 shift | 60 shift |
61 continue;; | 61 continue;; |
62 | 62 |
63 -d) dir_arg=true | 63 -d) dir_arg=true |
64 shift | 64 shift |
77 -g) chgrpcmd="$chgrpprog $2" | 77 -g) chgrpcmd="$chgrpprog $2" |
78 shift | 78 shift |
79 shift | 79 shift |
80 continue;; | 80 continue;; |
81 | 81 |
82 -s) stripcmd="$stripprog" | 82 -s) stripcmd=$stripprog |
83 shift | 83 shift |
84 continue;; | 84 continue;; |
85 | 85 |
86 -t=*) transformarg=`echo $1 | sed 's/-t=//'` | 86 -t=*) transformarg=`echo $1 | sed 's/-t=//'` |
87 shift | 87 shift |
104 esac | 104 esac |
105 done | 105 done |
106 | 106 |
107 if [ x"$src" = x ] | 107 if [ x"$src" = x ] |
108 then | 108 then |
109 echo "install: no input file specified" | 109 echo "$0: no input file specified" >&2 |
110 exit 1 | 110 exit 1 |
111 else | 111 else |
112 : | 112 : |
113 fi | 113 fi |
114 | 114 |
115 if [ x"$dir_arg" != x ]; then | 115 if [ x"$dir_arg" != x ]; then |
116 dst=$src | 116 dst=$src |
117 src="" | 117 src="" |
118 | 118 |
119 if [ -d $dst ]; then | 119 if [ -d "$dst" ]; then |
120 instcmd=: | 120 instcmd=: |
121 chmodcmd="" | 121 chmodcmd="" |
122 else | 122 else |
123 instcmd=$mkdirprog | 123 instcmd=$mkdirprog |
124 fi | 124 fi |
125 else | 125 else |
126 | 126 |
127 # Waiting for this to be detected by the "$instcmd $src $dsttmp" command | 127 # Waiting for this to be detected by the "$instcmd $src $dsttmp" command |
128 # might cause directories to be created, which would be especially bad | 128 # might cause directories to be created, which would be especially bad |
129 # if $src (and thus $dsttmp) contains '*'. | 129 # if $src (and thus $dsttmp) contains '*'. |
130 | 130 |
131 if [ -f "$src" ] || [ -d "$src" ] | 131 if [ -f "$src" ] || [ -d "$src" ] |
132 then | 132 then |
133 : | 133 : |
134 else | 134 else |
135 echo "install: $src does not exist" | 135 echo "$0: $src does not exist" >&2 |
136 exit 1 | 136 exit 1 |
137 fi | 137 fi |
138 | 138 |
139 if [ x"$dst" = x ] | 139 if [ x"$dst" = x ] |
140 then | 140 then |
141 echo "install: no destination specified" | 141 echo "$0: no destination specified" >&2 |
142 exit 1 | 142 exit 1 |
143 else | 143 else |
144 : | 144 : |
145 fi | 145 fi |
146 | 146 |
147 # If destination is a directory, append the input filename; if your system | 147 # If destination is a directory, append the input filename; if your system |
148 # does not like double slashes in filenames, you may need to add some logic | 148 # does not like double slashes in filenames, you may need to add some logic |
149 | 149 |
150 if [ -d $dst ] | 150 if [ -d "$dst" ] |
151 then | 151 then |
152 dst="$dst"/`basename $src` | 152 dst=$dst/`basename "$src"` |
153 else | 153 else |
154 : | 154 : |
155 fi | 155 fi |
156 fi | 156 fi |
157 | 157 |
158 ## this sed command emulates the dirname command | 158 ## this sed command emulates the dirname command |
159 dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` | 159 dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` |
160 | 160 |
161 # Make sure that the destination directory exists. | 161 # Make sure that the destination directory exists. |
162 # this part is taken from Noah Friedman's mkinstalldirs script | 162 # this part is taken from Noah Friedman's mkinstalldirs script |
163 | 163 |
164 # Skip lots of stat calls in the usual case. | 164 # Skip lots of stat calls in the usual case. |
165 if [ ! -d "$dstdir" ]; then | 165 if [ ! -d "$dstdir" ]; then |
166 defaultIFS=' | 166 defaultIFS=' |
167 ' | 167 ' |
168 IFS="${IFS-${defaultIFS}}" | 168 IFS="${IFS-$defaultIFS}" |
169 | 169 |
170 oIFS="${IFS}" | 170 oIFS=$IFS |
171 # Some sh's can't handle IFS=/ for some reason. | 171 # Some sh's can't handle IFS=/ for some reason. |
172 IFS='%' | 172 IFS='%' |
173 set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` | 173 set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` |
174 IFS="${oIFS}" | 174 IFS=$oIFS |
175 | 175 |
176 pathcomp='' | 176 pathcomp='' |
177 | 177 |
178 while [ $# -ne 0 ] ; do | 178 while [ $# -ne 0 ] ; do |
179 pathcomp="${pathcomp}${1}" | 179 pathcomp=$pathcomp$1 |
180 shift | 180 shift |
181 | 181 |
182 if [ ! -d "${pathcomp}" ] ; | 182 if [ ! -d "$pathcomp" ] ; |
183 then | 183 then |
184 $mkdirprog "${pathcomp}" | 184 $mkdirprog "$pathcomp" |
185 else | 185 else |
186 : | 186 : |
187 fi | 187 fi |
188 | 188 |
189 pathcomp="${pathcomp}/" | 189 pathcomp=$pathcomp/ |
190 done | 190 done |
191 fi | 191 fi |
192 | 192 |
193 if [ x"$dir_arg" != x ] | 193 if [ x"$dir_arg" != x ] |
194 then | 194 then |
195 $doit $instcmd $dst && | 195 $doit $instcmd "$dst" && |
196 | 196 |
197 if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && | 197 if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && |
198 if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && | 198 if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && |
199 if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && | 199 if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && |
200 if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi | 200 if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi |
201 else | 201 else |
202 | 202 |
203 # If we're going to rename the final executable, determine the name now. | 203 # If we're going to rename the final executable, determine the name now. |
204 | 204 |
205 if [ x"$transformarg" = x ] | 205 if [ x"$transformarg" = x ] |
206 then | 206 then |
207 dstfile=`basename $dst` | 207 dstfile=`basename "$dst"` |
208 else | 208 else |
209 dstfile=`basename $dst $transformbasename | | 209 dstfile=`basename "$dst" $transformbasename | |
210 sed $transformarg`$transformbasename | 210 sed $transformarg`$transformbasename |
211 fi | 211 fi |
212 | 212 |
213 # don't allow the sed command to completely eliminate the filename | 213 # don't allow the sed command to completely eliminate the filename |
214 | 214 |
215 if [ x"$dstfile" = x ] | 215 if [ x"$dstfile" = x ] |
216 then | 216 then |
217 dstfile=`basename $dst` | 217 dstfile=`basename "$dst"` |
218 else | 218 else |
219 : | 219 : |
220 fi | 220 fi |
221 | 221 |
222 # Make a temp file name in the proper directory. | 222 # Make a couple of temp file names in the proper directory. |
223 | 223 |
224 dsttmp=$dstdir/#inst.$$# | 224 dsttmp=$dstdir/#inst.$$# |
225 rmtmp=$dstdir/#rm.$$# | |
226 | |
227 # Trap to clean up temp files at exit. | |
228 | |
229 trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 | |
230 trap '(exit $?); exit' 1 2 13 15 | |
225 | 231 |
226 # Move or copy the file name to the temp name | 232 # Move or copy the file name to the temp name |
227 | 233 |
228 $doit $instcmd $src $dsttmp && | 234 $doit $instcmd "$src" "$dsttmp" && |
229 | |
230 trap "rm -f ${dsttmp}" 0 && | |
231 | 235 |
232 # and set any options; do chmod last to preserve setuid bits | 236 # and set any options; do chmod last to preserve setuid bits |
233 | 237 |
234 # If any of these fail, we abort the whole thing. If we want to | 238 # If any of these fail, we abort the whole thing. If we want to |
235 # ignore errors from any of these, just make sure not to ignore | 239 # ignore errors from any of these, just make sure not to ignore |
236 # errors from the above "$doit $instcmd $src $dsttmp" command. | 240 # errors from the above "$doit $instcmd $src $dsttmp" command. |
237 | 241 |
238 if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && | 242 if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && |
239 if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && | 243 if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && |
240 if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && | 244 if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && |
241 if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && | 245 if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && |
246 | |
247 # Now remove or move aside any old file at destination location. We try this | |
248 # two ways since rm can't unlink itself on some systems and the destination | |
249 # file might be busy for other reasons. In this case, the final cleanup | |
250 # might fail but the new file should still install successfully. | |
251 | |
252 { | |
253 if [ -f "$dstdir/$dstfile" ] | |
254 then | |
255 $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || | |
256 $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || | |
257 { | |
258 echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 | |
259 (exit 1); exit | |
260 } | |
261 else | |
262 : | |
263 fi | |
264 } && | |
242 | 265 |
243 # Now rename the file to the real destination. | 266 # Now rename the file to the real destination. |
244 | 267 |
245 $doit $rmcmd -f $dstdir/$dstfile && | 268 $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" |
246 $doit $mvcmd $dsttmp $dstdir/$dstfile | |
247 | 269 |
248 fi && | 270 fi && |
249 | 271 |
250 | 272 # The final little trick to "correctly" pass the exit status to the exit trap. |
251 exit 0 | 273 |
274 { | |
275 (exit 0); exit | |
276 } |