blob: 3652f68e2b91126530a8aaf122ffdfe2668822e6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/eclass/mercurial.eclass,v 1.4 2009/02/22 13:01:17 nelchael Exp $
# mercurial: Fetch sources from mercurial repositories, similar to cvs.eclass.
# To use this from an ebuild, set EHG_REPO_URI in your ebuild. Then either
# leave the default src_unpack or call mercurial_src_unpack.
inherit eutils
EXPORT_FUNCTIONS src_unpack
DEPEND="dev-util/mercurial net-misc/rsync"
EHG_STORE_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/hg-src"
# This must be set by the ebuild
: ${EHG_REPO_URI:=} # repository uri
# These can be set by the ebuild but are usually fine as-is
: ${EHG_PROJECT:=$PN} # dir under EHG_STORE_DIR
: ${EHG_CLONE_CMD:=hg clone --pull} # clone cmd
: ${EHG_PULL_CMD:=hg pull -u} # pull cmd
# should be set but blank to prevent using $HOME/.hgrc
export HGRCPATH=
function mercurial_fetch {
declare repo=${1:-$EHG_REPO_URI}
repo=${repo%/} # remove trailing slash
[[ -n $repo ]] || die "EHG_REPO_URI is empty"
declare module=${2:-${repo##*/}}
if [[ ! -d ${EHG_STORE_DIR} ]]; then
ebegin "create ${EHG_STORE_DIR}"
addwrite / &&
mkdir -p "${EHG_STORE_DIR}" &&
chmod -f g+rw "${EHG_STORE_DIR}" &&
export SANDBOX_WRITE="${SANDBOX_WRITE%:/}"
eend $? || die
fi
pushd "${EHG_STORE_DIR}" >/dev/null \
|| die "can't chdir to ${EHG_STORE_DIR}"
addwrite "$(pwd -P)"
if [[ ! -d ${EHG_PROJECT}/${module} ]]; then
# first check out
ebegin "${EHG_CLONE_CMD} ${repo}"
mkdir -p "${EHG_PROJECT}" &&
chmod -f g+rw "${EHG_PROJECT}" &&
cd "${EHG_PROJECT}" &&
${EHG_CLONE_CMD} "${repo}" "${module}" &&
cd "${module}"
eend $? || die
else
# update working copy
ebegin "${EHG_PULL_CMD} ${repo}"
cd "${EHG_PROJECT}/${module}" &&
${EHG_PULL_CMD}
case $? in
# hg pull returns status 1 when there were no changes to pull
1) eend 0 ;;
*) eend $? || die ;;
esac
fi
# use rsync instead of cp for --exclude
ebegin "rsync to ${WORKDIR}/${module}"
mkdir -p "${WORKDIR}/${module}" &&
rsync -a --delete --exclude=.hg/ . "${WORKDIR}/${module}"
eend $? || die
popd >/dev/null
}
function mercurial_src_unpack {
mercurial_fetch
}
|