/[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.57
1# Copyright 1999-2003 Gentoo Technologies, Inc. 1# Copyright 1999-2004 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.57 2005/07/06 20:23:20 agriffis Exp $
4 4
5# Current Maintainer: Tal Peer <coredumb@gentoo.org> 5# Current Maintainer: Tal Peer <coredumb@gentoo.org>
6# Original Author: Dan Armak <danarmak@gentoo.org> 6# Original Author: Dan Armak <danarmak@gentoo.org>
7 7
8# SSH auth code by Danny <danny.milo@gmx.net> 8# SSH auth code by Danny <danny.milo@gmx.net>
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 28
29ECLASS=cvs
30INHERITED="$INHERITED $ECLASS"
31 29
32# Users shouldn't change these settings! The ebuild/eclass inheriting 30# 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 31# 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. 32# KDE cvs ebuilds' settings, see the comments in kde-source.eclass.
35 33
73# ECVS_TOP_DIR -- The directory under which CVS modules are checked 71# ECVS_TOP_DIR -- The directory under which CVS modules are checked
74# out. 72# out.
75 73
76[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${DISTDIR}/cvs-src" 74[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${DISTDIR}/cvs-src"
77 75
78# ECVS_NAME -- CVS path 76# ECVS_SERVER -- CVS path
79# 77#
80# The format is "server:/dir", e.g. "anoncvs.kde.org:/home/kde". 78# 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 79# Remove the other parts of the full CVSROOT, which might look like
82# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated 80# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated
83# using other settings also. 81# using other settings also.
108# 106#
109# Possible values are "pserver" and "ext". If `ext' authentication is 107# 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 108# 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 109# used by default). Currently, the only supported remote shell for
112# `ext' authentication is SSH. 110# `ext' authentication is SSH.
111#
112# Armando Di Cianno <fafhrd@gentoo.org> 2004/09/27
113# - Added "no" as a server type, which uses no AUTH method, nor
114# does it login
115# e.g.
116# "cvs -danoncvs@savannah.gnu.org:/cvsroot/backbone co System"
117# ( from gnustep-apps/textedit )
113[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver" 118[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver"
114 119
115# ECVS_USER -- Username to use for authentication on the remote server 120# ECVS_USER -- Username to use for authentication on the remote server
116[ -z "$ECVS_USER" ] && ECVS_USER="anonymous" 121[ -z "$ECVS_USER" ] && ECVS_USER="anonymous"
117 122
268 fi 273 fi
269 274
270 275
271 # Our server string (i.e. CVSROOT) without the password so it can 276 # Our server string (i.e. CVSROOT) without the password so it can
272 # be put in Root 277 # be put in Root
278 if [ "$ECVS_AUTH" == "no" ]
279 then
280 local server="${ECVS_USER}@${ECVS_SERVER}"
281 else
273 local server=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}" 282 local server=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}"
283 fi
274 284
275 # Switch servers automagically if needed 285 # Switch servers automagically if needed
276 if [ "$mode" == "update" ]; then 286 if [ "$mode" == "update" ]; then
277 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME 287 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME
278 local oldserver="`$run cat CVS/Root`" 288 local oldserver="`$run cat CVS/Root`"
279 if [ "$server" != "$oldserver" ]; then 289 if [ "$server" != "$oldserver" ]; then
280 290
281 einfo "Changing the CVS server from $oldserver to $server:" 291 einfo "Changing the CVS server from $oldserver to $server:"
282 debug-print "$FUNCNAME: Changing the CVS server from $oldserver to $server:" 292 debug-print "$FUNCNAME: Changing the CVS server from $oldserver to $server:"
283 293
284 einfo "Searching for CVS directories..." 294 einfo "Searching for CVS directories ..."
285 local cvsdirs="`$run find . -iname CVS -print`" 295 local cvsdirs="`$run find . -iname CVS -print`"
286 debug-print "$FUNCNAME: CVS directories found:" 296 debug-print "$FUNCNAME: CVS directories found:"
287 debug-print "$cvsdirs" 297 debug-print "$cvsdirs"
288 298
289 einfo "Modifying CVS directories..." 299 einfo "Modifying CVS directories ..."
290 for x in $cvsdirs; do 300 for x in $cvsdirs; do
291 debug-print "In $x" 301 debug-print "In $x"
292 $run echo "$server" > "$x/Root" 302 $run echo "$server" > "$x/Root"
293 done 303 done
294 304
306 # The server string with the password in it, for login 316 # The server string with the password in it, for login
307 cvsroot_pass=":${ECVS_AUTH}:${ECVS_USER}:${ECVS_PASS}@${ECVS_SERVER}" 317 cvsroot_pass=":${ECVS_AUTH}:${ECVS_USER}:${ECVS_PASS}@${ECVS_SERVER}"
308 318
309 # Ditto without the password, for checkout/update after login, so 319 # Ditto without the password, for checkout/update after login, so
310 # that the CVS/Root files don't contain the password in plaintext 320 # that the CVS/Root files don't contain the password in plaintext
321 if [ "$ECVS_AUTH" == "no" ]
322 then
323 cvsroot_nopass="${ECVS_USER}@${ECVS_SERVER}"
324 else
311 cvsroot_nopass=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}" 325 cvsroot_nopass=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}"
326 fi
312 327
313 # Commands to run 328 # Commands to run
314 cmdlogin="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_pass}\" login" 329 cmdlogin="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_pass}\" login"
315 cmdupdate="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_nopass}\" update ${ECVS_UP_OPTS} ${ECVS_LOCALNAME}" 330 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}" 331 cmdcheckout="${run} ${ECVS_CVS_COMMAND} -d \"${cvsroot_nopass}\" checkout ${ECVS_CO_OPTS} ${ECVS_MODULE}"
326 eval $cmdupdate || die "cvs update command failed" 341 eval $cmdupdate || die "cvs update command failed"
327 elif [ "${mode}" == "checkout" ]; then 342 elif [ "${mode}" == "checkout" ]; then
328 einfo "Running $cmdcheckout" 343 einfo "Running $cmdcheckout"
329 eval $cmdcheckout|| die "cvs checkout command failed" 344 eval $cmdcheckout|| die "cvs checkout command failed"
330 fi 345 fi
331 elif [ "${ECVS_AUTH}" == "ext" ]; then 346 elif [ "${ECVS_AUTH}" == "ext" ] || [ "${ECVS_AUTH}" == "no" ]; then
332 347
333 # Hack to support SSH password authentication 348 # Hack to support SSH password authentication
334 349
335 # Backup environment variable values 350 # Backup environment variable values
336 local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}" 351 local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}"
368except: 383except:
369 pass 384 pass
370newarglist = sys.argv[:] 385newarglist = sys.argv[:]
371EOF 386EOF
372 387
388 # disable X11 forwarding which causes .xauth access violations
389 # - 20041205 Armando Di Cianno <fafhrd@gentoo.org>
390 echo "newarglist.insert(1, '-oClearAllForwardings=yes')" \
391 >> "${CVS_RSH}"
392 echo "newarglist.insert(1, '-oForwardX11=no')" \
393 >> "${CVS_RSH}"
394
373 # Handle SSH host key checking 395 # Handle SSH host key checking
374 396
375 local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts" 397 local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts"
376 echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \ 398 echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \
377 >> "${CVS_RSH}" 399 >> "${CVS_RSH}"
379 if [ -z "${ECVS_SSH_HOST_KEY}" ]; then 401 if [ -z "${ECVS_SSH_HOST_KEY}" ]; then
380 ewarn "Warning: The SSH host key of the remote server will not be verified." 402 ewarn "Warning: The SSH host key of the remote server will not be verified."
381 einfo "A temporary known hosts list will be used." 403 einfo "A temporary known hosts list will be used."
382 local CVS_ECLASS_STRICT_HOST_CHECKING="no" 404 local CVS_ECLASS_STRICT_HOST_CHECKING="no"
383 touch "${CVS_ECLASS_KNOWN_HOSTS}" 405 touch "${CVS_ECLASS_KNOWN_HOSTS}"
384 echo "newarglist.insert(1, '-oStrictHostKeyChecking=no')" \
385 >> "${CVS_RSH}"
386 else 406 else
387 local CVS_ECLASS_STRICT_HOST_CHECKING="yes" 407 local CVS_ECLASS_STRICT_HOST_CHECKING="yes"
388 echo "${ECVS_SSH_HOST_KEY}" > "${CVS_ECLASS_KNOWN_HOSTS}" 408 echo "${ECVS_SSH_HOST_KEY}" > "${CVS_ECLASS_KNOWN_HOSTS}"
389 fi 409 fi
390 410
404 export DISPLAY 424 export DISPLAY
405 425
406 # Create a dummy executable to echo $ECVS_PASS 426 # Create a dummy executable to echo $ECVS_PASS
407 427
408 export SSH_ASKPASS="${T}/cvs_sshechopass" 428 export SSH_ASKPASS="${T}/cvs_sshechopass"
409 429 if [ "${ECVS_AUTH}" != "no" ]; then
410 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \ 430 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \
411 > "${SSH_ASKPASS}" 431 > "${SSH_ASKPASS}"
432 else
433 echo -en "#!/bin/bash\nreturn\n" \
434 > "${SSH_ASKPASS}"
412 435
436 fi
413 chmod a+x "${SSH_ASKPASS}" 437 chmod a+x "${SSH_ASKPASS}"
414 fi 438 fi
415 439
416 if [ "${mode}" == "update" ]; then 440 if [ "${mode}" == "update" ]; then
417 einfo "Running $cmdupdate" 441 einfo "Running $cmdupdate"
478 else 502 else
479 debug-print "$FUNCNAME: Offline mode specified but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found, exiting with error" 503 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." 504 die "ERROR: Offline mode specified, but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found. Aborting."
481 fi 505 fi
482 elif [ -n "$ECVS_SERVER" ]; then # ECVS_SERVER!=offline --> real fetching mode 506 elif [ -n "$ECVS_SERVER" ]; then # ECVS_SERVER!=offline --> real fetching mode
483 einfo "Fetching CVS module $ECVS_MODULE into $ECVS_TOP_DIR..." 507 einfo "Fetching CVS module $ECVS_MODULE into $ECVS_TOP_DIR ..."
484 cvs_fetch 508 cvs_fetch
485 else # ECVS_SERVER not set 509 else # ECVS_SERVER not set
486 die "ERROR: CVS server not specified, cannot continue." 510 die "ERROR: CVS server not specified, cannot continue."
487 fi 511 fi
488 512
489 einfo "Copying $ECVS_MODULE from $ECVS_TOP_DIR..." 513 einfo "Copying $ECVS_MODULE from $ECVS_TOP_DIR ..."
490 debug-print "Copying module $ECVS_MODULE local_mode=$ECVS_LOCAL from $ECVS_TOP_DIR..." 514 debug-print "Copying module $ECVS_MODULE local_mode=$ECVS_LOCAL from $ECVS_TOP_DIR ..."
491 515
492 # This is probably redundant, but best to make sure. 516 # This is probably redundant, but best to make sure.
493 mkdir -p "$WORKDIR/$ECVS_LOCALNAME" 517 mkdir -p "$WORKDIR/$ECVS_LOCALNAME"
494 518
495 if [ -n "$ECVS_LOCAL" ]; then 519 if [ -n "$ECVS_LOCAL" ]; then

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

  ViewVC Help
Powered by ViewVC 1.1.20