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

Diff of /eclass/cvs.eclass

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

Revision 1.52 Revision 1.70
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2008 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.52 2004/09/28 06:18:06 fafhrd Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/cvs.eclass,v 1.70 2008/04/27 07:00:40 ulm Exp $
4 4
5# Current Maintainer: Tal Peer <coredumb@gentoo.org> 5# @ECLASS: cvs.eclass
6# Original Author: Dan Armak <danarmak@gentoo.org> 6# @MAINTAINER:
7 7# vapier@gentoo.org (and anyone who wants to help)
8# SSH auth code by Danny <danny.milo@gmx.net> 8# @BLURB: This eclass provides generic cvs fetching functions
9 9# @DESCRIPTION:
10# SSH password authentication support and host key verification
11# support by Jeremy Maitin-Shepard <jbms@gentoo.org>
12
13
14# This eclass provides the generic cvs fetching functions. To use 10# This eclass provides the generic cvs fetching functions. To use this from an
15# this from an ebuild, set the `ebuild-configurable settings' as 11# ebuild, set the ECLASS VARIABLES as specified below in your ebuild before
16# specified below in your ebuild before inheriting. Then either leave 12# inheriting. Then either leave the default src_unpack or extend over
17# the default src_unpack or extend over cvs_src_unpack. If you find 13# cvs_src_unpack. If you find that you need to call the cvs_* functions
18# that you need to call the cvs_* functions directly, I'd be
19# interested to hear about it. 14# directly, I'd be interested to hear about it.
15
16inherit eutils
20 17
21# TODO: 18# TODO:
22 19
23# Implement more auth types (gserver?, kserver?) 20# Implement more auth types (gserver?, kserver?)
24 21
25# Support additional remote shells with `ext' authentication (does 22# Support additional remote shells with `ext' authentication (does
26# anyone actually need to use it with anything other than SSH?) 23# anyone actually need to use it with anything other than SSH?)
27 24
28
29ECLASS=cvs
30INHERITED="$INHERITED $ECLASS"
31 25
32# Users shouldn't change these settings! The ebuild/eclass inheriting 26# Users shouldn't change these settings! The ebuild/eclass inheriting
33# this eclass will take care of that. If you want to set the global 27# this eclass will take care of that. If you want to set the global
34# KDE cvs ebuilds' settings, see the comments in kde-source.eclass. 28# KDE cvs ebuilds' settings, see the comments in kde-source.eclass.
35 29
36# --- begin ebuild-configurable settings 30# @ECLASS-VARIABLE: ECVS_CVS_COMMAND
37 31# @DESCRIPTION:
38# ECVS_CVS_COMMAND -- CVS command to run 32# CVS command to run
39# 33#
40# You can set, for example, "cvs -t" for extensive debug information 34# You can set, for example, "cvs -t" for extensive debug information
41# on the cvs connection. The default of "cvs -q -f -z4" means to be 35# on the cvs connection. The default of "cvs -q -f -z4" means to be
42# quiet, to disregard the ~/.cvsrc config file and to use maximum 36# quiet, to disregard the ~/.cvsrc config file and to use maximum
43# compression. 37# compression.
44 38
45[ -z "$ECVS_CVS_COMMAND" ] && ECVS_CVS_COMMAND="cvs -q -f -z4" 39# @ECLASS-VARIABLE: ECVS_CVS_COMPRESS
40# @DESCRIPTION:
41# Set the compression level.
42[[ -z ${ECVS_CVS_COMPRESS} ]] && ECVS_CVS_COMPRESS="-z1"
46 43
44# @ECLASS-VARIABLE: ECVS_CVS_OPTIONS
45# @DESCRIPTION:
46# Additional options to the cvs commands.
47[[ -z ${ECVS_CVS_OPTIONS} ]] && ECVS_CVS_OPTIONS="-q -f"
47 48
48# ECVS_UP_OPTS, ECVS_CO_OPTS -- CVS options given after the cvs 49# @ECLASS-VARIABLE: ECVS_CVS_COMMAND
49# command (update or checkout). 50# @DESCRIPTION:
50# 51# The cvs command.
51# Don't remove -dP from update or things won't work. 52[[ -z ${ECVS_CVS_COMMAND} ]] && ECVS_CVS_COMMAND="cvs ${ECVS_CVS_OPTIONS} ${ECVS_CVS_COMPRESS}"
52 53
54# @ECLASS-VARIABLE: ECVS_UP_OPTS
55# @DESCRIPTION:
56# CVS options given after the cvs update command. Don't remove "-dP" or things
57# won't work.
53[ -z "$ECVS_UP_OPTS" ] && ECVS_UP_OPTS="-dP" 58[ -z "$ECVS_UP_OPTS" ] && ECVS_UP_OPTS="-dP"
59
60# @ECLASS-VARIABLE: ECVS_CO_OPTS
61# @DESCRIPTION:
62# CVS options given after the cvs checkout command.
54[ -z "$ECVS_CO_OPTS" ] && ECVS_CO_OPTS="" 63[ -z "$ECVS_CO_OPTS" ] && ECVS_CO_OPTS=""
55 64
56 65
66# @ECLASS-VARIABLE: ECVS_LOCAL
67# @DESCRIPTION:
57# ECVS_LOCAL -- If this is set, the CVS module will be fetched 68# If this is set, the CVS module will be fetched non-recursively.
58# non-recursively. Refer to the information in the CVS man page 69# Refer to the information in the CVS man page regarding the -l
59# regarding the -l command option (not the -l global option). 70# command option (not the -l global option).
60 71
61 72# @ECLASS-VARIABLE: ECVS_LOCALNAME
73# @DESCRIPTION:
62# ECVS_LOCALNAME -- local name of checkout directory 74# Local name of checkout directory
63# 75#
64# This is useful if the module on the server is called something 76# This is useful if the module on the server is called something
65# common like 'driver' or is nested deep in a tree, and you don't like 77# common like 'driver' or is nested deep in a tree, and you don't like
66# useless empty directories. 78# useless empty directories.
67# 79#
68# WARNING: Set this only from within ebuilds! If set in your shell or 80# WARNING: Set this only from within ebuilds! If set in your shell or
69# some such, things will break because the ebuild won't expect it and 81# some such, things will break because the ebuild won't expect it and
70# have e.g. a wrong $S setting. 82# have e.g. a wrong $S setting.
71 83
72 84# @ECLASS-VARIABLE: ECVS_TOP_DIR
85# @DESCRIPTION:
73# ECVS_TOP_DIR -- The directory under which CVS modules are checked 86# The directory under which CVS modules are checked out.
74# out.
75
76[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${DISTDIR}/cvs-src" 87[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/cvs-src"
77 88
78# ECVS_NAME -- CVS path 89# @ECLASS-VARIABLE: ECVS_SERVER
90# @DESCRIPTION:
91# CVS path
79# 92#
80# The format is "server:/dir", e.g. "anoncvs.kde.org:/home/kde". 93# The format is "server:/dir", e.g. "anoncvs.kde.org:/home/kde".
81# Remove the other parts of the full CVSROOT, which might look like 94# Remove the other parts of the full CVSROOT, which might look like
82# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated 95# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated
83# using other settings also. 96# using other settings also.
84# 97#
85# Set this to "offline" to disable fetching (i.e. to assume the module 98# Set this to "offline" to disable fetching (i.e. to assume the module
86# is already checked out in ECVS_TOP_DIR). 99# is already checked out in ECVS_TOP_DIR).
87
88[ -z "$ECVS_SERVER" ] && ECVS_SERVER="offline" 100[ -z "$ECVS_SERVER" ] && ECVS_SERVER="offline"
89 101
90 102# @ECLASS-VARIABLE: ECVS_MODULE
103# @DESCRIPTION:
91# ECVS_MODULE -- the name of the CVS module to be fetched 104# The name of the CVS module to be fetched
92# 105#
93# This must be set when cvs_src_unpack is called. This can include 106# This must be set when cvs_src_unpack is called. This can include
94# several directory levels, i.e. "foo/bar/baz" 107# several directory levels, i.e. "foo/bar/baz"
95 108
96#[ -z "$ECVS_MODULE" ] && die "$ECLASS: error: ECVS_MODULE not set, cannot continue" 109#[ -z "$ECVS_MODULE" ] && die "$ECLASS: error: ECVS_MODULE not set, cannot continue"
97 110
98 111# @ECLASS-VARIABLE: ECVS_BRANCH
112# @DESCRIPTION:
99# ECVS_BRANCH -- the name of the branch/tag to use 113# The name of the branch/tag to use
100 114#
101# The default is "HEAD". The following default _will_ reset your 115# The default is "HEAD". The following default _will_ reset your
102# branch checkout to head if used. 116# branch checkout to head if used.
103 117
104#[ -z "$ECVS_BRANCH" ] && ECVS_BRANCH="HEAD" 118#[ -z "$ECVS_BRANCH" ] && ECVS_BRANCH="HEAD"
105 119
106 120# @ECLASS-VARIABLE: ECVS_AUTH
121# @DESCRIPTION:
107# ECVS_AUTH -- authentication method to use 122# Authentication method to use
108# 123#
109# Possible values are "pserver" and "ext". If `ext' authentication is 124# Possible values are "pserver" and "ext". If `ext' authentication is
110# used, the remote shell to use can be specified in CVS_RSH (SSH is 125# used, the remote shell to use can be specified in CVS_RSH (SSH is
111# used by default). Currently, the only supported remote shell for 126# used by default). Currently, the only supported remote shell for
112# `ext' authentication is SSH. 127# `ext' authentication is SSH.
117# e.g. 132# e.g.
118# "cvs -danoncvs@savannah.gnu.org:/cvsroot/backbone co System" 133# "cvs -danoncvs@savannah.gnu.org:/cvsroot/backbone co System"
119# ( from gnustep-apps/textedit ) 134# ( from gnustep-apps/textedit )
120[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver" 135[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver"
121 136
137# @ECLASS-VARIABLE: ECVS_USER
138# @DESCRIPTION:
122# ECVS_USER -- Username to use for authentication on the remote server 139# Username to use for authentication on the remote server.
123[ -z "$ECVS_USER" ] && ECVS_USER="anonymous" 140[ -z "$ECVS_USER" ] && ECVS_USER="anonymous"
124 141
125 142# @ECLASS-VARIABLE: ECVS_PASS
143# @DESCRIPTION:
126# ECVS_PASS -- Password to use for authentication on the remote server 144# Password to use for authentication on the remote server
127[ -z "$ECVS_PASS" ] && ECVS_PASS="" 145[ -z "$ECVS_PASS" ] && ECVS_PASS=""
128 146
129 147# @ECLASS-VARIABLE: ECVS_SSH_HOST_KEY
130# ECVS_SSH_HOST_KEY 148# @DESCRIPTION:
131#
132# If SSH is used for `ext' authentication, use this variable to 149# If SSH is used for `ext' authentication, use this variable to
133# specify the host key of the remote server. The format of the value 150# specify the host key of the remote server. The format of the value
134# should be the same format that is used for the SSH known hosts file. 151# should be the same format that is used for the SSH known hosts file.
135# 152#
136# WARNING: If a SSH host key is not specified using this variable, the 153# WARNING: If a SSH host key is not specified using this variable, the
137# remote host key will not be verified. 154# remote host key will not be verified.
138 155
139 156# @ECLASS-VARIABLE: ECVS_CLEAN
157# @DESCRIPTION:
140# ECVS_CLEAN -- Set this to get a clean copy when updating (passes the 158# Set this to get a clean copy when updating (passes the
141# -C option to cvs update) 159# -C option to cvs update)
142 160
143 161# @ECLASS-VARIABLE: ECVS_RUNAS
144# ECVS_RUNAS 162# @DESCRIPTION:
145#
146# Specifies an alternate (non-root) user to use to run cvs. Currently 163# Specifies an alternate (non-root) user to use to run cvs. Currently
147# b0rked and wouldn't work with portage userpriv anyway without 164# b0rked and wouldn't work with portage userpriv anyway without
148# special magic. 165# special magic.
149 166
150# [ -z "$ECVS_RUNAS" ] && ECVS_RUNAS="`whoami`" 167# [ -z "$ECVS_RUNAS" ] && ECVS_RUNAS="`whoami`"
151 168
152
153# ECVS_SUBDIR -- deprecated, do not use 169# ECVS_SUBDIR -- deprecated, do not use
154[ -n "$ECVS_SUBDIR" ] && die "ERROR: deprecated ECVS_SUBDIR defined. Please fix this ebuild." 170[ -n "$ECVS_SUBDIR" ] && die "ERROR: deprecated ECVS_SUBDIR defined. Please fix this ebuild."
155
156
157# --- end ebuild-configurable settings ---
158 171
159# add cvs to deps 172# add cvs to deps
160# ssh is used for ext auth 173# ssh is used for ext auth
161# sudo is used to run as a specified user 174# sudo is used to run as a specified user
162DEPEND="$DEPEND dev-util/cvs app-admin/sudo" 175DEPEND="dev-util/cvs"
176
177[ -n "$ECVS_RUNAS" ] && DEPEND="$DEPEND app-admin/sudo"
163 178
164if [ "$ECVS_AUTH" == "ext" ]; then 179if [ "$ECVS_AUTH" == "ext" ]; then
165 #default to ssh 180 #default to ssh
166 [ -z "$CVS_RSH" ] && export SSH_RSH="ssh" 181 [ -z "$CVS_RSH" ] && export CVS_RSH="ssh"
167 if [ "$CVS_RSH" != "ssh" ]; then 182 if [ "$CVS_RSH" != "ssh" ]; then
168 die "Support for ext auth with clients other than ssh has not been implemented yet" 183 die "Support for ext auth with clients other than ssh has not been implemented yet"
169 fi 184 fi
170 DEPEND="$DEPEND net-misc/openssh" 185 DEPEND="${DEPEND} net-misc/openssh"
171fi 186fi
172 187
173# called from cvs_src_unpack 188# called from cvs_src_unpack
174cvs_fetch() { 189cvs_fetch() {
175 190
178 193
179 local ECVS_COMMAND="${ECVS_COMMAND}" 194 local ECVS_COMMAND="${ECVS_COMMAND}"
180 local ECVS_UP_OPTS="${ECVS_UP_OPTS}" 195 local ECVS_UP_OPTS="${ECVS_UP_OPTS}"
181 local ECVS_CO_OPTS="${ECVS_CO_OPTS}" 196 local ECVS_CO_OPTS="${ECVS_CO_OPTS}"
182 197
183 # Fix for sourceforge which doesnt want -z>3 anymore.
184
185 (echo $ECVS_SERVER | grep -q sourceforge) \
186 && [ "$ECVS_CVS_COMMAND" == "cvs -q -f -z4" ] \
187 && ECVS_CVS_COMMAND="cvs -q -f -z3"
188
189 debug-print-function $FUNCNAME $* 198 debug-print-function $FUNCNAME $*
190 199
191 # Update variables that are modified by ebuild parameters, which 200 # Update variables that are modified by ebuild parameters, which
192 # should be effective every time cvs_fetch is called, and not just 201 # should be effective every time cvs_fetch is called, and not just
193 # every time cvs.eclass is inherited 202 # every time cvs.eclass is inherited
194 203
195
196 # Handle parameter for local (non-recursive) fetching 204 # Handle parameter for local (non-recursive) fetching
197 205
198 if [ -n "$ECVS_LOCAL" ]; then 206 if [ -n "$ECVS_LOCAL" ]; then
199 ECVS_UP_OPTS="$ECVS_UP_OPTS -l" 207 ECVS_UP_OPTS="$ECVS_UP_OPTS -l"
200 ECVS_CO_OPTS="$ECVS_CO_OPTS -l" 208 ECVS_CO_OPTS="$ECVS_CO_OPTS -l"
201 fi 209 fi
202 210
203 # Handle ECVS_BRANCH option 211 # Handle ECVS_BRANCH option
204 # 212 #
205 # Because CVS auto-switches branches, we just have to pass the 213 # Because CVS auto-switches branches, we just have to pass the
206 # correct -rBRANCH option when updating. 214 # correct -rBRANCH option when updating.
207 215
208 if [ -n "$ECVS_BRANCH" ]; then 216 if [ -n "$ECVS_BRANCH" ]; then
209 ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH" 217 ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH"
279 # be put in Root 287 # be put in Root
280 if [ "$ECVS_AUTH" == "no" ] 288 if [ "$ECVS_AUTH" == "no" ]
281 then 289 then
282 local server="${ECVS_USER}@${ECVS_SERVER}" 290 local server="${ECVS_USER}@${ECVS_SERVER}"
283 else 291 else
292 local connection="${ECVS_AUTH}"
293 [[ -n ${ECVS_PROXY} ]] && connection="${connection};proxy=${ECVS_PROXY}"
294 [[ -n ${ECVS_PROXY_PORT} ]] && connection="${connection};proxyport=${ECVS_PROXY_PORT}"
284 local server=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}" 295 local server=":${connection}:${ECVS_USER}@${ECVS_SERVER}"
285 fi 296 fi
286 297
287 # Switch servers automagically if needed 298 # Switch servers automagically if needed
288 if [ "$mode" == "update" ]; then 299 if [ "$mode" == "update" ]; then
289 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME 300 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME
291 if [ "$server" != "$oldserver" ]; then 302 if [ "$server" != "$oldserver" ]; then
292 303
293 einfo "Changing the CVS server from $oldserver to $server:" 304 einfo "Changing the CVS server from $oldserver to $server:"
294 debug-print "$FUNCNAME: Changing the CVS server from $oldserver to $server:" 305 debug-print "$FUNCNAME: Changing the CVS server from $oldserver to $server:"
295 306
296 einfo "Searching for CVS directories..." 307 einfo "Searching for CVS directories ..."
297 local cvsdirs="`$run find . -iname CVS -print`" 308 local cvsdirs="`$run find . -iname CVS -print`"
298 debug-print "$FUNCNAME: CVS directories found:" 309 debug-print "$FUNCNAME: CVS directories found:"
299 debug-print "$cvsdirs" 310 debug-print "$cvsdirs"
300 311
301 einfo "Modifying CVS directories..." 312 einfo "Modifying CVS directories ..."
302 for x in $cvsdirs; do 313 for x in $cvsdirs; do
303 debug-print "In $x" 314 debug-print "In $x"
304 $run echo "$server" > "$x/Root" 315 $run echo "$server" > "$x/Root"
305 done 316 done
306 317
340 eval $cmdlogin || die "cvs login command failed" 351 eval $cmdlogin || die "cvs login command failed"
341 if [ "${mode}" == "update" ]; then 352 if [ "${mode}" == "update" ]; then
342 einfo "Running $cmdupdate" 353 einfo "Running $cmdupdate"
343 eval $cmdupdate || die "cvs update command failed" 354 eval $cmdupdate || die "cvs update command failed"
344 elif [ "${mode}" == "checkout" ]; then 355 elif [ "${mode}" == "checkout" ]; then
345 einfo "Running $cmdcheckout" 356 einfo "Running $cmdcheckout"
346 eval $cmdcheckout|| die "cvs checkout command failed" 357 eval $cmdcheckout|| die "cvs checkout command failed"
347 fi 358 fi
348 elif [ "${ECVS_AUTH}" == "ext" ]; then 359 elif [ "${ECVS_AUTH}" == "ext" ] || [ "${ECVS_AUTH}" == "no" ]; then
349 360
350 # Hack to support SSH password authentication 361 # Hack to support SSH password authentication
351 362
352 # Backup environment variable values 363 # Backup environment variable values
353 local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}" 364 local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}"
385except: 396except:
386 pass 397 pass
387newarglist = sys.argv[:] 398newarglist = sys.argv[:]
388EOF 399EOF
389 400
401 # disable X11 forwarding which causes .xauth access violations
402 # - 20041205 Armando Di Cianno <fafhrd@gentoo.org>
403 echo "newarglist.insert(1, '-oClearAllForwardings=yes')" \
404 >> "${CVS_RSH}"
405 echo "newarglist.insert(1, '-oForwardX11=no')" \
406 >> "${CVS_RSH}"
407
390 # Handle SSH host key checking 408 # Handle SSH host key checking
391 409
392 local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts" 410 local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts"
393 echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \ 411 echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \
394 >> "${CVS_RSH}" 412 >> "${CVS_RSH}"
396 if [ -z "${ECVS_SSH_HOST_KEY}" ]; then 414 if [ -z "${ECVS_SSH_HOST_KEY}" ]; then
397 ewarn "Warning: The SSH host key of the remote server will not be verified." 415 ewarn "Warning: The SSH host key of the remote server will not be verified."
398 einfo "A temporary known hosts list will be used." 416 einfo "A temporary known hosts list will be used."
399 local CVS_ECLASS_STRICT_HOST_CHECKING="no" 417 local CVS_ECLASS_STRICT_HOST_CHECKING="no"
400 touch "${CVS_ECLASS_KNOWN_HOSTS}" 418 touch "${CVS_ECLASS_KNOWN_HOSTS}"
401 echo "newarglist.insert(1, '-oStrictHostKeyChecking=no')" \
402 >> "${CVS_RSH}"
403 else 419 else
404 local CVS_ECLASS_STRICT_HOST_CHECKING="yes" 420 local CVS_ECLASS_STRICT_HOST_CHECKING="yes"
405 echo "${ECVS_SSH_HOST_KEY}" > "${CVS_ECLASS_KNOWN_HOSTS}" 421 echo "${ECVS_SSH_HOST_KEY}" > "${CVS_ECLASS_KNOWN_HOSTS}"
406 fi 422 fi
407 423
410 echo "${CVS_ECLASS_STRICT_HOST_CHECKING}')" \ 426 echo "${CVS_ECLASS_STRICT_HOST_CHECKING}')" \
411 >> "${CVS_RSH}" 427 >> "${CVS_RSH}"
412 echo "os.execv('/usr/bin/ssh', newarglist)" \ 428 echo "os.execv('/usr/bin/ssh', newarglist)" \
413 >> "${CVS_RSH}" 429 >> "${CVS_RSH}"
414 430
415 chmod a+x "${CVS_RSH}" 431 chmod a+x "${CVS_RSH}"
416 432
417 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS 433 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS
418 # if DISPLAY is not set) 434 # if DISPLAY is not set)
419 435
420 [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY" 436 [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY"
421 export DISPLAY 437 export DISPLAY
422 438
423 # Create a dummy executable to echo $ECVS_PASS 439 # Create a dummy executable to echo $ECVS_PASS
424 440
425 export SSH_ASKPASS="${T}/cvs_sshechopass" 441 export SSH_ASKPASS="${T}/cvs_sshechopass"
426 442 if [ "${ECVS_AUTH}" != "no" ]; then
427 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \ 443 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \
428 > "${SSH_ASKPASS}" 444 > "${SSH_ASKPASS}"
445 else
446 echo -en "#!/bin/bash\nreturn\n" \
447 > "${SSH_ASKPASS}"
429 448
449 fi
430 chmod a+x "${SSH_ASKPASS}" 450 chmod a+x "${SSH_ASKPASS}"
431 fi 451 fi
432 452
433 if [ "${mode}" == "update" ]; then 453 if [ "${mode}" == "update" ]; then
434 einfo "Running $cmdupdate" 454 einfo "Running $cmdupdate"
435 eval $cmdupdate || die "cvs update command failed" 455 eval $cmdupdate || die "cvs update command failed"
436 elif [ "${mode}" == "checkout" ]; then 456 elif [ "${mode}" == "checkout" ]; then
437 einfo "Running $cmdcheckout" 457 einfo "Running $cmdcheckout"
438 eval $cmdcheckout|| die "cvs checkout command failed" 458 eval $cmdcheckout|| die "cvs checkout command failed"
439 fi 459 fi
440 460
441 # Restore environment variable values 461 # Restore environment variable values
442 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}" 462 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}"
443 if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then 463 if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then
444 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}" 464 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}"
445 else 465 else
449 if [ "${CVS_ECLASS_ORIG_DISPLAY+set}" == "set" ]; then 469 if [ "${CVS_ECLASS_ORIG_DISPLAY+set}" == "set" ]; then
450 export DISPLAY="${CVS_ECLASS_ORIG_DISPLAY}" 470 export DISPLAY="${CVS_ECLASS_ORIG_DISPLAY}"
451 else 471 else
452 unset DISPLAY 472 unset DISPLAY
453 fi 473 fi
454 elif [ "${ECVS_AUTH}" == "no" ]; then
455 if [ "${mode}" == "update" ]; then
456 einfo "Running $cmdupdate"
457 eval $cmdupdate || die "cvs update command failed"
458 elif [ "${mode}" == "checkout" ]; then
459 einfo "Running $cmdcheckout"
460 eval $cmdcheckout|| die "cvs checkout command failed"
461 fi
462 fi 474 fi
463 475
464 # Restore ownership. Not sure why this is needed, but someone 476 # Restore ownership. Not sure why this is needed, but someone
465 # added it in the orig ECVS_RUNAS stuff. 477 # added it in the orig ECVS_RUNAS stuff.
466 if [ -n "$ECVS_RUNAS" ]; then 478 if [ -n "$ECVS_RUNAS" ]; then
467 chown `whoami` "${T}/cvspass" 479 chown `whoami` "${T}/cvspass"
468 fi 480 fi
469 481
470} 482}
471 483
472 484# @FUNCTION: cvs_src_unpack
485# @DESCRIPTION:
486# The cvs src_unpack function, which will be exported
473cvs_src_unpack() { 487cvs_src_unpack() {
474 488
475 debug-print-function $FUNCNAME $* 489 debug-print-function $FUNCNAME $*
476 490
477 debug-print "$FUNCNAME: init: 491 debug-print "$FUNCNAME: init:
490 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue." 504 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue."
491 505
492 local ECVS_LOCALNAME="${ECVS_LOCALNAME}" 506 local ECVS_LOCALNAME="${ECVS_LOCALNAME}"
493 507
494 if [ -z "$ECVS_LOCALNAME" ]; then 508 if [ -z "$ECVS_LOCALNAME" ]; then
495 ECVS_LOCALNAME="$ECVS_MODULE" 509 ECVS_LOCALNAME="$ECVS_MODULE"
496 fi 510 fi
497 511
498 if [ "$ECVS_SERVER" == "offline" ]; then 512 local sanitized_pn=$(echo "${PN}" | LC_ALL=C sed -e 's:[^A-Za-z0-9_]:_:g')
513 local offline_pkg_var="ECVS_OFFLINE_${sanitized_pn}"
514 if [ "${!offline_pkg_var}" == "1" -o "$ECVS_OFFLINE" == "1" -o "$ECVS_SERVER" == "offline" ]; then
499 # We're not required to fetch anything; the module already 515 # We're not required to fetch anything; the module already
500 # exists and shouldn't be updated. 516 # exists and shouldn't be updated.
501 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then 517 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then
502 debug-print "$FUNCNAME: offline mode" 518 debug-print "$FUNCNAME: offline mode"
503 else 519 else
504 debug-print "$FUNCNAME: Offline mode specified but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found, exiting with error" 520 debug-print "$FUNCNAME: Offline mode specified but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found, exiting with error"
505 die "ERROR: Offline mode specified, but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found. Aborting." 521 die "ERROR: Offline mode specified, but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found. Aborting."
506 fi 522 fi
507 elif [ -n "$ECVS_SERVER" ]; then # ECVS_SERVER!=offline --> real fetching mode 523 elif [ -n "$ECVS_SERVER" ]; then # ECVS_SERVER!=offline --> real fetching mode
508 einfo "Fetching CVS module $ECVS_MODULE into $ECVS_TOP_DIR..." 524 einfo "Fetching CVS module $ECVS_MODULE into $ECVS_TOP_DIR ..."
509 cvs_fetch 525 cvs_fetch
510 else # ECVS_SERVER not set 526 else # ECVS_SERVER not set
511 die "ERROR: CVS server not specified, cannot continue." 527 die "ERROR: CVS server not specified, cannot continue."
512 fi 528 fi
513 529
514 einfo "Copying $ECVS_MODULE from $ECVS_TOP_DIR..." 530 einfo "Copying $ECVS_MODULE from $ECVS_TOP_DIR ..."
515 debug-print "Copying module $ECVS_MODULE local_mode=$ECVS_LOCAL from $ECVS_TOP_DIR..." 531 debug-print "Copying module $ECVS_MODULE local_mode=$ECVS_LOCAL from $ECVS_TOP_DIR ..."
516 532
517 # This is probably redundant, but best to make sure. 533 # This is probably redundant, but best to make sure.
518 mkdir -p "$WORKDIR/$ECVS_LOCALNAME" 534 mkdir -p "$WORKDIR/$ECVS_LOCALNAME"
519 535
520 if [ -n "$ECVS_LOCAL" ]; then 536 if [ -n "$ECVS_LOCAL" ]; then
535 # Implement some of base_src_unpack's functionality; note however 551 # Implement some of base_src_unpack's functionality; note however
536 # that base.eclass may not have been inherited! 552 # that base.eclass may not have been inherited!
537 if [ -n "$PATCHES" ]; then 553 if [ -n "$PATCHES" ]; then
538 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching" 554 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching"
539 cd "$S" 555 cd "$S"
540 for x in $PATCHES; do 556 epatch ${PATCHES}
541 debug-print "patching from $x"
542 patch -p0 < "$x"
543 done
544 # Make sure we don't try to apply patches more than once, 557 # Make sure we don't try to apply patches more than once,
545 # since cvs_src_unpack is usually called several times from 558 # since cvs_src_unpack is usually called several times from
546 # e.g. kde-source_src_unpack 559 # e.g. kde-source_src_unpack
547 export PATCHES="" 560 export PATCHES=""
548 fi 561 fi
549 562
550 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}" 563 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}"
551} 564}
552 565
553EXPORT_FUNCTIONS src_unpack 566EXPORT_FUNCTIONS src_unpack

Legend:
Removed from v.1.52  
changed lines
  Added in v.1.70

  ViewVC Help
Powered by ViewVC 1.1.20