/[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.61
1# Copyright 1999-2004 Gentoo Foundation 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.52 2004/09/28 06:18:06 fafhrd Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/cvs.eclass,v 1.61 2005/09/21 23:22:56 vapier Exp $
4 4
5# Current Maintainer: Tal Peer <coredumb@gentoo.org> 5inherit eutils
6# Original Author: Dan Armak <danarmak@gentoo.org>
7
8# SSH auth code by Danny <danny.milo@gmx.net>
9
10# SSH password authentication support and host key verification
11# support by Jeremy Maitin-Shepard <jbms@gentoo.org>
12
13 6
14# This eclass provides the generic cvs fetching functions. To use 7# This eclass provides the generic cvs fetching functions. To use
15# this from an ebuild, set the `ebuild-configurable settings' as 8# this from an ebuild, set the `ebuild-configurable settings' as
16# specified below in your ebuild before inheriting. Then either leave 9# specified below in your ebuild before inheriting. Then either leave
17# the default src_unpack or extend over cvs_src_unpack. If you find 10# the default src_unpack or extend over cvs_src_unpack. If you find
24 17
25# Support additional remote shells with `ext' authentication (does 18# Support additional remote shells with `ext' authentication (does
26# anyone actually need to use it with anything other than SSH?) 19# anyone actually need to use it with anything other than SSH?)
27 20
28 21
29ECLASS=cvs
30INHERITED="$INHERITED $ECLASS"
31 22
32# Users shouldn't change these settings! The ebuild/eclass inheriting 23# 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 24# 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. 25# KDE cvs ebuilds' settings, see the comments in kde-source.eclass.
35 26
73# ECVS_TOP_DIR -- The directory under which CVS modules are checked 64# ECVS_TOP_DIR -- The directory under which CVS modules are checked
74# out. 65# out.
75 66
76[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${DISTDIR}/cvs-src" 67[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${DISTDIR}/cvs-src"
77 68
78# ECVS_NAME -- CVS path 69# ECVS_SERVER -- CVS path
79# 70#
80# The format is "server:/dir", e.g. "anoncvs.kde.org:/home/kde". 71# 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 72# Remove the other parts of the full CVSROOT, which might look like
82# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated 73# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated
83# using other settings also. 74# using other settings also.
157# --- end ebuild-configurable settings --- 148# --- end ebuild-configurable settings ---
158 149
159# add cvs to deps 150# add cvs to deps
160# ssh is used for ext auth 151# ssh is used for ext auth
161# sudo is used to run as a specified user 152# sudo is used to run as a specified user
162DEPEND="$DEPEND dev-util/cvs app-admin/sudo" 153DEPEND="dev-util/cvs"
154
155[ -n "$ECVS_RUNAS" ] && DEPEND="$DEPEND app-admin/sudo"
163 156
164if [ "$ECVS_AUTH" == "ext" ]; then 157if [ "$ECVS_AUTH" == "ext" ]; then
165 #default to ssh 158 #default to ssh
166 [ -z "$CVS_RSH" ] && export SSH_RSH="ssh" 159 [ -z "$CVS_RSH" ] && export CVS_RSH="ssh"
167 if [ "$CVS_RSH" != "ssh" ]; then 160 if [ "$CVS_RSH" != "ssh" ]; then
168 die "Support for ext auth with clients other than ssh has not been implemented yet" 161 die "Support for ext auth with clients other than ssh has not been implemented yet"
169 fi 162 fi
170 DEPEND="$DEPEND net-misc/openssh" 163 DEPEND="${DEPEND} net-misc/openssh"
171fi 164fi
172 165
173# called from cvs_src_unpack 166# called from cvs_src_unpack
174cvs_fetch() { 167cvs_fetch() {
175 168
190 183
191 # Update variables that are modified by ebuild parameters, which 184 # Update variables that are modified by ebuild parameters, which
192 # should be effective every time cvs_fetch is called, and not just 185 # should be effective every time cvs_fetch is called, and not just
193 # every time cvs.eclass is inherited 186 # every time cvs.eclass is inherited
194 187
195
196 # Handle parameter for local (non-recursive) fetching 188 # Handle parameter for local (non-recursive) fetching
197 189
198 if [ -n "$ECVS_LOCAL" ]; then 190 if [ -n "$ECVS_LOCAL" ]; then
199 ECVS_UP_OPTS="$ECVS_UP_OPTS -l" 191 ECVS_UP_OPTS="$ECVS_UP_OPTS -l"
200 ECVS_CO_OPTS="$ECVS_CO_OPTS -l" 192 ECVS_CO_OPTS="$ECVS_CO_OPTS -l"
201 fi 193 fi
202 194
203 # Handle ECVS_BRANCH option 195 # Handle ECVS_BRANCH option
204 # 196 #
205 # Because CVS auto-switches branches, we just have to pass the 197 # Because CVS auto-switches branches, we just have to pass the
206 # correct -rBRANCH option when updating. 198 # correct -rBRANCH option when updating.
207 199
208 if [ -n "$ECVS_BRANCH" ]; then 200 if [ -n "$ECVS_BRANCH" ]; then
209 ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH" 201 ECVS_UP_OPTS="$ECVS_UP_OPTS -r$ECVS_BRANCH"
291 if [ "$server" != "$oldserver" ]; then 283 if [ "$server" != "$oldserver" ]; then
292 284
293 einfo "Changing the CVS server from $oldserver to $server:" 285 einfo "Changing the CVS server from $oldserver to $server:"
294 debug-print "$FUNCNAME: Changing the CVS server from $oldserver to $server:" 286 debug-print "$FUNCNAME: Changing the CVS server from $oldserver to $server:"
295 287
296 einfo "Searching for CVS directories..." 288 einfo "Searching for CVS directories ..."
297 local cvsdirs="`$run find . -iname CVS -print`" 289 local cvsdirs="`$run find . -iname CVS -print`"
298 debug-print "$FUNCNAME: CVS directories found:" 290 debug-print "$FUNCNAME: CVS directories found:"
299 debug-print "$cvsdirs" 291 debug-print "$cvsdirs"
300 292
301 einfo "Modifying CVS directories..." 293 einfo "Modifying CVS directories ..."
302 for x in $cvsdirs; do 294 for x in $cvsdirs; do
303 debug-print "In $x" 295 debug-print "In $x"
304 $run echo "$server" > "$x/Root" 296 $run echo "$server" > "$x/Root"
305 done 297 done
306 298
340 eval $cmdlogin || die "cvs login command failed" 332 eval $cmdlogin || die "cvs login command failed"
341 if [ "${mode}" == "update" ]; then 333 if [ "${mode}" == "update" ]; then
342 einfo "Running $cmdupdate" 334 einfo "Running $cmdupdate"
343 eval $cmdupdate || die "cvs update command failed" 335 eval $cmdupdate || die "cvs update command failed"
344 elif [ "${mode}" == "checkout" ]; then 336 elif [ "${mode}" == "checkout" ]; then
345 einfo "Running $cmdcheckout" 337 einfo "Running $cmdcheckout"
346 eval $cmdcheckout|| die "cvs checkout command failed" 338 eval $cmdcheckout|| die "cvs checkout command failed"
347 fi 339 fi
348 elif [ "${ECVS_AUTH}" == "ext" ]; then 340 elif [ "${ECVS_AUTH}" == "ext" ] || [ "${ECVS_AUTH}" == "no" ]; then
349 341
350 # Hack to support SSH password authentication 342 # Hack to support SSH password authentication
351 343
352 # Backup environment variable values 344 # Backup environment variable values
353 local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}" 345 local CVS_ECLASS_ORIG_CVS_RSH="${CVS_RSH}"
385except: 377except:
386 pass 378 pass
387newarglist = sys.argv[:] 379newarglist = sys.argv[:]
388EOF 380EOF
389 381
382 # disable X11 forwarding which causes .xauth access violations
383 # - 20041205 Armando Di Cianno <fafhrd@gentoo.org>
384 echo "newarglist.insert(1, '-oClearAllForwardings=yes')" \
385 >> "${CVS_RSH}"
386 echo "newarglist.insert(1, '-oForwardX11=no')" \
387 >> "${CVS_RSH}"
388
390 # Handle SSH host key checking 389 # Handle SSH host key checking
391 390
392 local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts" 391 local CVS_ECLASS_KNOWN_HOSTS="${T}/cvs_ssh_known_hosts"
393 echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \ 392 echo "newarglist.insert(1, '-oUserKnownHostsFile=${CVS_ECLASS_KNOWN_HOSTS}')" \
394 >> "${CVS_RSH}" 393 >> "${CVS_RSH}"
396 if [ -z "${ECVS_SSH_HOST_KEY}" ]; then 395 if [ -z "${ECVS_SSH_HOST_KEY}" ]; then
397 ewarn "Warning: The SSH host key of the remote server will not be verified." 396 ewarn "Warning: The SSH host key of the remote server will not be verified."
398 einfo "A temporary known hosts list will be used." 397 einfo "A temporary known hosts list will be used."
399 local CVS_ECLASS_STRICT_HOST_CHECKING="no" 398 local CVS_ECLASS_STRICT_HOST_CHECKING="no"
400 touch "${CVS_ECLASS_KNOWN_HOSTS}" 399 touch "${CVS_ECLASS_KNOWN_HOSTS}"
401 echo "newarglist.insert(1, '-oStrictHostKeyChecking=no')" \
402 >> "${CVS_RSH}"
403 else 400 else
404 local CVS_ECLASS_STRICT_HOST_CHECKING="yes" 401 local CVS_ECLASS_STRICT_HOST_CHECKING="yes"
405 echo "${ECVS_SSH_HOST_KEY}" > "${CVS_ECLASS_KNOWN_HOSTS}" 402 echo "${ECVS_SSH_HOST_KEY}" > "${CVS_ECLASS_KNOWN_HOSTS}"
406 fi 403 fi
407 404
410 echo "${CVS_ECLASS_STRICT_HOST_CHECKING}')" \ 407 echo "${CVS_ECLASS_STRICT_HOST_CHECKING}')" \
411 >> "${CVS_RSH}" 408 >> "${CVS_RSH}"
412 echo "os.execv('/usr/bin/ssh', newarglist)" \ 409 echo "os.execv('/usr/bin/ssh', newarglist)" \
413 >> "${CVS_RSH}" 410 >> "${CVS_RSH}"
414 411
415 chmod a+x "${CVS_RSH}" 412 chmod a+x "${CVS_RSH}"
416 413
417 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS 414 # Make sure DISPLAY is set (SSH will not use SSH_ASKPASS
418 # if DISPLAY is not set) 415 # if DISPLAY is not set)
419 416
420 [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY" 417 [ -z "${DISPLAY}" ] && DISPLAY="DISPLAY"
421 export DISPLAY 418 export DISPLAY
422 419
423 # Create a dummy executable to echo $ECVS_PASS 420 # Create a dummy executable to echo $ECVS_PASS
424 421
425 export SSH_ASKPASS="${T}/cvs_sshechopass" 422 export SSH_ASKPASS="${T}/cvs_sshechopass"
426 423 if [ "${ECVS_AUTH}" != "no" ]; then
427 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \ 424 echo -en "#!/bin/bash\necho \"$ECVS_PASS\"\n" \
428 > "${SSH_ASKPASS}" 425 > "${SSH_ASKPASS}"
426 else
427 echo -en "#!/bin/bash\nreturn\n" \
428 > "${SSH_ASKPASS}"
429 429
430 fi
430 chmod a+x "${SSH_ASKPASS}" 431 chmod a+x "${SSH_ASKPASS}"
431 fi 432 fi
432 433
433 if [ "${mode}" == "update" ]; then 434 if [ "${mode}" == "update" ]; then
434 einfo "Running $cmdupdate" 435 einfo "Running $cmdupdate"
435 eval $cmdupdate || die "cvs update command failed" 436 eval $cmdupdate || die "cvs update command failed"
436 elif [ "${mode}" == "checkout" ]; then 437 elif [ "${mode}" == "checkout" ]; then
437 einfo "Running $cmdcheckout" 438 einfo "Running $cmdcheckout"
438 eval $cmdcheckout|| die "cvs checkout command failed" 439 eval $cmdcheckout|| die "cvs checkout command failed"
439 fi 440 fi
440 441
441 # Restore environment variable values 442 # Restore environment variable values
442 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}" 443 export CVS_RSH="${CVS_ECLASS_ORIG_CVS_RSH}"
443 if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then 444 if [ "${CVS_ECLASS_ORIG_SSH_ASKPASS+set}" == "set" ]; then
444 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}" 445 export SSH_ASKPASS="${CVS_ECLASS_ORIG_SSH_ASKPASS}"
445 else 446 else
448 449
449 if [ "${CVS_ECLASS_ORIG_DISPLAY+set}" == "set" ]; then 450 if [ "${CVS_ECLASS_ORIG_DISPLAY+set}" == "set" ]; then
450 export DISPLAY="${CVS_ECLASS_ORIG_DISPLAY}" 451 export DISPLAY="${CVS_ECLASS_ORIG_DISPLAY}"
451 else 452 else
452 unset DISPLAY 453 unset DISPLAY
453 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 454 fi
462 fi 455 fi
463 456
464 # Restore ownership. Not sure why this is needed, but someone 457 # Restore ownership. Not sure why this is needed, but someone
465 # added it in the orig ECVS_RUNAS stuff. 458 # added it in the orig ECVS_RUNAS stuff.
503 else 496 else
504 debug-print "$FUNCNAME: Offline mode specified but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found, exiting with error" 497 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." 498 die "ERROR: Offline mode specified, but directory ${ECVS_TOP_DIR}/${ECVS_LOCALNAME} not found. Aborting."
506 fi 499 fi
507 elif [ -n "$ECVS_SERVER" ]; then # ECVS_SERVER!=offline --> real fetching mode 500 elif [ -n "$ECVS_SERVER" ]; then # ECVS_SERVER!=offline --> real fetching mode
508 einfo "Fetching CVS module $ECVS_MODULE into $ECVS_TOP_DIR..." 501 einfo "Fetching CVS module $ECVS_MODULE into $ECVS_TOP_DIR ..."
509 cvs_fetch 502 cvs_fetch
510 else # ECVS_SERVER not set 503 else # ECVS_SERVER not set
511 die "ERROR: CVS server not specified, cannot continue." 504 die "ERROR: CVS server not specified, cannot continue."
512 fi 505 fi
513 506
514 einfo "Copying $ECVS_MODULE from $ECVS_TOP_DIR..." 507 einfo "Copying $ECVS_MODULE from $ECVS_TOP_DIR ..."
515 debug-print "Copying module $ECVS_MODULE local_mode=$ECVS_LOCAL from $ECVS_TOP_DIR..." 508 debug-print "Copying module $ECVS_MODULE local_mode=$ECVS_LOCAL from $ECVS_TOP_DIR ..."
516 509
517 # This is probably redundant, but best to make sure. 510 # This is probably redundant, but best to make sure.
518 mkdir -p "$WORKDIR/$ECVS_LOCALNAME" 511 mkdir -p "$WORKDIR/$ECVS_LOCALNAME"
519 512
520 if [ -n "$ECVS_LOCAL" ]; then 513 if [ -n "$ECVS_LOCAL" ]; then
535 # Implement some of base_src_unpack's functionality; note however 528 # Implement some of base_src_unpack's functionality; note however
536 # that base.eclass may not have been inherited! 529 # that base.eclass may not have been inherited!
537 if [ -n "$PATCHES" ]; then 530 if [ -n "$PATCHES" ]; then
538 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching" 531 debug-print "$FUNCNAME: PATCHES=$PATCHES, S=$S, autopatching"
539 cd "$S" 532 cd "$S"
540 for x in $PATCHES; do 533 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, 534 # Make sure we don't try to apply patches more than once,
545 # since cvs_src_unpack is usually called several times from 535 # since cvs_src_unpack is usually called several times from
546 # e.g. kde-source_src_unpack 536 # e.g. kde-source_src_unpack
547 export PATCHES="" 537 export PATCHES=""
548 fi 538 fi
549 539
550 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}" 540 einfo "CVS module ${ECVS_MODULE} is now in ${WORKDIR}"
551} 541}
552 542
553EXPORT_FUNCTIONS src_unpack 543EXPORT_FUNCTIONS src_unpack

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

  ViewVC Help
Powered by ViewVC 1.1.20