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

Diff of /eclass/cvs.eclass

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

Revision 1.61 Revision 1.72
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.61 2005/09/21 23:22:56 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/cvs.eclass,v 1.72 2010/08/21 18:21:06 vapier Exp $
4
5# @ECLASS: cvs.eclass
6# @MAINTAINER:
7# vapier@gentoo.org (and anyone who wants to help)
8# @BLURB: This eclass provides generic cvs fetching functions
9# @DESCRIPTION:
10# This eclass provides the generic cvs fetching functions. To use this from an
11# ebuild, set the ECLASS VARIABLES as specified below in your ebuild before
12# inheriting. Then either leave the default src_unpack or extend over
13# cvs_src_unpack. If you find that you need to call the cvs_* functions
14# directly, I'd be interested to hear about it.
4 15
5inherit eutils 16inherit eutils
6
7# This eclass provides the generic cvs fetching functions. To use
8# this from an ebuild, set the `ebuild-configurable settings' as
9# specified below in your ebuild before inheriting. Then either leave
10# the default src_unpack or extend over cvs_src_unpack. If you find
11# that you need to call the cvs_* functions directly, I'd be
12# interested to hear about it.
13 17
14# TODO: 18# TODO:
15 19
16# Implement more auth types (gserver?, kserver?) 20# Implement more auth types (gserver?, kserver?)
17 21
18# Support additional remote shells with `ext' authentication (does 22# Support additional remote shells with `ext' authentication (does
19# anyone actually need to use it with anything other than SSH?) 23# anyone actually need to use it with anything other than SSH?)
20
21 24
22 25
23# Users shouldn't change these settings! The ebuild/eclass inheriting 26# Users shouldn't change these settings! The ebuild/eclass inheriting
24# 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
25# KDE cvs ebuilds' settings, see the comments in kde-source.eclass. 28# KDE cvs ebuilds' settings, see the comments in kde-source.eclass.
26 29
27# --- begin ebuild-configurable settings 30# @ECLASS-VARIABLE: ECVS_CVS_COMMAND
28 31# @DESCRIPTION:
29# ECVS_CVS_COMMAND -- CVS command to run 32# CVS command to run
30# 33#
31# You can set, for example, "cvs -t" for extensive debug information 34# You can set, for example, "cvs -t" for extensive debug information
32# 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
33# quiet, to disregard the ~/.cvsrc config file and to use maximum 36# quiet, to disregard the ~/.cvsrc config file and to use maximum
34# compression. 37# compression.
35 38
36[ -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"
37 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"
38 48
39# ECVS_UP_OPTS, ECVS_CO_OPTS -- CVS options given after the cvs 49# @ECLASS-VARIABLE: ECVS_CVS_COMMAND
40# command (update or checkout). 50# @DESCRIPTION:
41# 51# The cvs command.
42# 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}"
43 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.
44[ -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.
45[ -z "$ECVS_CO_OPTS" ] && ECVS_CO_OPTS="" 63[ -z "$ECVS_CO_OPTS" ] && ECVS_CO_OPTS=""
46 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}}
47 71
72# @ECLASS-VARIABLE: ECVS_LOCAL
73# @DESCRIPTION:
48# 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.
49# non-recursively. Refer to the information in the CVS man page 75# Refer to the information in the CVS man page regarding the -l
50# regarding the -l command option (not the -l global option). 76# command option (not the -l global option).
51 77
52 78# @ECLASS-VARIABLE: ECVS_LOCALNAME
79# @DESCRIPTION:
53# ECVS_LOCALNAME -- local name of checkout directory 80# Local name of checkout directory
54# 81#
55# 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
56# 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
57# useless empty directories. 84# useless empty directories.
58# 85#
59# 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
60# 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
61# have e.g. a wrong $S setting. 88# have e.g. a wrong $S setting.
62 89
63 90# @ECLASS-VARIABLE: ECVS_TOP_DIR
91# @DESCRIPTION:
64# ECVS_TOP_DIR -- The directory under which CVS modules are checked 92# The directory under which CVS modules are checked out.
65# out.
66
67[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${DISTDIR}/cvs-src" 93[ -z "$ECVS_TOP_DIR" ] && ECVS_TOP_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/cvs-src"
68 94
69# ECVS_SERVER -- CVS path 95# @ECLASS-VARIABLE: ECVS_SERVER
96# @DESCRIPTION:
97# CVS path
70# 98#
71# 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".
72# 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
73# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated 101# ":pserver:anonymous@anoncvs.kde.org:/home/kde"; this is generated
74# using other settings also. 102# using other settings also.
75# 103#
76# 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
77# is already checked out in ECVS_TOP_DIR). 105# is already checked out in ECVS_TOP_DIR).
78
79[ -z "$ECVS_SERVER" ] && ECVS_SERVER="offline" 106[ -z "$ECVS_SERVER" ] && ECVS_SERVER="offline"
80 107
81 108# @ECLASS-VARIABLE: ECVS_MODULE
109# @DESCRIPTION:
82# ECVS_MODULE -- the name of the CVS module to be fetched 110# The name of the CVS module to be fetched
83# 111#
84# 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
85# several directory levels, i.e. "foo/bar/baz" 113# several directory levels, i.e. "foo/bar/baz"
86 114
87#[ -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"
88 116
89 117# @ECLASS-VARIABLE: ECVS_BRANCH
118# @DESCRIPTION:
90# ECVS_BRANCH -- the name of the branch/tag to use 119# The name of the branch/tag to use
91 120#
92# The default is "HEAD". The following default _will_ reset your 121# The default is "HEAD". The following default _will_ reset your
93# branch checkout to head if used. 122# branch checkout to head if used.
94 123
95#[ -z "$ECVS_BRANCH" ] && ECVS_BRANCH="HEAD" 124#[ -z "$ECVS_BRANCH" ] && ECVS_BRANCH="HEAD"
96 125
97 126# @ECLASS-VARIABLE: ECVS_AUTH
127# @DESCRIPTION:
98# ECVS_AUTH -- authentication method to use 128# Authentication method to use
99# 129#
100# Possible values are "pserver" and "ext". If `ext' authentication is 130# Possible values are "pserver" and "ext". If `ext' authentication is
101# 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
102# used by default). Currently, the only supported remote shell for 132# used by default). Currently, the only supported remote shell for
103# `ext' authentication is SSH. 133# `ext' authentication is SSH.
108# e.g. 138# e.g.
109# "cvs -danoncvs@savannah.gnu.org:/cvsroot/backbone co System" 139# "cvs -danoncvs@savannah.gnu.org:/cvsroot/backbone co System"
110# ( from gnustep-apps/textedit ) 140# ( from gnustep-apps/textedit )
111[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver" 141[ -z "$ECVS_AUTH" ] && ECVS_AUTH="pserver"
112 142
143# @ECLASS-VARIABLE: ECVS_USER
144# @DESCRIPTION:
113# ECVS_USER -- Username to use for authentication on the remote server 145# Username to use for authentication on the remote server.
114[ -z "$ECVS_USER" ] && ECVS_USER="anonymous" 146[ -z "$ECVS_USER" ] && ECVS_USER="anonymous"
115 147
116 148# @ECLASS-VARIABLE: ECVS_PASS
149# @DESCRIPTION:
117# ECVS_PASS -- Password to use for authentication on the remote server 150# Password to use for authentication on the remote server
118[ -z "$ECVS_PASS" ] && ECVS_PASS="" 151[ -z "$ECVS_PASS" ] && ECVS_PASS=""
119 152
120 153# @ECLASS-VARIABLE: ECVS_SSH_HOST_KEY
121# ECVS_SSH_HOST_KEY 154# @DESCRIPTION:
122#
123# If SSH is used for `ext' authentication, use this variable to 155# If SSH is used for `ext' authentication, use this variable to
124# 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
125# 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.
126# 158#
127# 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
128# remote host key will not be verified. 160# remote host key will not be verified.
129 161
130 162# @ECLASS-VARIABLE: ECVS_CLEAN
163# @DESCRIPTION:
131# 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
132# -C option to cvs update) 165# -C option to cvs update)
133 166
134 167# @ECLASS-VARIABLE: ECVS_RUNAS
135# ECVS_RUNAS 168# @DESCRIPTION:
136#
137# 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
138# b0rked and wouldn't work with portage userpriv anyway without 170# b0rked and wouldn't work with portage userpriv anyway without
139# special magic. 171# special magic.
140 172
141# [ -z "$ECVS_RUNAS" ] && ECVS_RUNAS="`whoami`" 173# [ -z "$ECVS_RUNAS" ] && ECVS_RUNAS="`whoami`"
142 174
143
144# ECVS_SUBDIR -- deprecated, do not use 175# ECVS_SUBDIR -- deprecated, do not use
145[ -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."
146
147
148# --- end ebuild-configurable settings ---
149 177
150# add cvs to deps 178# add cvs to deps
151# ssh is used for ext auth 179# ssh is used for ext auth
152# sudo is used to run as a specified user 180# sudo is used to run as a specified user
153DEPEND="dev-util/cvs" 181DEPEND="dev-vcs/cvs"
154 182
155[ -n "$ECVS_RUNAS" ] && DEPEND="$DEPEND app-admin/sudo" 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
170 # not affected by modifications in this function. 198 # not affected by modifications in this function.
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
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 203
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
271 # be put in Root 293 # be put in Root
272 if [ "$ECVS_AUTH" == "no" ] 294 if [ "$ECVS_AUTH" == "no" ]
273 then 295 then
274 local server="${ECVS_USER}@${ECVS_SERVER}" 296 local server="${ECVS_USER}@${ECVS_SERVER}"
275 else 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}"
276 local server=":${ECVS_AUTH}:${ECVS_USER}@${ECVS_SERVER}" 301 local server=":${connection}:${ECVS_USER}@${ECVS_SERVER}"
277 fi 302 fi
278 303
279 # Switch servers automagically if needed 304 # Switch servers automagically if needed
280 if [ "$mode" == "update" ]; then 305 if [ "$mode" == "update" ]; then
281 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME 306 cd /$ECVS_TOP_DIR/$ECVS_LOCALNAME
460 chown `whoami` "${T}/cvspass" 485 chown `whoami` "${T}/cvspass"
461 fi 486 fi
462 487
463} 488}
464 489
465 490# @FUNCTION: cvs_src_unpack
491# @DESCRIPTION:
492# The cvs src_unpack function, which will be exported
466cvs_src_unpack() { 493cvs_src_unpack() {
467 494
468 debug-print-function $FUNCNAME $* 495 debug-print-function $FUNCNAME $*
469 496
470 debug-print "$FUNCNAME: init: 497 debug-print "$FUNCNAME: init:
483 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue." 510 [ -z "$ECVS_MODULE" ] && die "ERROR: CVS module not set, cannot continue."
484 511
485 local ECVS_LOCALNAME="${ECVS_LOCALNAME}" 512 local ECVS_LOCALNAME="${ECVS_LOCALNAME}"
486 513
487 if [ -z "$ECVS_LOCALNAME" ]; then 514 if [ -z "$ECVS_LOCALNAME" ]; then
488 ECVS_LOCALNAME="$ECVS_MODULE" 515 ECVS_LOCALNAME="$ECVS_MODULE"
489 fi 516 fi
490 517
491 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
492 # We're not required to fetch anything; the module already 521 # We're not required to fetch anything; the module already
493 # exists and shouldn't be updated. 522 # exists and shouldn't be updated.
494 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then 523 if [ -d "${ECVS_TOP_DIR}/${ECVS_LOCALNAME}" ]; then
495 debug-print "$FUNCNAME: offline mode" 524 debug-print "$FUNCNAME: offline mode"
496 else 525 else
497 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"
498 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."
499 fi 528 fi

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

  ViewVC Help
Powered by ViewVC 1.1.20