aboutsummaryrefslogtreecommitdiff
path: root/pbuilder-modules
diff options
context:
space:
mode:
authorMattia Rizzolo <mattia@mapreri.org>2015-11-25 23:00:15 +0000
committerMattia Rizzolo <mattia@mapreri.org>2015-11-25 23:58:17 +0000
commitad930168edf31d64d3e2af1b52becc5662c4f140 (patch)
tree1a8f6b29b60e4a3e5b299dd217491222028e3c01 /pbuilder-modules
parenta3aa1dd2177a0d349cfdf8cbc2642617e955143f (diff)
downloadpbuilder-ad930168edf31d64d3e2af1b52becc5662c4f140.tar
pbuilder-ad930168edf31d64d3e2af1b52becc5662c4f140.tar.gz
runhooks: move (un)loadhooks() and executehooks() to pbuilder-modules.
Merging the file means the hooks can use functions from the modules and viceversa safely; otherwise we would need both the scripts to source the other and this is not supported in bash. We can't delete it since it's referenced in pdebuild-internal, and since we can't assure the same pbuilder version outside and inside the chroot we have to be backward-compatible. Otherwise running an old pbuilder with a newer chroot would break badly. Thanks: Holger to notice this broke with the last release
Diffstat (limited to 'pbuilder-modules')
-rw-r--r--pbuilder-modules73
1 files changed, 72 insertions, 1 deletions
diff --git a/pbuilder-modules b/pbuilder-modules
index 6c2836f..88d38e5 100644
--- a/pbuilder-modules
+++ b/pbuilder-modules
@@ -17,7 +17,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-. "${BASH_SOURCE%/*}/pbuilder-runhooks"
+hooks=tmp/hooks
function showhelp () {
cat <<EOF
@@ -690,6 +690,77 @@ function add_additional_aptkeyrings() {
}
+#==========================================================================
+# hooks stuff
+
+function loadhooks () {
+ if [ -z "$HOOKDIR" ]; then
+ return ;
+ fi
+ if [ -d "$BUILDPLACE/$hooks" ]; then
+ rm -rf "$BUILDPLACE/$hooks"
+ fi
+ if [ -d "$HOOKDIR" ]; then
+ mkdir -p "$BUILDPLACE/$hooks"
+ if ! cp -aL "$HOOKDIR/"* "$BUILDPLACE/$hooks"; then
+ log.w "no hooks found in the hookdir '$HOOKDIR'"
+ fi
+ else
+ log.w "hookdir $HOOKDIR does not exist, skipping"
+ fi
+}
+
+function unloadhooks () {
+ if [ -z "$HOOKDIR" ]; then
+ return ;
+ fi
+ rm -rf "$BUILDPLACE/$hooks"
+}
+
+function executehooks () {
+ # Execute every script found in the chroot'd target directory.
+ # We only test whether a file is executable since we have no idea what
+ # the user had put in their chroots. If they want PL/1 and ADA on the
+ # chroot or they have decided to use emacslisp for everything, it's their
+ # problem.
+ local prefix="$1"
+ if [ -z "$HOOKDIR" ]; then
+ return
+ fi
+ for fn in "$BUILDPLACE/$hooks/$prefix"[0-9][0-9]* ; do
+ case "$fn" in
+ "$BUILDPLACE/$hooks/$prefix"'[0-9][0-9]*')
+ log.w "no hooks of type ${prefix} found -- ignoring"
+ ;;
+ *~)
+ log.w "skipping an editor backup file $fn"
+ ;;
+ *.bak)
+ log.w "skipping a backup file $fn"
+ ;;
+ *)
+ if [ -x "$fn" ]; then
+ log.i "user script $fn starting"
+ BUILDDIR="$BUILDDIR" \
+ $CHROOTEXEC "/$hooks/$(basename "$fn")"
+ log.i "user script $fn finished"
+ else
+ if [ -f "$fn" ]; then
+ filetype=$(basename "$fn" )
+ log.w "execute priv not set on file $filetype, not executing."
+ else
+ # Should it reach here ? This case should be caught in the above case.
+ log.w "no hooks of type ${prefix} found -- internal error in logic"
+ fi
+ fi
+ ;;
+ esac
+ done
+}
+
+#==========================================================================
+
+
#Setting environmental variables that are really required:
#required for some packages to install...
export LANG=C