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

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

  ViewVC Help
Powered by ViewVC 1.1.20