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

Contents of /eclass/mercurial.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.21 - (hide annotations) (download)
Fri Mar 15 21:47:58 2013 UTC (20 months, 1 week ago) by ottxor
Branch: MAIN
Changes since 1.20: +4 -4 lines
default to EHG_QUIET="OFF" (bug #461858)

1 ottxor 1.21 # Copyright 1999-2013 Gentoo Foundation
2 agriffis 1.1 # Distributed under the terms of the GNU General Public License v2
3 ottxor 1.21 # $Header: /var/cvsroot/gentoo-x86/eclass/mercurial.eclass,v 1.20 2012/12/26 23:08:53 ottxor Exp $
4 agriffis 1.1
5 nelchael 1.5 # @ECLASS: mercurial.eclass
6     # @MAINTAINER:
7 ottxor 1.20 # Christoph Junghans <ottxor@gentoo.org>
8 nelchael 1.12 # Dirkjan Ochtman <djc@gentoo.org>
9 ottxor 1.20 # @AUTHOR:
10     # Next gen author: Krzysztof Pawlik <nelchael@gentoo.org>
11     # Original author: Aron Griffis <agriffis@gentoo.org>
12 nelchael 1.5 # @BLURB: This eclass provides generic mercurial fetching functions
13     # @DESCRIPTION:
14     # This eclass provides generic mercurial fetching functions. To fetch sources
15     # from mercurial repository just set EHG_REPO_URI to correct repository URI. If
16     # you need to share single repository between several ebuilds set EHG_PROJECT to
17     # project name in all of them.
18 agriffis 1.1
19     inherit eutils
20    
21     EXPORT_FUNCTIONS src_unpack
22    
23 djc 1.11 DEPEND="dev-vcs/mercurial"
24 agriffis 1.1
25 nelchael 1.5 # @ECLASS-VARIABLE: EHG_REPO_URI
26     # @DESCRIPTION:
27     # Mercurial repository URI.
28    
29     # @ECLASS-VARIABLE: EHG_REVISION
30     # @DESCRIPTION:
31     # Create working directory for specified revision, defaults to tip.
32 nelchael 1.9 #
33 nelchael 1.16 # EHG_REVISION is passed as a value for --updaterev parameter, so it can be more
34     # than just a revision, please consult `hg help revisions' for more details.
35 ottxor 1.20 : ${EHG_REVISION:="default"}
36 nelchael 1.5
37 nelchael 1.12 # @ECLASS-VARIABLE: EHG_STORE_DIR
38     # @DESCRIPTION:
39     # Mercurial sources store directory. Users may override this in /etc/make.conf
40     [[ -z "${EHG_STORE_DIR}" ]] && EHG_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}/hg-src"
41    
42 nelchael 1.5 # @ECLASS-VARIABLE: EHG_PROJECT
43     # @DESCRIPTION:
44     # Project name.
45     #
46     # This variable default to $PN, but can be changed to allow repository sharing
47     # between several ebuilds.
48     [[ -z "${EHG_PROJECT}" ]] && EHG_PROJECT="${PN}"
49    
50 robbat2 1.8 # @ECLASS-VARIABLE: EHG_QUIET
51     # @DESCRIPTION:
52 ottxor 1.21 # Suppress some extra noise from mercurial, set it to 'ON' to be quiet.
53     : ${EHG_QUIET:="OFF"}
54 robbat2 1.8 [[ "${EHG_QUIET}" == "ON" ]] && EHG_QUIET_CMD_OPT="--quiet"
55    
56 nelchael 1.5 # @ECLASS-VARIABLE: EHG_CLONE_CMD
57     # @DESCRIPTION:
58     # Command used to perform initial repository clone.
59 robbat2 1.8 [[ -z "${EHG_CLONE_CMD}" ]] && EHG_CLONE_CMD="hg clone ${EHG_QUIET_CMD_OPT} --pull --noupdate"
60 nelchael 1.5
61     # @ECLASS-VARIABLE: EHG_PULL_CMD
62     # @DESCRIPTION:
63     # Command used to update repository.
64 robbat2 1.8 [[ -z "${EHG_PULL_CMD}" ]] && EHG_PULL_CMD="hg pull ${EHG_QUIET_CMD_OPT}"
65 nelchael 1.5
66 nelchael 1.7 # @ECLASS-VARIABLE: EHG_OFFLINE
67     # @DESCRIPTION:
68     # Set this variable to a non-empty value to disable the automatic updating of
69     # a mercurial source tree. This is intended to be set outside the ebuild by
70     # users.
71 nelchael 1.19 EHG_OFFLINE="${EHG_OFFLINE:-${EVCS_OFFLINE}}"
72 nelchael 1.7
73 nelchael 1.5 # @FUNCTION: mercurial_fetch
74 nelchael 1.15 # @USAGE: [repository_uri] [module] [sourcedir]
75 nelchael 1.5 # @DESCRIPTION:
76     # Clone or update repository.
77     #
78 nelchael 1.15 # If repository URI is not passed it defaults to EHG_REPO_URI, if module is
79     # empty it defaults to basename of EHG_REPO_URI, sourcedir defaults to S.
80 ottxor 1.20 mercurial_fetch() {
81     debug-print-function ${FUNCNAME} "${@}"
82    
83     has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=
84 agriffis 1.1
85 nelchael 1.5 EHG_REPO_URI=${1-${EHG_REPO_URI}}
86     [[ -z "${EHG_REPO_URI}" ]] && die "EHG_REPO_URI is empty"
87 agriffis 1.1
88 ottxor 1.20 local cert_opt=
89     [[ -f ${EPREFIX}/etc/ssl/certs/ca-certificates.crt ]] && \
90     cert_opt=( --config "web.cacerts=${EPREFIX}/etc/ssl/certs/ca-certificates.crt" )
91    
92 nelchael 1.5 local module="${2-$(basename "${EHG_REPO_URI}")}"
93 nelchael 1.15 local sourcedir="${3-${S}}"
94 agriffis 1.1
95 nelchael 1.5 # Should be set but blank to prevent using $HOME/.hgrc
96     export HGRCPATH=
97    
98 nelchael 1.12 # Check ${EHG_STORE_DIR} directory:
99     addwrite "$(dirname "${EHG_STORE_DIR}")" || die "addwrite failed"
100     if [[ ! -d "${EHG_STORE_DIR}" ]]; then
101     mkdir -p "${EHG_STORE_DIR}" || die "failed to create ${EHG_STORE_DIR}"
102     chmod -f g+rw "${EHG_STORE_DIR}" || \
103     die "failed to chown ${EHG_STORE_DIR}"
104 agriffis 1.1 fi
105    
106 nelchael 1.5 # Create project directory:
107 nelchael 1.12 mkdir -p "${EHG_STORE_DIR}/${EHG_PROJECT}" || \
108     die "failed to create ${EHG_STORE_DIR}/${EHG_PROJECT}"
109     chmod -f g+rw "${EHG_STORE_DIR}/${EHG_PROJECT}" || \
110 nelchael 1.10 echo "Warning: failed to chmod g+rw ${EHG_PROJECT}"
111 nelchael 1.12 cd "${EHG_STORE_DIR}/${EHG_PROJECT}" || \
112     die "failed to cd to ${EHG_STORE_DIR}/${EHG_PROJECT}"
113 nelchael 1.5
114     # Clone/update repository:
115     if [[ ! -d "${module}" ]]; then
116 nelchael 1.12 einfo "Cloning ${EHG_REPO_URI} to ${EHG_STORE_DIR}/${EHG_PROJECT}/${module}"
117 ottxor 1.20 ${EHG_CLONE_CMD} "${cert_opt[@]}" "${EHG_REPO_URI}" "${module}" || {
118 nelchael 1.5 rm -rf "${module}"
119     die "failed to clone ${EHG_REPO_URI}"
120     }
121     cd "${module}"
122 nelchael 1.7 elif [[ -z "${EHG_OFFLINE}" ]]; then
123 nelchael 1.12 einfo "Updating ${EHG_STORE_DIR}/${EHG_PROJECT}/${module} from ${EHG_REPO_URI}"
124 nelchael 1.5 cd "${module}" || die "failed to cd to ${module}"
125 ottxor 1.20 ${EHG_PULL_CMD} "${cert_opt[@]}" "${EHG_REPO_URI}" || die "update failed"
126 agriffis 1.1 fi
127    
128 nelchael 1.5 # Checkout working copy:
129 nelchael 1.15 einfo "Creating working directory in ${sourcedir} (target revision: ${EHG_REVISION})"
130 nelchael 1.5 hg clone \
131 robbat2 1.8 ${EHG_QUIET_CMD_OPT} \
132 nelchael 1.16 --updaterev="${EHG_REVISION}" \
133 nelchael 1.12 "${EHG_STORE_DIR}/${EHG_PROJECT}/${module}" \
134 nelchael 1.15 "${sourcedir}" || die "hg clone failed"
135 robbat2 1.13 # An exact revision helps a lot for testing purposes, so have some output...
136     # id num branch
137     # fd6e32d61721 6276 default
138 nelchael 1.15 local HG_REVDATA=($(hg identify -b -i "${sourcedir}"))
139 nelchael 1.14 export HG_REV_ID=${HG_REVDATA[0]}
140 robbat2 1.13 local HG_REV_BRANCH=${HG_REVDATA[1]}
141 ottxor 1.20 einfo "Work directory: ${sourcedir} global id: ${HG_REV_ID} (was ${EHG_REVISION} branch: ${HG_REV_BRANCH}"
142     }
143    
144     # @FUNCTION: mercurial_bootstrap
145     # @INTERNAL
146     # @DESCRIPTION:
147     # Internal function that runs bootstrap command on unpacked source.
148     mercurial_bootstrap() {
149     debug-print-function ${FUNCNAME} "$@"
150    
151     # @ECLASS-VARIABLE: EHG_BOOTSTRAP
152     # @DESCRIPTION:
153     # Command to be executed after checkout and clone of the specified
154     # repository.
155     if [[ ${EHG_BOOTSTRAP} ]]; then
156     pushd "${S}" > /dev/null
157     einfo "Starting bootstrap"
158    
159     if [[ -f ${EHG_BOOTSTRAP} ]]; then
160     # we have file in the repo which we should execute
161     debug-print "${FUNCNAME}: bootstraping with file \"${EHG_BOOTSTRAP}\""
162    
163     if [[ -x ${EHG_BOOTSTRAP} ]]; then
164     eval "./${EHG_BOOTSTRAP}" \
165     || die "${FUNCNAME}: bootstrap script failed"
166     else
167     eerror "\"${EHG_BOOTSTRAP}\" is not executable."
168     eerror "Report upstream, or bug ebuild maintainer to remove bootstrap command."
169     die "\"${EHG_BOOTSTRAP}\" is not executable"
170     fi
171     else
172     # we execute some system command
173     debug-print "${FUNCNAME}: bootstraping with commands \"${EHG_BOOTSTRAP}\""
174    
175     eval "${EHG_BOOTSTRAP}" \
176     || die "${FUNCNAME}: bootstrap commands failed"
177     fi
178    
179     einfo "Bootstrap finished"
180     popd > /dev/null
181     fi
182 agriffis 1.1 }
183    
184 nelchael 1.5 # @FUNCTION: mercurial_src_unpack
185     # @DESCRIPTION:
186     # The mercurial src_unpack function, which will be exported.
187 agriffis 1.1 function mercurial_src_unpack {
188 ottxor 1.20 debug-print-function ${FUNCNAME} "$@"
189    
190 agriffis 1.1 mercurial_fetch
191 ottxor 1.20 mercurial_bootstrap
192 agriffis 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.20