/[gentoo-x86]/eclass/cvs.eclass
Gentoo

Diff of /eclass/cvs.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.77 Revision 1.81
1# Copyright 1999-2012 Gentoo Foundation 1# Copyright 1999-2013 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/cvs.eclass,v 1.77 2012/09/09 07:03:28 ulm Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/cvs.eclass,v 1.81 2013/01/22 07:29:02 vapier Exp $
4 4
5# @ECLASS: cvs.eclass 5# @ECLASS: cvs.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# vapier@gentoo.org (and anyone who wants to help) 7# vapier@gentoo.org (and anyone who wants to help)
8# @BLURB: This eclass provides generic cvs fetching functions 8# @BLURB: This eclass provides generic cvs fetching functions
11# ebuild, set the ECLASS VARIABLES as specified below in your ebuild before 11# ebuild, set the ECLASS VARIABLES as specified below in your ebuild before
12# inheriting. Then either leave the default src_unpack or extend over 12# inheriting. Then either leave the default src_unpack or extend over
13# cvs_src_unpack. If you find that you need to call the cvs_* functions 13# cvs_src_unpack. If you find that you need to call the cvs_* functions
14# directly, I'd be interested to hear about it. 14# directly, I'd be interested to hear about it.
15 15
16if [[ ${___ECLASS_ONCE_CVS} != "recur -_+^+_- spank" ]] ; then
17___ECLASS_ONCE_CVS="recur -_+^+_- spank"
18
16inherit eutils 19inherit eutils
17 20
18# TODO: 21# TODO:
19 22
20# Implement more auth types (gserver?, kserver?) 23# Implement more auth types (gserver?, kserver?)
88# have e.g. a wrong $S setting. 91# have e.g. a wrong $S setting.
89 92
90# @ECLASS-VARIABLE: ECVS_TOP_DIR 93# @ECLASS-VARIABLE: ECVS_TOP_DIR
91# @DESCRIPTION: 94# @DESCRIPTION:
92# The directory under which CVS modules are checked out. 95# The directory under which CVS modules are checked out.
93[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/cvs-src" 96: ${ECVS_TOP_DIR:="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/cvs-src"}
94 97
95# @ECLASS-VARIABLE: ECVS_SERVER 98# @ECLASS-VARIABLE: ECVS_SERVER
96# @DESCRIPTION: 99# @DESCRIPTION:
97# CVS path 100# CVS path
98# 101#
101# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated 104# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated
102# using other settings also. 105# using other settings also.
103# 106#
104# Set this to "offline" to disable fetching (i.e. to assume the module 107# Set this to "offline" to disable fetching (i.e. to assume the module
105# is already checked out in ECVS_TOP_DIR). 108# is already checked out in ECVS_TOP_DIR).
106[ -z "$ECVS_SERVER" ] && ECVS_SERVER="offline" 109: ${ECVS_SERVER:="offline"}
107 110
108# @ECLASS-VARIABLE: ECVS_MODULE 111# @ECLASS-VARIABLE: ECVS_MODULE
109# @REQUIRED 112# @REQUIRED
110# @DESCRIPTION: 113# @DESCRIPTION:
111# The name of the CVS module to be fetched 114# The name of the CVS module to be fetched
112# 115#
113# This must be set when cvs_src_unpack is called. This can include 116# This must be set when cvs_src_unpack is called. This can include
114# several directory levels, i.e. "foo/bar/baz" 117# several directory levels, i.e. "foo/bar/baz"
115
116#[ -z "$ECVS_MODULE" ] && die "$ECLASS: error: ECVS_MODULE not set, cannot continue" 118#[[ -z ${ECVS_MODULE} ]] && die "$ECLASS: error: ECVS_MODULE not set, cannot continue"
119
120# @ECLASS-VARIABLE: ECVS_DATE
121# @DEFAULT_UNSET
122# @DESCRIPTION:
123# The date of the checkout. See the -D date_spec option in the cvs
124# man page for more details.
117 125
118# @ECLASS-VARIABLE: ECVS_BRANCH 126# @ECLASS-VARIABLE: ECVS_BRANCH
119# @DEFAULT_UNSET 127# @DEFAULT_UNSET
120# @DESCRIPTION: 128# @DESCRIPTION:
121# The name of the branch/tag to use 129# The name of the branch/tag to use
122# 130#
123# The default is "HEAD". The following default _will_ reset your 131# The default is "HEAD". The following default _will_ reset your
124# branch checkout to head if used. 132# branch checkout to head if used.
125 133#: ${ECVS_BRANCH:="HEAD"}
126#[ -z "$ECVS_BRANCH" ] && ECVS_BRANCH="HEAD"
127 134
128# @ECLASS-VARIABLE: ECVS_AUTH 135# @ECLASS-VARIABLE: ECVS_AUTH
129# @DESCRIPTION: 136# @DESCRIPTION:
130# Authentication method to use 137# Authentication method to use
131# 138#
138# - Added "no" as a server type, which uses no AUTH method, nor 145# - Added "no" as a server type, which uses no AUTH method, nor
139# does it login 146# does it login
140# e.g. 147# e.g.
141# "cvs -danoncvs@savannah.gnu.org:/cvsroot/backbone co System" 148# "cvs -danoncvs@savannah.gnu.org:/cvsroot/backbone co System"
142# ( from gnustep-apps/textedit ) 149# ( from gnustep-apps/textedit )
143[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver" 150: ${ECVS_AUTH:="pserver"}
144 151
145# @ECLASS-VARIABLE: ECVS_USER 152# @ECLASS-VARIABLE: ECVS_USER
146# @DESCRIPTION: 153# @DESCRIPTION:
147# Username to use for authentication on the remote server. 154# Username to use for authentication on the remote server.
148[ -z "$ECVS_USER" ] && ECVS_USER="anonymous" 155: ${ECVS_USER:="anonymous"}
149 156
150# @ECLASS-VARIABLE: ECVS_PASS 157# @ECLASS-VARIABLE: ECVS_PASS
158# @DEFAULT_UNSET
151# @DESCRIPTION: 159# @DESCRIPTION:
152# Password to use for authentication on the remote server 160# Password to use for authentication on the remote server
153[ -z "$ECVS_PASS" ] && ECVS_PASS=""
154 161
155# @ECLASS-VARIABLE: ECVS_SSH_HOST_KEY 162# @ECLASS-VARIABLE: ECVS_SSH_HOST_KEY
156# @DEFAULT_UNSET 163# @DEFAULT_UNSET
157# @DESCRIPTION: 164# @DESCRIPTION:
158# If SSH is used for `ext' authentication, use this variable to 165# If SSH is used for `ext' authentication, use this variable to
173# @DESCRIPTION: 180# @DESCRIPTION:
174# Specifies an alternate (non-root) user to use to run cvs. Currently 181# Specifies an alternate (non-root) user to use to run cvs. Currently
175# b0rked and wouldn't work with portage userpriv anyway without 182# b0rked and wouldn't work with portage userpriv anyway without
176# special magic. 183# special magic.
177 184
178# [ -z "$ECVS_RUNAS" ] && ECVS_RUNAS="`whoami`" 185# : ${ECVS_RUNAS:=$(whoami)}
179
180# ECVS_SUBDIR -- deprecated, do not use
181[ -n "$ECVS_SUBDIR" ] && die "ERROR: deprecated ECVS_SUBDIR defined. Please fix this ebuild."
182 186
183# add cvs to deps 187# add cvs to deps
184# ssh is used for ext auth 188# ssh is used for ext auth
185# sudo is used to run as a specified user 189# sudo is used to run as a specified user
186DEPEND="dev-vcs/cvs" 190DEPEND="dev-vcs/cvs"
187 191
188[ -n "$ECVS_RUNAS" ] && DEPEND="$DEPEND app-admin/sudo" 192[[ -n ${ECVS_RUNAS} ]] && DEPEND+=" app-admin/sudo"
189 193
190if [ "$ECVS_AUTH" == "ext" ]; then 194if [[ ${ECVS_AUTH} == "ext" ]] ; then
191 #default to ssh 195 #default to ssh
192 [ -z "$CVS_RSH" ] && export CVS_RSH="ssh" 196 [[ -z ${CVS_RSH} ]] && export CVS_RSH="ssh"
193 if [ "$CVS_RSH" != "ssh" ]; then 197 if [[ ${CVS_RSH} != "ssh" ]] ; then
194 die "Support for ext auth with clients other than ssh has not been implemented yet" 198 die "Support for ext auth with clients other than ssh has not been implemented yet"
195 fi 199 fi
196 DEPEND="${DEPEND} net-misc/openssh" 200 DEPEND+=" net-misc/openssh"
197fi 201fi
198 202
199# called from cvs_src_unpack 203# called from cvs_src_unpack
200cvs_fetch() { 204cvs_fetch() {
201 205
202 # Make these options local variables so that the global values are 206 # Make these options local variables so that the global values are
203 # not affected by modifications in this function. 207 # not affected by modifications in this function.
204 208
205 local ECVS_COMMAND="${ECVS_COMMAND}" 209 local ECVS_COMMAND=${ECVS_COMMAND}
206 local ECVS_UP_OPTS="${ECVS_UP_OPTS}" 210 local ECVS_UP_OPTS=${ECVS_UP_OPTS}
207 local ECVS_CO_OPTS="${ECVS_CO_OPTS}" 211 local ECVS_CO_OPTS=${ECVS_CO_OPTS}
208 212
209 debug-print-function $FUNCNAME $* 213 debug-print-function ${FUNCNAME} "$@"
210 214
211 # Update variables that are modified by ebuild parameters, which 215 # Update variables that are modified by ebuild parameters, which
212 # should be effective every time cvs_fetch is called, and not just 216 # should be effective every time cvs_fetch is called, and not just
213 # every time cvs.eclass is inherited 217 # every time cvs.eclass is inherited
214 218
215 # Handle parameter for local (non-recursive) fetching 219 # Handle parameter for local (non-recursive) fetching
216 220
217 if [ -n "$ECVS_LOCAL" ]; then 221 if [[ -n ${ECVS_LOCAL} ]] ; then
218 ECVS_UP_OPTS="$ECVS_UP_OPTS -l" 222 ECVS_UP_OPTS+=" -l"
219 ECVS_CO_OPTS="$ECVS_CO_OPTS -l" 223 ECVS_CO_OPTS+=" -l"
220 fi 224 fi
221 225
222 # Handle ECVS_BRANCH option 226 # Handle ECVS_BRANCH option
223 # 227 #
224 # Because CVS auto-switches branches, we just have to pass the 228 # Because CVS auto-switches branches, we just have to pass the
225 # correct -rBRANCH option when updating. 229 # correct -rBRANCH option when updating.
226 230
227 if [ -n "$ECVS_BRANCH" ]; then 231 if [[ -n ${ECVS_BRANCH} ]] ; then
228 ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH" 232 ECVS_UP_OPTS+=" -r${ECVS_BRANCH}"
229 ECVS_CO_OPTS="$ECVS_CO_OPTS -r$ECVS_BRANCH" 233 ECVS_CO_OPTS+=" -r${ECVS_BRANCH}"
230 fi 234 fi
231 235
232 # Handle ECVS_LOCALNAME, which specifies the local directory name 236 # Handle ECVS_LOCALNAME, which specifies the local directory name
233 # to use. Note that the -d command option is not equivalent to 237 # to use. Note that the -d command option is not equivalent to
234 # the global -d option. 238 # the global -d option.
235 239
236 if [ "$ECVS_LOCALNAME" != "$ECVS_MODULE" ]; then 240 if [[ ${ECVS_LOCALNAME} != "${ECVS_MODULE}" ]] ; then
237 ECVS_CO_OPTS="$ECVS_CO_OPTS -d $ECVS_LOCALNAME" 241 ECVS_CO_OPTS+=" -d ${ECVS_LOCALNAME}"
238 fi 242 fi
239 243
240
241 if [ -n "$ECVS_CLEAN" ]; then 244 if [[ -n ${ECVS_CLEAN} ]] ; then
242 ECVS_UP_OPTS="$ECVS_UP_OPTS -C" 245 ECVS_UP_OPTS+=" -C"
243 fi 246 fi
244 247
248 if [[ -n ${ECVS_DATE} ]] ; then
249 ECVS_CO_OPTS+=" -D ${ECVS_DATE}"
250 ECVS_UP_OPTS+=" -D ${ECVS_DATE}"
251 fi
245 252
246 # It would be easiest to always be in "run-as mode", logic-wise, 253 # It would be easiest to always be in "run-as mode", logic-wise,
247 # if sudo didn't ask for a password even when sudo'ing to `whoami`. 254 # if sudo didn't ask for a password even when sudo'ing to `whoami`.
248 255
249 if [ -z "$ECVS_RUNAS" ]; then 256 if [[ -z ${ECVS_RUNAS} ]] ; then
250 run="" 257 run=""
251 else 258 else
252 run="sudo -u $ECVS_RUNAS" 259 run="sudo -u ${ECVS_RUNAS}"
253 fi 260 fi
254 261
255 # Create the top dir if needed 262 # Create the top dir if needed
256 263
257 if [ ! -d "$ECVS_TOP_DIR" ]; then 264 if [[ ! -d ${ECVS_TOP_DIR} ]] ; then
258
259 # Note that the addwrite statements in this block are only 265 # Note that the addwrite statements in this block are only
260 # there to allow creating ECVS_TOP_DIR; we allow writing 266 # there to allow creating ECVS_TOP_DIR; we allow writing
261 # inside it separately. 267 # inside it separately.
262 268
263 # This is because it's simpler than trying to find out the 269 # This is because it's simpler than trying to find out the
264 # parent path of the directory, which would need to be the 270 # parent path of the directory, which would need to be the
265 # real path and not a symlink for things to work (so we can't 271 # real path and not a symlink for things to work (so we can't
266 # just remove the last path element in the string) 272 # just remove the last path element in the string)
267 273
268 debug-print "$FUNCNAME: checkout mode. creating cvs directory" 274 debug-print "${FUNCNAME}: checkout mode. creating cvs directory"
269 addwrite /foobar 275 addwrite /foobar
270 addwrite / 276 addwrite /
271 $run mkdir -p "/$ECVS_TOP_DIR" 277 ${run} mkdir -p "/${ECVS_TOP_DIR}"
272 export SANDBOX_WRITE="${SANDBOX_WRITE//:\/foobar:\/}" 278 export SANDBOX_WRITE="${SANDBOX_WRITE//:\/foobar:\/}"
273 fi 279 fi
274 280
275 # In case ECVS_TOP_DIR is a symlink to a dir, get the real path, 281 # In case ECVS_TOP_DIR is a symlink to a dir, get the real path,
276 # otherwise addwrite() doesn't work. 282 # otherwise addwrite() doesn't work.
277 283
278 cd -P "$ECVS_TOP_DIR" > /dev/null 284 cd -P "${ECVS_TOP_DIR}" >/dev/null
279 ECVS_TOP_DIR="`/bin/pwd`" 285 ECVS_TOP_DIR=$(pwd)
280 286
281 # Disable the sandbox for this dir 287 # Disable the sandbox for this dir
282 addwrite "$ECVS_TOP_DIR" 288 addwrite "${ECVS_TOP_DIR}"
283 289
284 # Chown the directory and all of its contents 290 # Chown the directory and all of its contents
285 if [ -n "$ECVS_RUNAS" ]; then 291 if [[ -n ${ECVS_RUNAS} ]] ; then
286 $run chown -R "$ECVS_RUNAS" "/$ECVS_TOP_DIR" 292 ${run} chown -R "${ECVS_RUNAS}" "/${ECVS_TOP_DIR}"
287 fi 293 fi
288 294
289 # Determine the CVS command mode (checkout or update) 295 # Determine the CVS command mode (checkout or update)
290 if [ ! -d "$ECVS_TOP_DIR/$ECVS_LOCALNAME/CVS" ]; then 296 if [[ ! -d ${ECVS_TOP_DIR}/${ECVS_LOCALNAME}/CVS ]] ; then
291 mode=checkout 297 mode=checkout
292 else 298 else
293 mode=update 299 mode=update
294 fi 300 fi
295 301
296
297 # Our server string (i.e. CVSROOT) without the password so it can 302 # Our server string (i.e. CVSROOT) without the password so it can
298 # be put in Root 303 # be put in Root
299 if [ "$ECVS_AUTH" == "no" ] 304 if [[ ${ECVS_AUTH} == "no" ]] ; then
300 then
301 local server="${ECVS_USER}@${ECVS_SERVER}" 305 local server="${ECVS_USER}@${ECVS_SERVER}"
302 else 306 else
303 local connection="${ECVS_AUTH}" 307 local connection="${ECVS_AUTH}"
304 [[ -n ${ECVS_PROXY} ]] && connection="${connection};proxy=${ECVS_PROXY}" 308 [[ -n ${ECVS_PROXY} ]] && connection+=";proxy=${ECVS_PROXY}"
305 [[ -n ${ECVS_PROXY_PORT} ]] && connection="${connection};proxyport=${ECVS_PROXY_PORT}" 309 [[ -n ${ECVS_PROXY_PORT} ]] && connection+=";proxyport=${ECVS_PROXY_PORT}"
306 local server=":${connection}:${ECVS_USER}@${ECVS_SERVER}" 310 local server=":${connection}:${ECVS_USER}@${ECVS_SERVER}"
307 fi 311 fi
308 312
309 # Switch servers automagically if needed 313 # Switch servers automagically if needed
310 if [ "$mode" == "update" ]; then 314 if [[ ${mode} == "update" ]] ; then
311 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME 315 cd "/${ECVS_TOP_DIR}/${ECVS_LOCALNAME}"
312 local oldserver="`$run cat CVS/Root`" 316 local oldserver=$(${run} cat CVS/Root)
313 if [ "$server" != "$oldserver" ]; then 317 if [[ ${server} != "${oldserver}" ]] ; then
314
315 einfo "Changing the CVS server from $oldserver to $server:" 318 einfo "Changing the CVS server from ${oldserver} to ${server}:"
316 debug-print "$FUNCNAME: Changing the CVS server from $oldserver to $server:" 319 debug-print "${FUNCNAME}: Changing the CVS server from ${oldserver} to ${server}:"
317 320
318 einfo "Searching for CVS directories ..." 321 einfo "Searching for CVS directories ..."
319 local cvsdirs="`$run find . -iname CVS -print`" 322 local cvsdirs=$(${run} find . -iname CVS -print)
320 debug-print "$FUNCNAME: CVS directories found:" 323 debug-print "${FUNCNAME}: CVS directories found:"
321 debug-print "$cvsdirs" 324 debug-print "${cvsdirs}"
322 325
323 einfo "Modifying CVS directories ..." 326 einfo "Modifying CVS directories ..."
327 local x
324 for x in $cvsdirs; do 328 for x in ${cvsdirs} ; do
325 debug-print "In $x" 329 debug-print "In ${x}"
326 $run echo "$server" > "$x/Root" 330 ${run} echo "${server}" > "${x}/Root"
327 done 331 done
328
329 fi 332 fi
330 fi 333 fi
331 334
332 # Prepare a cvspass file just for this session, we don't want to 335 # Prepare a cvspass file just for this session, we don't want to
333 # mess with ~/.cvspass 336 # mess with ~/.cvspass
334 touch "${T}/cvspass" 337 touch "${T}/cvspass"
335 export CVS_PASSFILE="${T}/cvspass" 338 export CVS_PASSFILE="${T}/cvspass"
336 if [ -n "$ECVS_RUNAS" ]; then 339 if [[ -n ${ECVS_RUNAS} ]] ; then
337 chown "$ECVS_RUNAS" "${T}/cvspass" 340 chown "${ECVS_RUNAS}" "${T}/cvspass"
338 fi 341 fi
339 342
340 # The server string with the password in it, for login 343 # The server string with the password in it, for login
341 cvsroot_pass=":${ECVS_AUTH}:${ECVS_USER}:${ECVS_PASS}@${ECVS_SERVER}" 344 cvsroot_pass=":${ECVS_AUTH}:${ECVS_USER}:${ECVS_PASS}@${ECVS_SERVER}"
342 345
343 # Ditto without the password, for checkout/update after login, so 346 # Ditto without the password, for checkout/update after login, so
344 # that the CVS/Root files don't contain the password in plaintext 347 # that the CVS/Root files don't contain the password in plaintext
345 if [ "$ECVS_AUTH" == "no" ] 348 if [[ ${ECVS_AUTH} == "no" ]] ; then
346 then
347 cvsroot_nopass="${ECVS_USER}@${ECVS_SERVER}" 349 cvsroot_nopass="${ECVS_USER}@${ECVS_SERVER}"
348 else 350 else
349 cvsroot_nopass=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}" 351 cvsroot_nopass=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}"
350 fi 352 fi
351 353
355 cmdcheckout="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_nopass}\" checkout ${ECVS_CO_OPTS} ${ECVS_MODULE}" 357 cmdcheckout="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_nopass}\" checkout ${ECVS_CO_OPTS} ${ECVS_MODULE}"
356 358
357 # Execute commands 359 # Execute commands
358 360
359 cd "${ECVS_TOP_DIR}" 361 cd "${ECVS_TOP_DIR}"
360 if [ "${ECVS_AUTH}" == "pserver" ]; then 362 if [[ ${ECVS_AUTH} == "pserver" ]] ; then
361 einfo "Running $cmdlogin" 363 einfo "Running ${cmdlogin}"
362 eval $cmdlogin || die "cvs login command failed" 364 eval ${cmdlogin} || die "cvs login command failed"
363 if [ "${mode}" == "update" ]; then 365 if [[ ${mode} == "update" ]] ; then
364 einfo "Running $cmdupdate" 366 einfo "Running ${cmdupdate}"
365 eval $cmdupdate || die "cvs update command failed" 367 eval ${cmdupdate} || die "cvs update command failed"
366 elif [ "${mode}" == "checkout" ]; then 368 elif [[ ${mode} == "checkout" ]] ; then
367 einfo "Running $cmdcheckout" 369 einfo "Running ${cmdcheckout}"
368 eval $cmdcheckout|| die "cvs checkout command failed" 370 eval ${cmdcheckout} || die "cvs checkout command failed"
369 fi 371 fi
370 elif [ "${ECVS_AUTH}" == "ext" ] || [ "${ECVS_AUTH}" == "no" ]; then 372 elif [[ ${ECVS_AUTH} == "ext" || ${ECVS_AUTH} == "no" ]] ; then
371
372 # Hack to support SSH password authentication 373 # Hack to support SSH password authentication
373 374
374 # Backup environment variable values 375 # Backup environment variable values
375 local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}" 376 local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}"
376 377
377 if [ "${SSH_ASKPASS+set}" == "set" ]; then 378 if [[ ${SSH_ASKPASS+set} == "set" ]] ; then
378 local CVS_ECLASS_ORIG_SSH_ASKPASS="${SSH_ASKPASS}" 379 local CVS_ECLASS_ORIG_SSH_ASKPASS="${SSH_ASKPASS}"
379 else 380 else
380 unset CVS_ECLASS_ORIG_SSH_ASKPASS 381 unset CVS_ECLASS_ORIG_SSH_ASKPASS
381 fi 382 fi
382 383
383 if [ "${DISPLAY+set}" == "set" ]; then 384 if [[ ${DISPLAY+set} == "set" ]] ; then
384 local CVS_ECLASS_ORIG_DISPLAY="${DISPLAY}" 385 local CVS_ECLASS_ORIG_DISPLAY="${DISPLAY}"
385 else 386 else
386 unset CVS_ECLASS_ORIG_DISPLAY 387 unset CVS_ECLASS_ORIG_DISPLAY
387 fi 388 fi
388 389
389 if [ "${CVS_RSH}" == "ssh" ]; then 390 if [[ ${CVS_RSH} == "ssh" ]] ; then
390
391 # Force SSH to use SSH_ASKPASS by creating python wrapper 391 # Force SSH to use SSH_ASKPASS by creating python wrapper
392 392
393 export CVS_RSH="${T}/cvs_sshwrapper" 393 export CVS_RSH="${T}/cvs_sshwrapper"
394 cat > "${CVS_RSH}"<<EOF 394 cat > "${CVS_RSH}"<<EOF
395#!/usr/bin/python 395#!/usr/bin/python
420 420
421 local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts" 421 local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts"
422 echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \ 422 echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \
423 >> "${CVS_RSH}" 423 >> "${CVS_RSH}"
424 424
425 if [ -z "${ECVS_SSH_HOST_KEY}" ]; then 425 if [[ -z ${ECVS_SSH_HOST_KEY} ]] ; then
426 ewarn "Warning: The SSH host key of the remote server will not be verified." 426 ewarn "Warning: The SSH host key of the remote server will not be verified."
427 einfo "A temporary known hosts list will be used." 427 einfo "A temporary known hosts list will be used."
428 local CVS_ECLASS_STRICT_HOST_CHECKING="no" 428 local CVS_ECLASS_STRICT_HOST_CHECKING="no"
429 touch "${CVS_ECLASS_KNOWN_HOSTS}" 429 touch "${CVS_ECLASS_KNOWN_HOSTS}"
430 else 430 else
442 chmod a+x "${CVS_RSH}" 442 chmod a+x "${CVS_RSH}"
443 443
444 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS 444 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS
445 # if DISPLAY is not set) 445 # if DISPLAY is not set)
446 446
447 [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY" 447 : ${DISPLAY:="DISPLAY"}
448 export DISPLAY 448 export DISPLAY
449 449
450 # Create a dummy executable to echo $ECVS_PASS 450 # Create a dummy executable to echo ${ECVS_PASS}
451 451
452 export SSH_ASKPASS="${T}/cvs_sshechopass" 452 export SSH_ASKPASS="${T}/cvs_sshechopass"
453 if [ "${ECVS_AUTH}" != "no" ]; then 453 if [[ ${ECVS_AUTH} != "no" ]] ; then
454 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \ 454 echo -en "#!/bin/bash\necho \"${ECVS_PASS}\"\n" \
455 > "${SSH_ASKPASS}" 455 > "${SSH_ASKPASS}"
456 else 456 else
457 echo -en "#!/bin/bash\nreturn\n" \ 457 echo -en "#!/bin/bash\nreturn\n" \
458 > "${SSH_ASKPASS}" 458 > "${SSH_ASKPASS}"
459
460 fi 459 fi
461 chmod a+x "${SSH_ASKPASS}" 460 chmod a+x "${SSH_ASKPASS}"
462 fi 461 fi
463 462
464 if [ "${mode}" == "update" ]; then 463 if [[ ${mode} == "update" ]] ; then
465 einfo "Running $cmdupdate" 464 einfo "Running ${cmdupdate}"
466 eval $cmdupdate || die "cvs update command failed" 465 eval ${cmdupdate} || die "cvs update command failed"
467 elif [ "${mode}" == "checkout" ]; then 466 elif [[ ${mode} == "checkout" ]] ; then
468 einfo "Running $cmdcheckout" 467 einfo "Running ${cmdcheckout}"
469 eval $cmdcheckout|| die "cvs checkout command failed" 468 eval ${cmdcheckout} || die "cvs checkout command failed"
470 fi 469 fi
471 470
472 # Restore environment variable values 471 # Restore environment variable values
473 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}" 472 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}"
474 if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then 473 if [[ ${CVS_ECLASS_ORIG_SSH_ASKPASS+set} == "set" ]] ; then
475 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}" 474 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}"
476 else 475 else
477 unset SSH_ASKPASS 476 unset SSH_ASKPASS
478 fi 477 fi
479 478
480 if [ "${CVS_ECLASS_ORIG_DISPLAY+set}" == "set" ]; then 479 if [[ ${CVS_ECLASS_ORIG_DISPLAY+set} == "set" ]] ; then
481 export DISPLAY="${CVS_ECLASS_ORIG_DISPLAY}" 480 export DISPLAY="${CVS_ECLASS_ORIG_DISPLAY}"
482 else 481 else
483 unset DISPLAY 482 unset DISPLAY
484 fi 483 fi
485 fi 484 fi
486 485
487 # Restore ownership. Not sure why this is needed, but someone 486 # Restore ownership. Not sure why this is needed, but someone
488 # added it in the orig ECVS_RUNAS stuff. 487 # added it in the orig ECVS_RUNAS stuff.
489 if [ -n "$ECVS_RUNAS" ]; then 488 if [[ -n ${ECVS_RUNAS} ]] ; then
490 chown `whoami` "${T}/cvspass" 489 chown $(whoami) "${T}/cvspass"
491 fi 490 fi
492 491
493} 492}
494 493
495# @FUNCTION: cvs_src_unpack 494# @FUNCTION: cvs_src_unpack
496# @DESCRIPTION: 495# @DESCRIPTION:
497# The cvs src_unpack function, which will be exported 496# The cvs src_unpack function, which will be exported
498cvs_src_unpack() { 497cvs_src_unpack() {
499 498
500 debug-print-function $FUNCNAME $* 499 debug-print-function ${FUNCNAME} "$@"
501 500
502 debug-print "$FUNCNAME: init: 501 debug-print "${FUNCNAME}: init:
503 ECVS_CVS_COMMAND=$ECVS_CVS_COMMAND 502 ECVS_CVS_COMMAND=${ECVS_CVS_COMMAND}
504 ECVS_UP_OPTS=$ECVS_UP_OPTS 503 ECVS_UP_OPTS=${ECVS_UP_OPTS}
505 ECVS_CO_OPTS=$ECVS_CO_OPTS 504 ECVS_CO_OPTS=${ECVS_CO_OPTS}
506 ECVS_TOP_DIR=$ECVS_TOP_DIR 505 ECVS_TOP_DIR=${ECVS_TOP_DIR}
507 ECVS_SERVER=$ECVS_SERVER 506 ECVS_SERVER=${ECVS_SERVER}
508 ECVS_USER=$ECVS_USER 507 ECVS_USER=${ECVS_USER}
509 ECVS_PASS=$ECVS_PASS 508 ECVS_PASS=${ECVS_PASS}
510 ECVS_MODULE=$ECVS_MODULE 509 ECVS_MODULE=${ECVS_MODULE}
511 ECVS_LOCAL=$ECVS_LOCAL 510 ECVS_LOCAL=${ECVS_LOCAL}
512 ECVS_RUNAS=$ECVS_RUNAS 511 ECVS_RUNAS=${ECVS_RUNAS}
513 ECVS_LOCALNAME=$ECVS_LOCALNAME" 512 ECVS_LOCALNAME=${ECVS_LOCALNAME}"
514 513
515 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue." 514 [[ -z ${ECVS_MODULE} ]] && die "ERROR: CVS module not set, cannot continue."
516 515
517 local ECVS_LOCALNAME="${ECVS_LOCALNAME}" 516 local ECVS_LOCALNAME=${ECVS_LOCALNAME:-${ECVS_MODULE}}
518
519 if [ -z "$ECVS_LOCALNAME" ]; then
520 ECVS_LOCALNAME="$ECVS_MODULE"
521 fi
522 517
523 local sanitized_pn=$(echo "${PN}" | LC_ALL=C sed -e 's:[^A-Za-z0-9_]:_:g') 518 local sanitized_pn=$(echo "${PN}" | LC_ALL=C sed -e 's:[^A-Za-z0-9_]:_:g')
524 local offline_pkg_var="ECVS_OFFLINE_${sanitized_pn}" 519 local offline_pkg_var="ECVS_OFFLINE_${sanitized_pn}"
525 if [[ -n ${!offline_pkg_var}${ECVS_OFFLINE} ]] || [[ "$ECVS_SERVER" == "offline" ]] ; then 520 if [[ -n ${!offline_pkg_var}${ECVS_OFFLINE} ]] || [[ ${ECVS_SERVER} == "offline" ]] ; then
526 # We're not required to fetch anything; the module already 521 # We're not required to fetch anything; the module already
527 # exists and shouldn't be updated. 522 # exists and shouldn't be updated.
528 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then 523 if [[ -d ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} ]] ; then
529 debug-print "$FUNCNAME: offline mode" 524 debug-print "${FUNCNAME}: offline mode"
530 else 525 else
531 debug-print "$FUNCNAME: Offline mode specified but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found, exiting with error" 526 debug-print "${FUNCNAME}: Offline mode specified but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found, exiting with error"
532 die "ERROR: Offline mode specified, but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found. Aborting." 527 die "ERROR: Offline mode specified, but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found. Aborting."
533 fi 528 fi
534 elif [ -n "$ECVS_SERVER" ]; then # ECVS_SERVER!=offline --> real fetching mode 529 elif [[ -n ${ECVS_SERVER} ]] ; then # ECVS_SERVER!=offline --> real fetching mode
535 einfo "Fetching CVS module $ECVS_MODULE into $ECVS_TOP_DIR ..." 530 einfo "Fetching CVS module ${ECVS_MODULE} into ${ECVS_TOP_DIR} ..."
536 cvs_fetch 531 cvs_fetch
537 else # ECVS_SERVER not set 532 else # ECVS_SERVER not set
538 die "ERROR: CVS server not specified, cannot continue." 533 die "ERROR: CVS server not specified, cannot continue."
539 fi 534 fi
540 535
541 einfo "Copying $ECVS_MODULE from $ECVS_TOP_DIR ..." 536 einfo "Copying ${ECVS_MODULE} from ${ECVS_TOP_DIR} ..."
542 debug-print "Copying module $ECVS_MODULE local_mode=$ECVS_LOCAL from $ECVS_TOP_DIR ..." 537 debug-print "Copying module ${ECVS_MODULE} local_mode=${ECVS_LOCAL} from ${ECVS_TOP_DIR} ..."
543 538
544 # This is probably redundant, but best to make sure. 539 # This is probably redundant, but best to make sure.
545 mkdir -p "$WORKDIR/$ECVS_LOCALNAME" 540 mkdir -p "${WORKDIR}/${ECVS_LOCALNAME}"
546 541
547 if [ -n "$ECVS_LOCAL" ]; then 542 if [[ -n ${ECVS_LOCAL} ]] ; then
548 cp -f "$ECVS_TOP_DIR/$ECVS_LOCALNAME"/* "$WORKDIR/$ECVS_LOCALNAME" 543 cp -f "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}"/* "${WORKDIR}/${ECVS_LOCALNAME}"
549 else 544 else
550 cp -Rf "$ECVS_TOP_DIR/$ECVS_LOCALNAME" "$WORKDIR/$ECVS_LOCALNAME/.." 545 cp -Rf "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" "${WORKDIR}/${ECVS_LOCALNAME}/.."
551 fi 546 fi
552 547
553 # Not exactly perfect, but should be pretty close #333773 548 # Not exactly perfect, but should be pretty close #333773
554 export ECVS_VERSION=$(find "$ECVS_TOP_DIR/$ECVS_LOCALNAME/" -ipath '*/CVS/Entries' -exec cat {} + | LC_ALL=C sort | sha1sum | awk '{print $1}') 549 export ECVS_VERSION=$(
550 find "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}/" -ipath '*/CVS/Entries' -exec cat {} + | \
551 LC_ALL=C sort | \
552 sha1sum | \
553 awk '{print $1}'
554 )
555 555
556 # If the directory is empty, remove it; empty directories cannot 556 # If the directory is empty, remove it; empty directories cannot
557 # exist in cvs. This happens when, for example, kde-source 557 # exist in cvs. This happens when, for example, kde-source
558 # requests module/doc/subdir which doesn't exist. Still create 558 # requests module/doc/subdir which doesn't exist. Still create
559 # the empty directory in workdir though. 559 # the empty directory in workdir though.
560 if [ "`ls -A \"${ECVS_TOP_DIR}/${ECVS_LOCALNAME}\"`" == "CVS" ]; then 560 if [[ $(ls -A "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}") == "CVS" ]] ; then
561 debug-print "$FUNCNAME: removing empty CVS directory $ECVS_LOCALNAME" 561 debug-print "${FUNCNAME}: removing empty CVS directory ${ECVS_LOCALNAME}"
562 rm -rf "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" 562 rm -rf "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}"
563 fi 563 fi
564 564
565 # Implement some of base_src_unpack's functionality; note however 565 # Implement some of base_src_unpack's functionality; note however
566 # that base.eclass may not have been inherited! 566 # that base.eclass may not have been inherited!
567 if [ -n "$PATCHES" ]; then 567 if [[ -n ${PATCHES} ]] ; then
568 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching" 568 debug-print "${FUNCNAME}: PATCHES=${PATCHES,} S=${S}, autopatching"
569 cd "$S" 569 cd "${S}"
570 epatch ${PATCHES} 570 epatch ${PATCHES}
571 # Make sure we don't try to apply patches more than once, 571 # Make sure we don't try to apply patches more than once,
572 # since cvs_src_unpack is usually called several times from 572 # since cvs_src_unpack is usually called several times from
573 # e.g. kde-source_src_unpack 573 # e.g. kde-source_src_unpack
574 export PATCHES="" 574 export PATCHES=""
576 576
577 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}" 577 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}"
578} 578}
579 579
580EXPORT_FUNCTIONS src_unpack 580EXPORT_FUNCTIONS src_unpack
581
582fi

Legend:
Removed from v.1.77  
changed lines
  Added in v.1.81

  ViewVC Help
Powered by ViewVC 1.1.20