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

Diff of /eclass/cvs.eclass

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

Revision 1.50 Revision 1.72
1# Copyright 1999-2003 Gentoo Technologies, Inc. 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.50 2004/01/04 14:35:12 coredumb Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/cvs.eclass,v 1.72 2010/08/21 18:21:06 vapier 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
65# @ECLASS-VARIABLE: ECVS_OFFLINE
66# @DESCRIPTION:
67# Set this variable to a non-empty value to disable the automatic updating of
68# a CVS source tree. This is intended to be set outside the cvs source
69# tree by users.
70: ${ECVS_OFFLINE:=${ESCM_OFFLINE}}
56 71
72# @ECLASS-VARIABLE: ECVS_LOCAL
73# @DESCRIPTION:
57# ECVS_LOCAL -- If this is set, the CVS module will be fetched 74# If this is set, the CVS module will be fetched non-recursively.
58# non-recursively. Refer to the information in the CVS man page 75# Refer to the information in the CVS man page regarding the -l
59# regarding the -l command option (not the -l global option). 76# command option (not the -l global option).
60 77
61 78# @ECLASS-VARIABLE: ECVS_LOCALNAME
79# @DESCRIPTION:
62# ECVS_LOCALNAME -- local name of checkout directory 80# Local name of checkout directory
63# 81#
64# This is useful if the module on the server is called something 82# 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 83# common like 'driver' or is nested deep in a tree, and you don't like
66# useless empty directories. 84# useless empty directories.
67# 85#
68# WARNING: Set this only from within ebuilds! If set in your shell or 86# 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 87# some such, things will break because the ebuild won't expect it and
70# have e.g. a wrong $S setting. 88# have e.g. a wrong $S setting.
71 89
72 90# @ECLASS-VARIABLE: ECVS_TOP_DIR
91# @DESCRIPTION:
73# ECVS_TOP_DIR -- The directory under which CVS modules are checked 92# The directory under which CVS modules are checked out.
74# out.
75
76[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${DISTDIR}/cvs-src" 93[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/cvs-src"
77 94
78# ECVS_NAME -- CVS path 95# @ECLASS-VARIABLE: ECVS_SERVER
96# @DESCRIPTION:
97# CVS path
79# 98#
80# The format is "server:/dir", e.g. "anoncvs.kde.org:/home/kde". 99# 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 100# Remove the other parts of the full CVSROOT, which might look like
82# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated 101# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated
83# using other settings also. 102# using other settings also.
84# 103#
85# Set this to "offline" to disable fetching (i.e. to assume the module 104# Set this to "offline" to disable fetching (i.e. to assume the module
86# is already checked out in ECVS_TOP_DIR). 105# is already checked out in ECVS_TOP_DIR).
87
88[ -z "$ECVS_SERVER" ] && ECVS_SERVER="offline" 106[ -z "$ECVS_SERVER" ] && ECVS_SERVER="offline"
89 107
90 108# @ECLASS-VARIABLE: ECVS_MODULE
109# @DESCRIPTION:
91# ECVS_MODULE -- the name of the CVS module to be fetched 110# The name of the CVS module to be fetched
92# 111#
93# This must be set when cvs_src_unpack is called. This can include 112# This must be set when cvs_src_unpack is called. This can include
94# several directory levels, i.e. "foo/bar/baz" 113# several directory levels, i.e. "foo/bar/baz"
95 114
96#[ -z "$ECVS_MODULE" ] && die "$ECLASS: error: ECVS_MODULE not set, cannot continue" 115#[ -z "$ECVS_MODULE" ] && die "$ECLASS: error: ECVS_MODULE not set, cannot continue"
97 116
98 117# @ECLASS-VARIABLE: ECVS_BRANCH
118# @DESCRIPTION:
99# ECVS_BRANCH -- the name of the branch/tag to use 119# The name of the branch/tag to use
100 120#
101# The default is "HEAD". The following default _will_ reset your 121# The default is "HEAD". The following default _will_ reset your
102# branch checkout to head if used. 122# branch checkout to head if used.
103 123
104#[ -z "$ECVS_BRANCH" ] && ECVS_BRANCH="HEAD" 124#[ -z "$ECVS_BRANCH" ] && ECVS_BRANCH="HEAD"
105 125
106 126# @ECLASS-VARIABLE: ECVS_AUTH
127# @DESCRIPTION:
107# ECVS_AUTH -- authentication method to use 128# Authentication method to use
108# 129#
109# Possible values are "pserver" and "ext". If `ext' authentication is 130# 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 131# 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 132# used by default). Currently, the only supported remote shell for
112# `ext' authentication is SSH. 133# `ext' authentication is SSH.
134#
135# Armando Di Cianno <fafhrd@gentoo.org> 2004/09/27
136# - Added "no" as a server type, which uses no AUTH method, nor
137# does it login
138# e.g.
139# "cvs -danoncvs@savannah.gnu.org:/cvsroot/backbone co System"
140# ( from gnustep-apps/textedit )
113[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver" 141[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver"
114 142
143# @ECLASS-VARIABLE: ECVS_USER
144# @DESCRIPTION:
115# ECVS_USER -- Username to use for authentication on the remote server 145# Username to use for authentication on the remote server.
116[ -z "$ECVS_USER" ] && ECVS_USER="anonymous" 146[ -z "$ECVS_USER" ] && ECVS_USER="anonymous"
117 147
118 148# @ECLASS-VARIABLE: ECVS_PASS
149# @DESCRIPTION:
119# ECVS_PASS -- Password to use for authentication on the remote server 150# Password to use for authentication on the remote server
120[ -z "$ECVS_PASS" ] && ECVS_PASS="" 151[ -z "$ECVS_PASS" ] && ECVS_PASS=""
121 152
122 153# @ECLASS-VARIABLE: ECVS_SSH_HOST_KEY
123# ECVS_SSH_HOST_KEY 154# @DESCRIPTION:
124#
125# If SSH is used for `ext' authentication, use this variable to 155# If SSH is used for `ext' authentication, use this variable to
126# specify the host key of the remote server. The format of the value 156# specify the host key of the remote server. The format of the value
127# should be the same format that is used for the SSH known hosts file. 157# should be the same format that is used for the SSH known hosts file.
128# 158#
129# WARNING: If a SSH host key is not specified using this variable, the 159# WARNING: If a SSH host key is not specified using this variable, the
130# remote host key will not be verified. 160# remote host key will not be verified.
131 161
132 162# @ECLASS-VARIABLE: ECVS_CLEAN
163# @DESCRIPTION:
133# ECVS_CLEAN -- Set this to get a clean copy when updating (passes the 164# Set this to get a clean copy when updating (passes the
134# -C option to cvs update) 165# -C option to cvs update)
135 166
136 167# @ECLASS-VARIABLE: ECVS_RUNAS
137# ECVS_RUNAS 168# @DESCRIPTION:
138#
139# Specifies an alternate (non-root) user to use to run cvs. Currently 169# Specifies an alternate (non-root) user to use to run cvs. Currently
140# b0rked and wouldn't work with portage userpriv anyway without 170# b0rked and wouldn't work with portage userpriv anyway without
141# special magic. 171# special magic.
142 172
143# [ -z "$ECVS_RUNAS" ] && ECVS_RUNAS="`whoami`" 173# [ -z "$ECVS_RUNAS" ] && ECVS_RUNAS="`whoami`"
144 174
145
146# ECVS_SUBDIR -- deprecated, do not use 175# ECVS_SUBDIR -- deprecated, do not use
147[ -n "$ECVS_SUBDIR" ] && die "ERROR: deprecated ECVS_SUBDIR defined. Please fix this ebuild." 176[ -n "$ECVS_SUBDIR" ] && die "ERROR: deprecated ECVS_SUBDIR defined. Please fix this ebuild."
148
149
150# --- end ebuild-configurable settings ---
151 177
152# add cvs to deps 178# add cvs to deps
153# ssh is used for ext auth 179# ssh is used for ext auth
154# sudo is used to run as a specified user 180# sudo is used to run as a specified user
155DEPEND="$DEPEND dev-util/cvs app-admin/sudo" 181DEPEND="dev-vcs/cvs"
182
183[ -n "$ECVS_RUNAS" ] && DEPEND="$DEPEND app-admin/sudo"
156 184
157if [ "$ECVS_AUTH" == "ext" ]; then 185if [ "$ECVS_AUTH" == "ext" ]; then
158 #default to ssh 186 #default to ssh
159 [ -z "$CVS_RSH" ] && export SSH_RSH="ssh" 187 [ -z "$CVS_RSH" ] && export CVS_RSH="ssh"
160 if [ "$CVS_RSH" != "ssh" ]; then 188 if [ "$CVS_RSH" != "ssh" ]; then
161 die "Support for ext auth with clients other than ssh has not been implemented yet" 189 die "Support for ext auth with clients other than ssh has not been implemented yet"
162 fi 190 fi
163 DEPEND="$DEPEND net-misc/openssh" 191 DEPEND="${DEPEND} net-misc/openssh"
164fi 192fi
165 193
166# called from cvs_src_unpack 194# called from cvs_src_unpack
167cvs_fetch() { 195cvs_fetch() {
168 196
171 199
172 local ECVS_COMMAND="${ECVS_COMMAND}" 200 local ECVS_COMMAND="${ECVS_COMMAND}"
173 local ECVS_UP_OPTS="${ECVS_UP_OPTS}" 201 local ECVS_UP_OPTS="${ECVS_UP_OPTS}"
174 local ECVS_CO_OPTS="${ECVS_CO_OPTS}" 202 local ECVS_CO_OPTS="${ECVS_CO_OPTS}"
175 203
176 # Fix for sourceforge which doesnt want -z>3 anymore.
177
178 (echo $ECVS_SERVER | grep -q sourceforge) \
179 && [ "$ECVS_CVS_COMMAND" == "cvs -q -f -z4" ] \
180 && ECVS_CVS_COMMAND="cvs -q -f -z3"
181
182 debug-print-function $FUNCNAME $* 204 debug-print-function $FUNCNAME $*
183 205
184 # Update variables that are modified by ebuild parameters, which 206 # Update variables that are modified by ebuild parameters, which
185 # should be effective every time cvs_fetch is called, and not just 207 # should be effective every time cvs_fetch is called, and not just
186 # every time cvs.eclass is inherited 208 # every time cvs.eclass is inherited
187 209
188
189 # Handle parameter for local (non-recursive) fetching 210 # Handle parameter for local (non-recursive) fetching
190 211
191 if [ -n "$ECVS_LOCAL" ]; then 212 if [ -n "$ECVS_LOCAL" ]; then
192 ECVS_UP_OPTS="$ECVS_UP_OPTS -l" 213 ECVS_UP_OPTS="$ECVS_UP_OPTS -l"
193 ECVS_CO_OPTS="$ECVS_CO_OPTS -l" 214 ECVS_CO_OPTS="$ECVS_CO_OPTS -l"
194 fi 215 fi
195 216
196 # Handle ECVS_BRANCH option 217 # Handle ECVS_BRANCH option
197 # 218 #
198 # Because CVS auto-switches branches, we just have to pass the 219 # Because CVS auto-switches branches, we just have to pass the
199 # correct -rBRANCH option when updating. 220 # correct -rBRANCH option when updating.
200 221
201 if [ -n "$ECVS_BRANCH" ]; then 222 if [ -n "$ECVS_BRANCH" ]; then
202 ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH" 223 ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH"
268 fi 289 fi
269 290
270 291
271 # Our server string (i.e. CVSROOT) without the password so it can 292 # Our server string (i.e. CVSROOT) without the password so it can
272 # be put in Root 293 # be put in Root
294 if [ "$ECVS_AUTH" == "no" ]
295 then
273 local server=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}" 296 local server="${ECVS_USER}@${ECVS_SERVER}"
297 else
298 local connection="${ECVS_AUTH}"
299 [[ -n ${ECVS_PROXY} ]] && connection="${connection};proxy=${ECVS_PROXY}"
300 [[ -n ${ECVS_PROXY_PORT} ]] && connection="${connection};proxyport=${ECVS_PROXY_PORT}"
301 local server=":${connection}:${ECVS_USER}@${ECVS_SERVER}"
302 fi
274 303
275 # Switch servers automagically if needed 304 # Switch servers automagically if needed
276 if [ "$mode" == "update" ]; then 305 if [ "$mode" == "update" ]; then
277 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME 306 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME
278 local oldserver="`$run cat CVS/Root`" 307 local oldserver="`$run cat CVS/Root`"
279 if [ "$server" != "$oldserver" ]; then 308 if [ "$server" != "$oldserver" ]; then
280 309
281 einfo "Changing the CVS server from $oldserver to $server:" 310 einfo "Changing the CVS server from $oldserver to $server:"
282 debug-print "$FUNCNAME: Changing the CVS server from $oldserver to $server:" 311 debug-print "$FUNCNAME: Changing the CVS server from $oldserver to $server:"
283 312
284 einfo "Searching for CVS directories..." 313 einfo "Searching for CVS directories ..."
285 local cvsdirs="`$run find . -iname CVS -print`" 314 local cvsdirs="`$run find . -iname CVS -print`"
286 debug-print "$FUNCNAME: CVS directories found:" 315 debug-print "$FUNCNAME: CVS directories found:"
287 debug-print "$cvsdirs" 316 debug-print "$cvsdirs"
288 317
289 einfo "Modifying CVS directories..." 318 einfo "Modifying CVS directories ..."
290 for x in $cvsdirs; do 319 for x in $cvsdirs; do
291 debug-print "In $x" 320 debug-print "In $x"
292 $run echo "$server" > "$x/Root" 321 $run echo "$server" > "$x/Root"
293 done 322 done
294 323
306 # The server string with the password in it, for login 335 # The server string with the password in it, for login
307 cvsroot_pass=":${ECVS_AUTH}:${ECVS_USER}:${ECVS_PASS}@${ECVS_SERVER}" 336 cvsroot_pass=":${ECVS_AUTH}:${ECVS_USER}:${ECVS_PASS}@${ECVS_SERVER}"
308 337
309 # Ditto without the password, for checkout/update after login, so 338 # Ditto without the password, for checkout/update after login, so
310 # that the CVS/Root files don't contain the password in plaintext 339 # that the CVS/Root files don't contain the password in plaintext
340 if [ "$ECVS_AUTH" == "no" ]
341 then
342 cvsroot_nopass="${ECVS_USER}@${ECVS_SERVER}"
343 else
311 cvsroot_nopass=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}" 344 cvsroot_nopass=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}"
345 fi
312 346
313 # Commands to run 347 # Commands to run
314 cmdlogin="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_pass}\" login" 348 cmdlogin="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_pass}\" login"
315 cmdupdate="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_nopass}\" update ${ECVS_UP_OPTS} ${ECVS_LOCALNAME}" 349 cmdupdate="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_nopass}\" update ${ECVS_UP_OPTS} ${ECVS_LOCALNAME}"
316 cmdcheckout="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_nopass}\" checkout ${ECVS_CO_OPTS} ${ECVS_MODULE}" 350 cmdcheckout="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_nopass}\" checkout ${ECVS_CO_OPTS} ${ECVS_MODULE}"
323 eval $cmdlogin || die "cvs login command failed" 357 eval $cmdlogin || die "cvs login command failed"
324 if [ "${mode}" == "update" ]; then 358 if [ "${mode}" == "update" ]; then
325 einfo "Running $cmdupdate" 359 einfo "Running $cmdupdate"
326 eval $cmdupdate || die "cvs update command failed" 360 eval $cmdupdate || die "cvs update command failed"
327 elif [ "${mode}" == "checkout" ]; then 361 elif [ "${mode}" == "checkout" ]; then
328 einfo "Running $cmdcheckout" 362 einfo "Running $cmdcheckout"
329 eval $cmdcheckout|| die "cvs checkout command failed" 363 eval $cmdcheckout|| die "cvs checkout command failed"
330 fi 364 fi
331 elif [ "${ECVS_AUTH}" == "ext" ]; then 365 elif [ "${ECVS_AUTH}" == "ext" ] || [ "${ECVS_AUTH}" == "no" ]; then
332 366
333 # Hack to support SSH password authentication 367 # Hack to support SSH password authentication
334 368
335 # Backup environment variable values 369 # Backup environment variable values
336 local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}" 370 local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}"
368except: 402except:
369 pass 403 pass
370newarglist = sys.argv[:] 404newarglist = sys.argv[:]
371EOF 405EOF
372 406
407 # disable X11 forwarding which causes .xauth access violations
408 # - 20041205 Armando Di Cianno <fafhrd@gentoo.org>
409 echo "newarglist.insert(1, '-oClearAllForwardings=yes')" \
410 >> "${CVS_RSH}"
411 echo "newarglist.insert(1, '-oForwardX11=no')" \
412 >> "${CVS_RSH}"
413
373 # Handle SSH host key checking 414 # Handle SSH host key checking
374 415
375 local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts" 416 local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts"
376 echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \ 417 echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \
377 >> "${CVS_RSH}" 418 >> "${CVS_RSH}"
379 if [ -z "${ECVS_SSH_HOST_KEY}" ]; then 420 if [ -z "${ECVS_SSH_HOST_KEY}" ]; then
380 ewarn "Warning: The SSH host key of the remote server will not be verified." 421 ewarn "Warning: The SSH host key of the remote server will not be verified."
381 einfo "A temporary known hosts list will be used." 422 einfo "A temporary known hosts list will be used."
382 local CVS_ECLASS_STRICT_HOST_CHECKING="no" 423 local CVS_ECLASS_STRICT_HOST_CHECKING="no"
383 touch "${CVS_ECLASS_KNOWN_HOSTS}" 424 touch "${CVS_ECLASS_KNOWN_HOSTS}"
384 echo "newarglist.insert(1, '-oStrictHostKeyChecking=no')" \
385 >> "${CVS_RSH}"
386 else 425 else
387 local CVS_ECLASS_STRICT_HOST_CHECKING="yes" 426 local CVS_ECLASS_STRICT_HOST_CHECKING="yes"
388 echo "${ECVS_SSH_HOST_KEY}" > "${CVS_ECLASS_KNOWN_HOSTS}" 427 echo "${ECVS_SSH_HOST_KEY}" > "${CVS_ECLASS_KNOWN_HOSTS}"
389 fi 428 fi
390 429
393 echo "${CVS_ECLASS_STRICT_HOST_CHECKING}')" \ 432 echo "${CVS_ECLASS_STRICT_HOST_CHECKING}')" \
394 >> "${CVS_RSH}" 433 >> "${CVS_RSH}"
395 echo "os.execv('/usr/bin/ssh', newarglist)" \ 434 echo "os.execv('/usr/bin/ssh', newarglist)" \
396 >> "${CVS_RSH}" 435 >> "${CVS_RSH}"
397 436
398 chmod a+x "${CVS_RSH}" 437 chmod a+x "${CVS_RSH}"
399 438
400 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS 439 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS
401 # if DISPLAY is not set) 440 # if DISPLAY is not set)
402 441
403 [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY" 442 [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY"
404 export DISPLAY 443 export DISPLAY
405 444
406 # Create a dummy executable to echo $ECVS_PASS 445 # Create a dummy executable to echo $ECVS_PASS
407 446
408 export SSH_ASKPASS="${T}/cvs_sshechopass" 447 export SSH_ASKPASS="${T}/cvs_sshechopass"
409 448 if [ "${ECVS_AUTH}" != "no" ]; then
410 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \ 449 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \
411 > "${SSH_ASKPASS}" 450 > "${SSH_ASKPASS}"
451 else
452 echo -en "#!/bin/bash\nreturn\n" \
453 > "${SSH_ASKPASS}"
412 454
455 fi
413 chmod a+x "${SSH_ASKPASS}" 456 chmod a+x "${SSH_ASKPASS}"
414 fi 457 fi
415 458
416 if [ "${mode}" == "update" ]; then 459 if [ "${mode}" == "update" ]; then
417 einfo "Running $cmdupdate" 460 einfo "Running $cmdupdate"
418 eval $cmdupdate || die "cvs update command failed" 461 eval $cmdupdate || die "cvs update command failed"
419 elif [ "${mode}" == "checkout" ]; then 462 elif [ "${mode}" == "checkout" ]; then
420 einfo "Running $cmdcheckout" 463 einfo "Running $cmdcheckout"
421 eval $cmdcheckout|| die "cvs checkout command failed" 464 eval $cmdcheckout|| die "cvs checkout command failed"
422 fi 465 fi
423 466
424 # Restore environment variable values 467 # Restore environment variable values
425 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}" 468 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}"
426 if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then 469 if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then
427 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}" 470 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}"
428 else 471 else
442 chown `whoami` "${T}/cvspass" 485 chown `whoami` "${T}/cvspass"
443 fi 486 fi
444 487
445} 488}
446 489
447 490# @FUNCTION: cvs_src_unpack
491# @DESCRIPTION:
492# The cvs src_unpack function, which will be exported
448cvs_src_unpack() { 493cvs_src_unpack() {
449 494
450 debug-print-function $FUNCNAME $* 495 debug-print-function $FUNCNAME $*
451 496
452 debug-print "$FUNCNAME: init: 497 debug-print "$FUNCNAME: init:
465 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue." 510 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue."
466 511
467 local ECVS_LOCALNAME="${ECVS_LOCALNAME}" 512 local ECVS_LOCALNAME="${ECVS_LOCALNAME}"
468 513
469 if [ -z "$ECVS_LOCALNAME" ]; then 514 if [ -z "$ECVS_LOCALNAME" ]; then
470 ECVS_LOCALNAME="$ECVS_MODULE" 515 ECVS_LOCALNAME="$ECVS_MODULE"
471 fi 516 fi
472 517
473 if [ "$ECVS_SERVER" == "offline" ]; then 518 local sanitized_pn=$(echo "${PN}" | LC_ALL=C sed -e 's:[^A-Za-z0-9_]:_:g')
519 local offline_pkg_var="ECVS_OFFLINE_${sanitized_pn}"
520 if [[ -n ${!offline_pkg_var}${ECVS_OFFLINE} ]] || [[ "$ECVS_SERVER" == "offline" ]] ; then
474 # We're not required to fetch anything; the module already 521 # We're not required to fetch anything; the module already
475 # exists and shouldn't be updated. 522 # exists and shouldn't be updated.
476 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then 523 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then
477 debug-print "$FUNCNAME: offline mode" 524 debug-print "$FUNCNAME: offline mode"
478 else 525 else
479 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"
480 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."
481 fi 528 fi
482 elif [ -n "$ECVS_SERVER" ]; then # ECVS_SERVER!=offline --> real fetching mode 529 elif [ -n "$ECVS_SERVER" ]; then # ECVS_SERVER!=offline --> real fetching mode
483 einfo "Fetching CVS module $ECVS_MODULE into $ECVS_TOP_DIR..." 530 einfo "Fetching CVS module $ECVS_MODULE into $ECVS_TOP_DIR ..."
484 cvs_fetch 531 cvs_fetch
485 else # ECVS_SERVER not set 532 else # ECVS_SERVER not set
486 die "ERROR: CVS server not specified, cannot continue." 533 die "ERROR: CVS server not specified, cannot continue."
487 fi 534 fi
488 535
489 einfo "Copying $ECVS_MODULE from $ECVS_TOP_DIR..." 536 einfo "Copying $ECVS_MODULE from $ECVS_TOP_DIR ..."
490 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 ..."
491 538
492 # This is probably redundant, but best to make sure. 539 # This is probably redundant, but best to make sure.
493 mkdir -p "$WORKDIR/$ECVS_LOCALNAME" 540 mkdir -p "$WORKDIR/$ECVS_LOCALNAME"
494 541
495 if [ -n "$ECVS_LOCAL" ]; then 542 if [ -n "$ECVS_LOCAL" ]; then
510 # Implement some of base_src_unpack's functionality; note however 557 # Implement some of base_src_unpack's functionality; note however
511 # that base.eclass may not have been inherited! 558 # that base.eclass may not have been inherited!
512 if [ -n "$PATCHES" ]; then 559 if [ -n "$PATCHES" ]; then
513 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching" 560 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching"
514 cd "$S" 561 cd "$S"
515 for x in $PATCHES; do 562 epatch ${PATCHES}
516 debug-print "patching from $x"
517 patch -p0 < "$x"
518 done
519 # Make sure we don't try to apply patches more than once, 563 # Make sure we don't try to apply patches more than once,
520 # since cvs_src_unpack is usually called several times from 564 # since cvs_src_unpack is usually called several times from
521 # e.g. kde-source_src_unpack 565 # e.g. kde-source_src_unpack
522 export PATCHES="" 566 export PATCHES=""
523 fi 567 fi
524 568
525 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}" 569 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}"
526} 570}
527 571
528EXPORT_FUNCTIONS src_unpack 572EXPORT_FUNCTIONS src_unpack

Legend:
Removed from v.1.50  
changed lines
  Added in v.1.72

  ViewVC Help
Powered by ViewVC 1.1.20