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

Diff of /eclass/cvs.eclass

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

Revision 1.75 Revision 1.81
1# Copyright 1999-2008 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.75 2010/08/24 21:00:15 vapier 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?)
24 27
25 28
26# Users shouldn't change these settings! The ebuild/eclass inheriting 29# Users shouldn't change these settings! The ebuild/eclass inheriting
27# this eclass will take care of that. If you want to set the global 30# this eclass will take care of that. If you want to set the global
28# KDE cvs ebuilds' settings, see the comments in kde-source.eclass. 31# KDE cvs ebuilds' settings, see the comments in kde-source.eclass.
32
33# @ECLASS-VARIABLE: ECVS_CVS_COMPRESS
34# @DESCRIPTION:
35# Set the default compression level. Has no effect when ECVS_CVS_COMMAND
36# is defined by ebuild/user.
37: ${ECVS_CVS_COMPRESS:=-z1}
38
39# @ECLASS-VARIABLE: ECVS_CVS_OPTIONS
40# @DESCRIPTION:
41# Additional options to the cvs commands. Has no effect when ECVS_CVS_COMMAND
42# is defined by ebuild/user.
43: ${ECVS_CVS_OPTIONS:=-q -f}
29 44
30# @ECLASS-VARIABLE: ECVS_CVS_COMMAND 45# @ECLASS-VARIABLE: ECVS_CVS_COMMAND
31# @DESCRIPTION: 46# @DESCRIPTION:
32# CVS command to run 47# CVS command to run
33# 48#
34# You can set, for example, "cvs -t" for extensive debug information 49# You can set, for example, "cvs -t" for extensive debug information
35# on the cvs connection. The default of "cvs -q -f -z4" means to be 50# on the cvs connection. The default of "cvs -q -f -z4" means to be
36# quiet, to disregard the ~/.cvsrc config file and to use maximum 51# quiet, to disregard the ~/.cvsrc config file and to use maximum
37# compression. 52# compression.
38[[ -z ${ECVS_CVS_COMMAND} ]] && ECVS_CVS_COMMAND="cvs ${ECVS_CVS_OPTIONS} ${ECVS_CVS_COMPRESS}" 53: ${ECVS_CVS_COMMAND:=cvs ${ECVS_CVS_OPTIONS} ${ECVS_CVS_COMPRESS}}
39
40# @ECLASS-VARIABLE: ECVS_CVS_COMPRESS
41# @DESCRIPTION:
42# Set the compression level.
43[[ -z ${ECVS_CVS_COMPRESS} ]] && ECVS_CVS_COMPRESS="-z1"
44
45# @ECLASS-VARIABLE: ECVS_CVS_OPTIONS
46# @DESCRIPTION:
47# Additional options to the cvs commands.
48[[ -z ${ECVS_CVS_OPTIONS} ]] && ECVS_CVS_OPTIONS="-q -f"
49 54
50# @ECLASS-VARIABLE: ECVS_UP_OPTS 55# @ECLASS-VARIABLE: ECVS_UP_OPTS
51# @DESCRIPTION: 56# @DESCRIPTION:
52# CVS options given after the cvs update command. Don't remove "-dP" or things 57# CVS options given after the cvs update command. Don't remove "-dP" or things
53# won't work. 58# won't work.
54[ -z "$ECVS_UP_OPTS" ] && ECVS_UP_OPTS="-dP" 59: ${ECVS_UP_OPTS:=-dP}
55 60
56# @ECLASS-VARIABLE: ECVS_CO_OPTS 61# @ECLASS-VARIABLE: ECVS_CO_OPTS
62# @DEFAULT_UNSET
57# @DESCRIPTION: 63# @DESCRIPTION:
58# CVS options given after the cvs checkout command. 64# CVS options given after the cvs checkout command.
59[ -z "$ECVS_CO_OPTS" ] && ECVS_CO_OPTS=""
60 65
61# @ECLASS-VARIABLE: ECVS_OFFLINE 66# @ECLASS-VARIABLE: ECVS_OFFLINE
62# @DESCRIPTION: 67# @DESCRIPTION:
63# Set this variable to a non-empty value to disable the automatic updating of 68# Set this variable to a non-empty value to disable the automatic updating of
64# a CVS source tree. This is intended to be set outside the cvs source 69# a CVS source tree. This is intended to be set outside the cvs source
65# tree by users. 70# tree by users.
66: ${ECVS_OFFLINE:=${ESCM_OFFLINE}} 71: ${ECVS_OFFLINE:=${EVCS_OFFLINE}}
67 72
68# @ECLASS-VARIABLE: ECVS_LOCAL 73# @ECLASS-VARIABLE: ECVS_LOCAL
69# @DEFAULT_UNSET 74# @DEFAULT_UNSET
70# @DESCRIPTION: 75# @DESCRIPTION:
71# If this is set, the CVS module will be fetched non-recursively. 76# If this is set, the CVS module will be fetched non-recursively.
86# have e.g. a wrong $S setting. 91# have e.g. a wrong $S setting.
87 92
88# @ECLASS-VARIABLE: ECVS_TOP_DIR 93# @ECLASS-VARIABLE: ECVS_TOP_DIR
89# @DESCRIPTION: 94# @DESCRIPTION:
90# The directory under which CVS modules are checked out. 95# The directory under which CVS modules are checked out.
91[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/cvs-src" 96: ${ECVS_TOP_DIR:="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/cvs-src"}
92 97
93# @ECLASS-VARIABLE: ECVS_SERVER 98# @ECLASS-VARIABLE: ECVS_SERVER
94# @DESCRIPTION: 99# @DESCRIPTION:
95# CVS path 100# CVS path
96# 101#
99# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated 104# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated
100# using other settings also. 105# using other settings also.
101# 106#
102# 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
103# is already checked out in ECVS_TOP_DIR). 108# is already checked out in ECVS_TOP_DIR).
104[ -z "$ECVS_SERVER" ] && ECVS_SERVER="offline" 109: ${ECVS_SERVER:="offline"}
105 110
106# @ECLASS-VARIABLE: ECVS_MODULE 111# @ECLASS-VARIABLE: ECVS_MODULE
107# @REQUIRED 112# @REQUIRED
108# @DESCRIPTION: 113# @DESCRIPTION:
109# The name of the CVS module to be fetched 114# The name of the CVS module to be fetched
110# 115#
111# 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
112# several directory levels, i.e. "foo/bar/baz" 117# several directory levels, i.e. "foo/bar/baz"
113
114#[ -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.
115 125
116# @ECLASS-VARIABLE: ECVS_BRANCH 126# @ECLASS-VARIABLE: ECVS_BRANCH
117# @DEFAULT_UNSET 127# @DEFAULT_UNSET
118# @DESCRIPTION: 128# @DESCRIPTION:
119# The name of the branch/tag to use 129# The name of the branch/tag to use
120# 130#
121# The default is "HEAD". The following default _will_ reset your 131# The default is "HEAD". The following default _will_ reset your
122# branch checkout to head if used. 132# branch checkout to head if used.
123 133#: ${ECVS_BRANCH:="HEAD"}
124#[ -z "$ECVS_BRANCH" ] && ECVS_BRANCH="HEAD"
125 134
126# @ECLASS-VARIABLE: ECVS_AUTH 135# @ECLASS-VARIABLE: ECVS_AUTH
127# @DESCRIPTION: 136# @DESCRIPTION:
128# Authentication method to use 137# Authentication method to use
129# 138#
136# - 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
137# does it login 146# does it login
138# e.g. 147# e.g.
139# "cvs -danoncvs@savannah.gnu.org:/cvsroot/backbone co System" 148# "cvs -danoncvs@savannah.gnu.org:/cvsroot/backbone co System"
140# ( from gnustep-apps/textedit ) 149# ( from gnustep-apps/textedit )
141[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver" 150: ${ECVS_AUTH:="pserver"}
142 151
143# @ECLASS-VARIABLE: ECVS_USER 152# @ECLASS-VARIABLE: ECVS_USER
144# @DESCRIPTION: 153# @DESCRIPTION:
145# Username to use for authentication on the remote server. 154# Username to use for authentication on the remote server.
146[ -z "$ECVS_USER" ] && ECVS_USER="anonymous" 155: ${ECVS_USER:="anonymous"}
147 156
148# @ECLASS-VARIABLE: ECVS_PASS 157# @ECLASS-VARIABLE: ECVS_PASS
158# @DEFAULT_UNSET
149# @DESCRIPTION: 159# @DESCRIPTION:
150# Password to use for authentication on the remote server 160# Password to use for authentication on the remote server
151[ -z "$ECVS_PASS" ] && ECVS_PASS=""
152 161
153# @ECLASS-VARIABLE: ECVS_SSH_HOST_KEY 162# @ECLASS-VARIABLE: ECVS_SSH_HOST_KEY
154# @DEFAULT_UNSET 163# @DEFAULT_UNSET
155# @DESCRIPTION: 164# @DESCRIPTION:
156# If SSH is used for `ext' authentication, use this variable to 165# If SSH is used for `ext' authentication, use this variable to
171# @DESCRIPTION: 180# @DESCRIPTION:
172# 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
173# b0rked and wouldn't work with portage userpriv anyway without 182# b0rked and wouldn't work with portage userpriv anyway without
174# special magic. 183# special magic.
175 184
176# [ -z "$ECVS_RUNAS" ] && ECVS_RUNAS="`whoami`" 185# : ${ECVS_RUNAS:=$(whoami)}
177
178# ECVS_SUBDIR -- deprecated, do not use
179[ -n "$ECVS_SUBDIR" ] && die "ERROR: deprecated ECVS_SUBDIR defined. Please fix this ebuild."
180 186
181# add cvs to deps 187# add cvs to deps
182# ssh is used for ext auth 188# ssh is used for ext auth
183# sudo is used to run as a specified user 189# sudo is used to run as a specified user
184DEPEND="dev-vcs/cvs" 190DEPEND="dev-vcs/cvs"
185 191
186[ -n "$ECVS_RUNAS" ] && DEPEND="$DEPEND app-admin/sudo" 192[[ -n ${ECVS_RUNAS} ]] && DEPEND+=" app-admin/sudo"
187 193
188if [ "$ECVS_AUTH" == "ext" ]; then 194if [[ ${ECVS_AUTH} == "ext" ]] ; then
189 #default to ssh 195 #default to ssh
190 [ -z "$CVS_RSH" ] && export CVS_RSH="ssh" 196 [[ -z ${CVS_RSH} ]] && export CVS_RSH="ssh"
191 if [ "$CVS_RSH" != "ssh" ]; then 197 if [[ ${CVS_RSH} != "ssh" ]] ; then
192 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"
193 fi 199 fi
194 DEPEND="${DEPEND} net-misc/openssh" 200 DEPEND+=" net-misc/openssh"
195fi 201fi
196 202
197# called from cvs_src_unpack 203# called from cvs_src_unpack
198cvs_fetch() { 204cvs_fetch() {
199 205
200 # Make these options local variables so that the global values are 206 # Make these options local variables so that the global values are
201 # not affected by modifications in this function. 207 # not affected by modifications in this function.
202 208
203 local ECVS_COMMAND="${ECVS_COMMAND}" 209 local ECVS_COMMAND=${ECVS_COMMAND}
204 local ECVS_UP_OPTS="${ECVS_UP_OPTS}" 210 local ECVS_UP_OPTS=${ECVS_UP_OPTS}
205 local ECVS_CO_OPTS="${ECVS_CO_OPTS}" 211 local ECVS_CO_OPTS=${ECVS_CO_OPTS}
206 212
207 debug-print-function $FUNCNAME $* 213 debug-print-function ${FUNCNAME} "$@"
208 214
209 # Update variables that are modified by ebuild parameters, which 215 # Update variables that are modified by ebuild parameters, which
210 # 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
211 # every time cvs.eclass is inherited 217 # every time cvs.eclass is inherited
212 218
213 # Handle parameter for local (non-recursive) fetching 219 # Handle parameter for local (non-recursive) fetching
214 220
215 if [ -n "$ECVS_LOCAL" ]; then 221 if [[ -n ${ECVS_LOCAL} ]] ; then
216 ECVS_UP_OPTS="$ECVS_UP_OPTS -l" 222 ECVS_UP_OPTS+=" -l"
217 ECVS_CO_OPTS="$ECVS_CO_OPTS -l" 223 ECVS_CO_OPTS+=" -l"
218 fi 224 fi
219 225
220 # Handle ECVS_BRANCH option 226 # Handle ECVS_BRANCH option
221 # 227 #
222 # Because CVS auto-switches branches, we just have to pass the 228 # Because CVS auto-switches branches, we just have to pass the
223 # correct -rBRANCH option when updating. 229 # correct -rBRANCH option when updating.
224 230
225 if [ -n "$ECVS_BRANCH" ]; then 231 if [[ -n ${ECVS_BRANCH} ]] ; then
226 ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH" 232 ECVS_UP_OPTS+=" -r${ECVS_BRANCH}"
227 ECVS_CO_OPTS="$ECVS_CO_OPTS -r$ECVS_BRANCH" 233 ECVS_CO_OPTS+=" -r${ECVS_BRANCH}"
228 fi 234 fi
229 235
230 # Handle ECVS_LOCALNAME, which specifies the local directory name 236 # Handle ECVS_LOCALNAME, which specifies the local directory name
231 # 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
232 # the global -d option. 238 # the global -d option.
233 239
234 if [ "$ECVS_LOCALNAME" != "$ECVS_MODULE" ]; then 240 if [[ ${ECVS_LOCALNAME} != "${ECVS_MODULE}" ]] ; then
235 ECVS_CO_OPTS="$ECVS_CO_OPTS -d $ECVS_LOCALNAME" 241 ECVS_CO_OPTS+=" -d ${ECVS_LOCALNAME}"
236 fi 242 fi
237 243
238
239 if [ -n "$ECVS_CLEAN" ]; then 244 if [[ -n ${ECVS_CLEAN} ]] ; then
240 ECVS_UP_OPTS="$ECVS_UP_OPTS -C" 245 ECVS_UP_OPTS+=" -C"
241 fi 246 fi
242 247
248 if [[ -n ${ECVS_DATE} ]] ; then
249 ECVS_CO_OPTS+=" -D ${ECVS_DATE}"
250 ECVS_UP_OPTS+=" -D ${ECVS_DATE}"
251 fi
243 252
244 # 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,
245 # 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`.
246 255
247 if [ -z "$ECVS_RUNAS" ]; then 256 if [[ -z ${ECVS_RUNAS} ]] ; then
248 run="" 257 run=""
249 else 258 else
250 run="sudo -u $ECVS_RUNAS" 259 run="sudo -u ${ECVS_RUNAS}"
251 fi 260 fi
252 261
253 # Create the top dir if needed 262 # Create the top dir if needed
254 263
255 if [ ! -d "$ECVS_TOP_DIR" ]; then 264 if [[ ! -d ${ECVS_TOP_DIR} ]] ; then
256
257 # Note that the addwrite statements in this block are only 265 # Note that the addwrite statements in this block are only
258 # there to allow creating ECVS_TOP_DIR; we allow writing 266 # there to allow creating ECVS_TOP_DIR; we allow writing
259 # inside it separately. 267 # inside it separately.
260 268
261 # 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
262 # parent path of the directory, which would need to be the 270 # parent path of the directory, which would need to be the
263 # 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
264 # just remove the last path element in the string) 272 # just remove the last path element in the string)
265 273
266 debug-print "$FUNCNAME: checkout mode. creating cvs directory" 274 debug-print "${FUNCNAME}: checkout mode. creating cvs directory"
267 addwrite /foobar 275 addwrite /foobar
268 addwrite / 276 addwrite /
269 $run mkdir -p "/$ECVS_TOP_DIR" 277 ${run} mkdir -p "/${ECVS_TOP_DIR}"
270 export SANDBOX_WRITE="${SANDBOX_WRITE//:\/foobar:\/}" 278 export SANDBOX_WRITE="${SANDBOX_WRITE//:\/foobar:\/}"
271 fi 279 fi
272 280
273 # 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,
274 # otherwise addwrite() doesn't work. 282 # otherwise addwrite() doesn't work.
275 283
276 cd -P "$ECVS_TOP_DIR" > /dev/null 284 cd -P "${ECVS_TOP_DIR}" >/dev/null
277 ECVS_TOP_DIR="`/bin/pwd`" 285 ECVS_TOP_DIR=$(pwd)
278 286
279 # Disable the sandbox for this dir 287 # Disable the sandbox for this dir
280 addwrite "$ECVS_TOP_DIR" 288 addwrite "${ECVS_TOP_DIR}"
281 289
282 # Chown the directory and all of its contents 290 # Chown the directory and all of its contents
283 if [ -n "$ECVS_RUNAS" ]; then 291 if [[ -n ${ECVS_RUNAS} ]] ; then
284 $run chown -R "$ECVS_RUNAS" "/$ECVS_TOP_DIR" 292 ${run} chown -R "${ECVS_RUNAS}" "/${ECVS_TOP_DIR}"
285 fi 293 fi
286 294
287 # Determine the CVS command mode (checkout or update) 295 # Determine the CVS command mode (checkout or update)
288 if [ ! -d "$ECVS_TOP_DIR/$ECVS_LOCALNAME/CVS" ]; then 296 if [[ ! -d ${ECVS_TOP_DIR}/${ECVS_LOCALNAME}/CVS ]] ; then
289 mode=checkout 297 mode=checkout
290 else 298 else
291 mode=update 299 mode=update
292 fi 300 fi
293 301
294
295 # 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
296 # be put in Root 303 # be put in Root
297 if [ "$ECVS_AUTH" == "no" ] 304 if [[ ${ECVS_AUTH} == "no" ]] ; then
298 then
299 local server="${ECVS_USER}@${ECVS_SERVER}" 305 local server="${ECVS_USER}@${ECVS_SERVER}"
300 else 306 else
301 local connection="${ECVS_AUTH}" 307 local connection="${ECVS_AUTH}"
302 [[ -n ${ECVS_PROXY} ]] && connection="${connection};proxy=${ECVS_PROXY}" 308 [[ -n ${ECVS_PROXY} ]] && connection+=";proxy=${ECVS_PROXY}"
303 [[ -n ${ECVS_PROXY_PORT} ]] && connection="${connection};proxyport=${ECVS_PROXY_PORT}" 309 [[ -n ${ECVS_PROXY_PORT} ]] && connection+=";proxyport=${ECVS_PROXY_PORT}"
304 local server=":${connection}:${ECVS_USER}@${ECVS_SERVER}" 310 local server=":${connection}:${ECVS_USER}@${ECVS_SERVER}"
305 fi 311 fi
306 312
307 # Switch servers automagically if needed 313 # Switch servers automagically if needed
308 if [ "$mode" == "update" ]; then 314 if [[ ${mode} == "update" ]] ; then
309 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME 315 cd "/${ECVS_TOP_DIR}/${ECVS_LOCALNAME}"
310 local oldserver="`$run cat CVS/Root`" 316 local oldserver=$(${run} cat CVS/Root)
311 if [ "$server" != "$oldserver" ]; then 317 if [[ ${server} != "${oldserver}" ]] ; then
312
313 einfo "Changing the CVS server from $oldserver to $server:" 318 einfo "Changing the CVS server from ${oldserver} to ${server}:"
314 debug-print "$FUNCNAME: Changing the CVS server from $oldserver to $server:" 319 debug-print "${FUNCNAME}: Changing the CVS server from ${oldserver} to ${server}:"
315 320
316 einfo "Searching for CVS directories ..." 321 einfo "Searching for CVS directories ..."
317 local cvsdirs="`$run find . -iname CVS -print`" 322 local cvsdirs=$(${run} find . -iname CVS -print)
318 debug-print "$FUNCNAME: CVS directories found:" 323 debug-print "${FUNCNAME}: CVS directories found:"
319 debug-print "$cvsdirs" 324 debug-print "${cvsdirs}"
320 325
321 einfo "Modifying CVS directories ..." 326 einfo "Modifying CVS directories ..."
327 local x
322 for x in $cvsdirs; do 328 for x in ${cvsdirs} ; do
323 debug-print "In $x" 329 debug-print "In ${x}"
324 $run echo "$server" > "$x/Root" 330 ${run} echo "${server}" > "${x}/Root"
325 done 331 done
326
327 fi 332 fi
328 fi 333 fi
329 334
330 # 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
331 # mess with ~/.cvspass 336 # mess with ~/.cvspass
332 touch "${T}/cvspass" 337 touch "${T}/cvspass"
333 export CVS_PASSFILE="${T}/cvspass" 338 export CVS_PASSFILE="${T}/cvspass"
334 if [ -n "$ECVS_RUNAS" ]; then 339 if [[ -n ${ECVS_RUNAS} ]] ; then
335 chown "$ECVS_RUNAS" "${T}/cvspass" 340 chown "${ECVS_RUNAS}" "${T}/cvspass"
336 fi 341 fi
337 342
338 # The server string with the password in it, for login 343 # The server string with the password in it, for login
339 cvsroot_pass=":${ECVS_AUTH}:${ECVS_USER}:${ECVS_PASS}@${ECVS_SERVER}" 344 cvsroot_pass=":${ECVS_AUTH}:${ECVS_USER}:${ECVS_PASS}@${ECVS_SERVER}"
340 345
341 # Ditto without the password, for checkout/update after login, so 346 # Ditto without the password, for checkout/update after login, so
342 # 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
343 if [ "$ECVS_AUTH" == "no" ] 348 if [[ ${ECVS_AUTH} == "no" ]] ; then
344 then
345 cvsroot_nopass="${ECVS_USER}@${ECVS_SERVER}" 349 cvsroot_nopass="${ECVS_USER}@${ECVS_SERVER}"
346 else 350 else
347 cvsroot_nopass=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}" 351 cvsroot_nopass=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}"
348 fi 352 fi
349 353
353 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}"
354 358
355 # Execute commands 359 # Execute commands
356 360
357 cd "${ECVS_TOP_DIR}" 361 cd "${ECVS_TOP_DIR}"
358 if [ "${ECVS_AUTH}" == "pserver" ]; then 362 if [[ ${ECVS_AUTH} == "pserver" ]] ; then
359 einfo "Running $cmdlogin" 363 einfo "Running ${cmdlogin}"
360 eval $cmdlogin || die "cvs login command failed" 364 eval ${cmdlogin} || die "cvs login command failed"
361 if [ "${mode}" == "update" ]; then 365 if [[ ${mode} == "update" ]] ; then
362 einfo "Running $cmdupdate" 366 einfo "Running ${cmdupdate}"
363 eval $cmdupdate || die "cvs update command failed" 367 eval ${cmdupdate} || die "cvs update command failed"
364 elif [ "${mode}" == "checkout" ]; then 368 elif [[ ${mode} == "checkout" ]] ; then
365 einfo "Running $cmdcheckout" 369 einfo "Running ${cmdcheckout}"
366 eval $cmdcheckout|| die "cvs checkout command failed" 370 eval ${cmdcheckout} || die "cvs checkout command failed"
367 fi 371 fi
368 elif [ "${ECVS_AUTH}" == "ext" ] || [ "${ECVS_AUTH}" == "no" ]; then 372 elif [[ ${ECVS_AUTH} == "ext" || ${ECVS_AUTH} == "no" ]] ; then
369
370 # Hack to support SSH password authentication 373 # Hack to support SSH password authentication
371 374
372 # Backup environment variable values 375 # Backup environment variable values
373 local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}" 376 local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}"
374 377
375 if [ "${SSH_ASKPASS+set}" == "set" ]; then 378 if [[ ${SSH_ASKPASS+set} == "set" ]] ; then
376 local CVS_ECLASS_ORIG_SSH_ASKPASS="${SSH_ASKPASS}" 379 local CVS_ECLASS_ORIG_SSH_ASKPASS="${SSH_ASKPASS}"
377 else 380 else
378 unset CVS_ECLASS_ORIG_SSH_ASKPASS 381 unset CVS_ECLASS_ORIG_SSH_ASKPASS
379 fi 382 fi
380 383
381 if [ "${DISPLAY+set}" == "set" ]; then 384 if [[ ${DISPLAY+set} == "set" ]] ; then
382 local CVS_ECLASS_ORIG_DISPLAY="${DISPLAY}" 385 local CVS_ECLASS_ORIG_DISPLAY="${DISPLAY}"
383 else 386 else
384 unset CVS_ECLASS_ORIG_DISPLAY 387 unset CVS_ECLASS_ORIG_DISPLAY
385 fi 388 fi
386 389
387 if [ "${CVS_RSH}" == "ssh" ]; then 390 if [[ ${CVS_RSH} == "ssh" ]] ; then
388
389 # Force SSH to use SSH_ASKPASS by creating python wrapper 391 # Force SSH to use SSH_ASKPASS by creating python wrapper
390 392
391 export CVS_RSH="${T}/cvs_sshwrapper" 393 export CVS_RSH="${T}/cvs_sshwrapper"
392 cat > "${CVS_RSH}"<<EOF 394 cat > "${CVS_RSH}"<<EOF
393#!/usr/bin/python 395#!/usr/bin/python
418 420
419 local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts" 421 local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts"
420 echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \ 422 echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \
421 >> "${CVS_RSH}" 423 >> "${CVS_RSH}"
422 424
423 if [ -z "${ECVS_SSH_HOST_KEY}" ]; then 425 if [[ -z ${ECVS_SSH_HOST_KEY} ]] ; then
424 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."
425 einfo "A temporary known hosts list will be used." 427 einfo "A temporary known hosts list will be used."
426 local CVS_ECLASS_STRICT_HOST_CHECKING="no" 428 local CVS_ECLASS_STRICT_HOST_CHECKING="no"
427 touch "${CVS_ECLASS_KNOWN_HOSTS}" 429 touch "${CVS_ECLASS_KNOWN_HOSTS}"
428 else 430 else
440 chmod a+x "${CVS_RSH}" 442 chmod a+x "${CVS_RSH}"
441 443
442 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS 444 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS
443 # if DISPLAY is not set) 445 # if DISPLAY is not set)
444 446
445 [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY" 447 : ${DISPLAY:="DISPLAY"}
446 export DISPLAY 448 export DISPLAY
447 449
448 # Create a dummy executable to echo $ECVS_PASS 450 # Create a dummy executable to echo ${ECVS_PASS}
449 451
450 export SSH_ASKPASS="${T}/cvs_sshechopass" 452 export SSH_ASKPASS="${T}/cvs_sshechopass"
451 if [ "${ECVS_AUTH}" != "no" ]; then 453 if [[ ${ECVS_AUTH} != "no" ]] ; then
452 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \ 454 echo -en "#!/bin/bash\necho \"${ECVS_PASS}\"\n" \
453 > "${SSH_ASKPASS}" 455 > "${SSH_ASKPASS}"
454 else 456 else
455 echo -en "#!/bin/bash\nreturn\n" \ 457 echo -en "#!/bin/bash\nreturn\n" \
456 > "${SSH_ASKPASS}" 458 > "${SSH_ASKPASS}"
457
458 fi 459 fi
459 chmod a+x "${SSH_ASKPASS}" 460 chmod a+x "${SSH_ASKPASS}"
460 fi 461 fi
461 462
462 if [ "${mode}" == "update" ]; then 463 if [[ ${mode} == "update" ]] ; then
463 einfo "Running $cmdupdate" 464 einfo "Running ${cmdupdate}"
464 eval $cmdupdate || die "cvs update command failed" 465 eval ${cmdupdate} || die "cvs update command failed"
465 elif [ "${mode}" == "checkout" ]; then 466 elif [[ ${mode} == "checkout" ]] ; then
466 einfo "Running $cmdcheckout" 467 einfo "Running ${cmdcheckout}"
467 eval $cmdcheckout|| die "cvs checkout command failed" 468 eval ${cmdcheckout} || die "cvs checkout command failed"
468 fi 469 fi
469 470
470 # Restore environment variable values 471 # Restore environment variable values
471 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}" 472 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}"
472 if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then 473 if [[ ${CVS_ECLASS_ORIG_SSH_ASKPASS+set} == "set" ]] ; then
473 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}" 474 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}"
474 else 475 else
475 unset SSH_ASKPASS 476 unset SSH_ASKPASS
476 fi 477 fi
477 478
478 if [ "${CVS_ECLASS_ORIG_DISPLAY+set}" == "set" ]; then 479 if [[ ${CVS_ECLASS_ORIG_DISPLAY+set} == "set" ]] ; then
479 export DISPLAY="${CVS_ECLASS_ORIG_DISPLAY}" 480 export DISPLAY="${CVS_ECLASS_ORIG_DISPLAY}"
480 else 481 else
481 unset DISPLAY 482 unset DISPLAY
482 fi 483 fi
483 fi 484 fi
484 485
485 # Restore ownership. Not sure why this is needed, but someone 486 # Restore ownership. Not sure why this is needed, but someone
486 # added it in the orig ECVS_RUNAS stuff. 487 # added it in the orig ECVS_RUNAS stuff.
487 if [ -n "$ECVS_RUNAS" ]; then 488 if [[ -n ${ECVS_RUNAS} ]] ; then
488 chown `whoami` "${T}/cvspass" 489 chown $(whoami) "${T}/cvspass"
489 fi 490 fi
490 491
491} 492}
492 493
493# @FUNCTION: cvs_src_unpack 494# @FUNCTION: cvs_src_unpack
494# @DESCRIPTION: 495# @DESCRIPTION:
495# The cvs src_unpack function, which will be exported 496# The cvs src_unpack function, which will be exported
496cvs_src_unpack() { 497cvs_src_unpack() {
497 498
498 debug-print-function $FUNCNAME $* 499 debug-print-function ${FUNCNAME} "$@"
499 500
500 debug-print "$FUNCNAME: init: 501 debug-print "${FUNCNAME}: init:
501 ECVS_CVS_COMMAND=$ECVS_CVS_COMMAND 502 ECVS_CVS_COMMAND=${ECVS_CVS_COMMAND}
502 ECVS_UP_OPTS=$ECVS_UP_OPTS 503 ECVS_UP_OPTS=${ECVS_UP_OPTS}
503 ECVS_CO_OPTS=$ECVS_CO_OPTS 504 ECVS_CO_OPTS=${ECVS_CO_OPTS}
504 ECVS_TOP_DIR=$ECVS_TOP_DIR 505 ECVS_TOP_DIR=${ECVS_TOP_DIR}
505 ECVS_SERVER=$ECVS_SERVER 506 ECVS_SERVER=${ECVS_SERVER}
506 ECVS_USER=$ECVS_USER 507 ECVS_USER=${ECVS_USER}
507 ECVS_PASS=$ECVS_PASS 508 ECVS_PASS=${ECVS_PASS}
508 ECVS_MODULE=$ECVS_MODULE 509 ECVS_MODULE=${ECVS_MODULE}
509 ECVS_LOCAL=$ECVS_LOCAL 510 ECVS_LOCAL=${ECVS_LOCAL}
510 ECVS_RUNAS=$ECVS_RUNAS 511 ECVS_RUNAS=${ECVS_RUNAS}
511 ECVS_LOCALNAME=$ECVS_LOCALNAME" 512 ECVS_LOCALNAME=${ECVS_LOCALNAME}"
512 513
513 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue." 514 [[ -z ${ECVS_MODULE} ]] && die "ERROR: CVS module not set, cannot continue."
514 515
515 local ECVS_LOCALNAME="${ECVS_LOCALNAME}" 516 local ECVS_LOCALNAME=${ECVS_LOCALNAME:-${ECVS_MODULE}}
516
517 if [ -z "$ECVS_LOCALNAME" ]; then
518 ECVS_LOCALNAME="$ECVS_MODULE"
519 fi
520 517
521 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')
522 local offline_pkg_var="ECVS_OFFLINE_${sanitized_pn}" 519 local offline_pkg_var="ECVS_OFFLINE_${sanitized_pn}"
523 if [[ -n ${!offline_pkg_var}${ECVS_OFFLINE} ]] || [[ "$ECVS_SERVER" == "offline" ]] ; then 520 if [[ -n ${!offline_pkg_var}${ECVS_OFFLINE} ]] || [[ ${ECVS_SERVER} == "offline" ]] ; then
524 # We're not required to fetch anything; the module already 521 # We're not required to fetch anything; the module already
525 # exists and shouldn't be updated. 522 # exists and shouldn't be updated.
526 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then 523 if [[ -d ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} ]] ; then
527 debug-print "$FUNCNAME: offline mode" 524 debug-print "${FUNCNAME}: offline mode"
528 else 525 else
529 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"
530 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."
531 fi 528 fi
532 elif [ -n "$ECVS_SERVER" ]; then # ECVS_SERVER!=offline --> real fetching mode 529 elif [[ -n ${ECVS_SERVER} ]] ; then # ECVS_SERVER!=offline --> real fetching mode
533 einfo "Fetching CVS module $ECVS_MODULE into $ECVS_TOP_DIR ..." 530 einfo "Fetching CVS module ${ECVS_MODULE} into ${ECVS_TOP_DIR} ..."
534 cvs_fetch 531 cvs_fetch
535 else # ECVS_SERVER not set 532 else # ECVS_SERVER not set
536 die "ERROR: CVS server not specified, cannot continue." 533 die "ERROR: CVS server not specified, cannot continue."
537 fi 534 fi
538 535
539 einfo "Copying $ECVS_MODULE from $ECVS_TOP_DIR ..." 536 einfo "Copying ${ECVS_MODULE} from ${ECVS_TOP_DIR} ..."
540 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} ..."
541 538
542 # This is probably redundant, but best to make sure. 539 # This is probably redundant, but best to make sure.
543 mkdir -p "$WORKDIR/$ECVS_LOCALNAME" 540 mkdir -p "${WORKDIR}/${ECVS_LOCALNAME}"
544 541
545 if [ -n "$ECVS_LOCAL" ]; then 542 if [[ -n ${ECVS_LOCAL} ]] ; then
546 cp -f "$ECVS_TOP_DIR/$ECVS_LOCALNAME"/* "$WORKDIR/$ECVS_LOCALNAME" 543 cp -f "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}"/* "${WORKDIR}/${ECVS_LOCALNAME}"
547 else 544 else
548 cp -Rf "$ECVS_TOP_DIR/$ECVS_LOCALNAME" "$WORKDIR/$ECVS_LOCALNAME/.." 545 cp -Rf "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" "${WORKDIR}/${ECVS_LOCALNAME}/.."
549 fi 546 fi
550 547
551 # Not exactly perfect, but should be pretty close #333773 548 # Not exactly perfect, but should be pretty close #333773
552 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=$(
553 export ESCM_VERSION=${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 )
554 555
555 # If the directory is empty, remove it; empty directories cannot 556 # If the directory is empty, remove it; empty directories cannot
556 # exist in cvs. This happens when, for example, kde-source 557 # exist in cvs. This happens when, for example, kde-source
557 # requests module/doc/subdir which doesn't exist. Still create 558 # requests module/doc/subdir which doesn't exist. Still create
558 # the empty directory in workdir though. 559 # the empty directory in workdir though.
559 if [ "`ls -A \"${ECVS_TOP_DIR}/${ECVS_LOCALNAME}\"`" == "CVS" ]; then 560 if [[ $(ls -A "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}") == "CVS" ]] ; then
560 debug-print "$FUNCNAME: removing empty CVS directory $ECVS_LOCALNAME" 561 debug-print "${FUNCNAME}: removing empty CVS directory ${ECVS_LOCALNAME}"
561 rm -rf "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" 562 rm -rf "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}"
562 fi 563 fi
563 564
564 # Implement some of base_src_unpack's functionality; note however 565 # Implement some of base_src_unpack's functionality; note however
565 # that base.eclass may not have been inherited! 566 # that base.eclass may not have been inherited!
566 if [ -n "$PATCHES" ]; then 567 if [[ -n ${PATCHES} ]] ; then
567 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching" 568 debug-print "${FUNCNAME}: PATCHES=${PATCHES,} S=${S}, autopatching"
568 cd "$S" 569 cd "${S}"
569 epatch ${PATCHES} 570 epatch ${PATCHES}
570 # 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,
571 # since cvs_src_unpack is usually called several times from 572 # since cvs_src_unpack is usually called several times from
572 # e.g. kde-source_src_unpack 573 # e.g. kde-source_src_unpack
573 export PATCHES="" 574 export PATCHES=""
575 576
576 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}" 577 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}"
577} 578}
578 579
579EXPORT_FUNCTIONS src_unpack 580EXPORT_FUNCTIONS src_unpack
581
582fi

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

  ViewVC Help
Powered by ViewVC 1.1.20