summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndres Loeh <kosmikus@gentoo.org>2006-05-22 23:05:24 +0000
committerAndres Loeh <kosmikus@gentoo.org>2006-05-22 23:05:24 +0000
commite88cd1e01cdeeee3b349593fed6038d6b7351fb0 (patch)
tree446ede7a2c2e1fd47398759e9007f9f504a187f5 /eclass/darcs.eclass
parentVersion bump. (diff)
downloadgentoo-2-e88cd1e01cdeeee3b349593fed6038d6b7351fb0.tar.gz
gentoo-2-e88cd1e01cdeeee3b349593fed6038d6b7351fb0.tar.bz2
gentoo-2-e88cd1e01cdeeee3b349593fed6038d6b7351fb0.zip
added new darcs eclass
Diffstat (limited to 'eclass/darcs.eclass')
-rw-r--r--eclass/darcs.eclass142
1 files changed, 142 insertions, 0 deletions
diff --git a/eclass/darcs.eclass b/eclass/darcs.eclass
new file mode 100644
index 000000000000..d04a5b2a767b
--- /dev/null
+++ b/eclass/darcs.eclass
@@ -0,0 +1,142 @@
+# Copyright 2004 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/eclass/darcs.eclass,v 1.1 2006/05/22 23:05:24 kosmikus Exp $
+#
+# darcs eclass author: Andres Loeh <kosmikus@gentoo.org>
+# tla eclass author: <rphillips@gentoo.org>
+# Original Author: Jeffrey Yasskin <jyasskin@mail.utexas.edu>
+#
+# Originally derived from the tla eclass, which is derived from the
+# cvs eclass.
+#
+# This eclass provides the generic darcs fetching functions.
+# to use from an ebuild, set the 'ebuild-configurable settings' below in your
+# ebuild before inheriting. then either leave the default src_unpack or extend
+# over darcs_src_unpack.
+
+# Most of the time, you will define only $EDARCS_REPOSITORY in your
+# ebuild.
+
+# TODO: support for tags, ...
+
+# Don't download anything other than the darcs repository
+SRC_URI=""
+
+# You shouldn't change these settings yourself! The ebuild/eclass inheriting
+# this eclass will take care of that.
+
+# --- begin ebuild-configurable settings
+
+# darcs command to run
+[ -z "$EDARCS_DARCS_CMD" ] && EDARCS_DARCS_CMD="darcs"
+
+# darcs commands with options
+[ -z "$EDARCS_GET_CMD" ] && EDARCS_GET_CMD="get"
+[ -z "$EDARCS_UPDATE_CMD" ] && EDARCS_UPDATE_CMD="pull"
+
+# Where the darcs repositories are stored/accessed
+[ -z "$EDARCS_TOP_DIR" ] && EDARCS_TOP_DIR="${PORTAGE_ACTUAL_DISTDIR-${DISTDIR}}/darcs-src"
+
+# The URI to the repository.
+[ -z "$EDARCS_REPOSITORY" ] && EDARCS_REPOSITORY=""
+
+# The local directory to store the repository (useful to ensure a
+# unique local name); relative to EDARCS_TOP_DIR
+[ -z "$EDARCS_LOCALREPO" ] && [ -n "$EDARCS_REPOSITORY" ] \
+ && EDARCS_LOCALREPO="`basename $EDARCS_REPOSITORY`"
+
+# EDARCS_CLEAN: set this to something to get a clean copy when updating
+# (removes the working directory, then uses $EDARCS_GET_CMD to
+# re-download it.)
+
+# --- end ebuild-configurable settings ---
+
+# add darcs to deps
+DEPEND="dev-util/darcs"
+
+# is called from darcs_src_unpack
+darcs_fetch() {
+
+ debug-print-function $FUNCNAME $*
+
+ if [ -n "$EDARCS_CLEAN" ]; then
+ rm -rf $EDARCS_TOP_DIR/$EDARCS_LOCALREPO
+ fi
+
+ # create the top dir if needed
+ if [ ! -d "$EDARCS_TOP_DIR" ]; then
+ # note that the addwrite statements in this block are only there to allow creating EDARCS_TOP_DIR;
+ # we've already allowed writing inside it
+ # this is because it's simpler than trying to find out the parent path of the directory, which
+ # would need to be the real path and not a symlink for things to work (so we can't just remove
+ # the last path element in the string)
+ debug-print "$FUNCNAME: checkout mode. creating darcs directory"
+ addwrite /foobar
+ addwrite /
+ mkdir -p "$EDARCS_TOP_DIR"
+ export SANDBOX_WRITE="${SANDBOX_WRITE//:\/foobar:\/}"
+ fi
+
+ # in case EDARCS_DARCS_DIR is a symlink to a dir, get the real
+ # dir's path, otherwise addwrite() doesn't work.
+ cd -P "$EDARCS_TOP_DIR" > /dev/null
+ EDARCS_TOP_DIR="`/bin/pwd`"
+
+ # disable the sandbox for this dir
+ addwrite "$EDARCS_TOP_DIR"
+
+ # determine checkout or update mode and change to the right directory.
+ if [ ! -d "$EDARCS_TOP_DIR/$EDARCS_LOCALREPO/_darcs" ]; then
+ mode=get
+ cd "$EDARCS_TOP_DIR"
+ else
+ mode=update
+ cd "$EDARCS_TOP_DIR/$EDARCS_LOCALREPO"
+ fi
+
+ # commands to run
+ local cmdget="${EDARCS_DARCS_CMD} ${EDARCS_GET_CMD} --repo-name=${EDARCS_LOCALREPO} ${EDARCS_REPOSITORY}"
+ local cmdupdate="${EDARCS_DARCS_CMD} ${EDARCS_UPDATE_CMD} --all ${EDARCS_REPOSITORY}"
+
+ if [ "${mode}" == "get" ]; then
+ einfo "Running $cmdget"
+ eval $cmdget || die "darcs get command failed"
+ elif [ "${mode}" == "update" ]; then
+ einfo "Running $cmdupdate"
+ eval $cmdupdate || die "darcs update command failed"
+ fi
+
+}
+
+
+darcs_src_unpack() {
+
+ debug-print-function $FUNCNAME $*
+
+ debug-print "$FUNCNAME: init:
+ EDARCS_DARCS_CMD=$EDARCS_DARCS_CMD
+ EDARCS_GET_CMD=$EDARCS_GET_CMD
+ EDARCS_UPDATE_CMD=$EDARCS_UPDATE_CMD
+ EDARCS_TOP_DIR=$EDARCS_TOP_DIR
+ EDARCS_REPOSITORY=$EDARCS_REPOSITORY
+ EDARCS_LOCALREPO=$EDARCS_LOCALREPO
+ EDARCS_CLEAN=$EDARCS_CLEAN"
+
+ einfo "Fetching darcs repository $EDARCS_REPOSITORY into $EDARCS_TOP_DIR..."
+ darcs_fetch
+
+ einfo "Copying $EDARCS_LOCALREPO from $EDARCS_TOP_DIR..."
+ debug-print "Copying $EDARCS_LOCALREPO from $EDARCS_TOP_DIR..."
+
+ # probably redundant, but best to make sure
+ # Use ${WORKDIR}/${P} rather than ${S} so user can point ${S} to something inside.
+ mkdir -p "${WORKDIR}/${P}"
+
+ shopt -s dotglob # get any dotfiles too.
+ cp -Rf "$EDARCS_TOP_DIR/$EDARCS_LOCALREPO"/* "${WORKDIR}/${P}"
+
+ einfo "Darcs repository contents are now in ${WORKDIR}/${P}"
+
+}
+
+EXPORT_FUNCTIONS src_unpack