From ad930168edf31d64d3e2af1b52becc5662c4f140 Mon Sep 17 00:00:00 2001 From: Mattia Rizzolo Date: Wed, 25 Nov 2015 23:00:15 +0000 Subject: 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 --- pbuilder-modules | 73 +++++++++++++++++++++++++++++++++++- pbuilder-runhooks | 109 +++--------------------------------------------------- 2 files changed, 78 insertions(+), 104 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 < -# $HOOKDIR is set in /etc/pbuilderrc and contains a list of executable -# programs or scripts. The type is only limited by what you expect will -# be available in your chrooted environment after debootstrap has done -# an initial install. The functions must be named in the format: -# . Currently only X is defined; -# scripts prefixed with X will be run just before the chroot environment -# is exited and the base.tgz file is created or updated. +# This file was merged with pbuilder-modules. +# 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. -# $BUILDPLACE is as used in pbuilder. When already inside chroot, this -# routine can be called with $BUILDPLACE='' (from pdebuild-internal) - -# TODO: * Are there any other executable backup types we should -# filtered besides *~ and *.bak? -# -#========================================================================== - -hooks=tmp/hooks - -#========================================================================== -# Set up fresh chroot'd hooks tmp script directory -# - -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 -} - -#-------------------------------------------------------------------------- -# Tidy up after ourselves. (Anything we leave behind ends up in base.tgz) -# - -function unloadhooks () { - if [ -z "$HOOKDIR" ]; then - return ; - fi - rm -rf "$BUILDPLACE/$hooks" -} - -#-------------------------------------------------------------------------- -# Execute every script found in the chroot'd target directory. We only -# test for whether a file is executable because we have no idea what -# the user had put in their dist. If they want PL/1 and ADA on the base -# dist or have decided to use emacslisp for everything, it's their -# problem. -# -# Args: Required prefix on hook fn name -# Returns: none -# - -function executehooks () { - 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 -} - -#-------------------------------------------------------------------------- +. "${BASH_SOURCE%/*}/pbuilder-modules" -- cgit v1.2.3