#!/bin/sh # # Update the master source trees that are used by package builds # and other consumers pbc=${PORTBUILD_CHECKOUT:-/a/portbuild} . ${pbc}/admin/conf/admin.conf . ${pbc}/conf/server.conf base=${ZFS_MOUNTPOINT}/${SNAP_DIRECTORY} zbase=${ZFS_VOLUME}/${SNAP_DIRECTORY} base_prefix=${ZFS_MOUNTPOINT}/${SNAP_DIRECTORY}/${SRC_DIRECTORY_PREFIX} zbase_prefix=${ZFS_VOLUME}/${SNAP_DIRECTORY}/${SRC_DIRECTORY_PREFIX} VERBOSE=1 stamp() { fulldate=$1 date -j -f %+ "${fulldate}" +%Y%m%d%H%M%S } finish() { err=$1 end=$(date +%s) echo "Finished at $(date)" len=$((end-begin)) echo "Duration = $(date -j -f %s +%H:%M:%S ${len})" exit 1 } begin=$(date +%s) echo "Started at $(date)" uid=${PORTBUILD_USER} if [ ! -z "${PORTBUILD_GROUP}" ]; then gid=${PORTBUILD_GROUP} else gid=${uid} fi # create /a/snap if not already there if [ ! -d ${base} ]; then echo "creating new base directory using ${base}" zfs create ${zbase} || finish 1 chown -R ${uid}:${gid} ${base} chmod -R g+w ${base} fi for branch in $SRC_BRANCHES; do # create /a/snap/src- if not already there mountpoint=${base_prefix}${branch} if [ ! -d ${mountpoint} ]; then echo "creating new source branch using ${mountpoint}" zfs create ${zbase_prefix}${branch} || finish 1 chown -R ${uid}:${gid} ${mountpoint} chmod -R g+w ${mountpoint} fi # create /a/snap/src-/src if not already there if [ ! -d ${mountpoint}/src ]; then echo "creating new source branch subdirectory using ${mountpoint}/src" zfs create ${zbase_prefix}${branch}/src || finish 1 chown -R ${uid}:${gid} ${mountpoint}/src chmod -R g+w ${mountpoint}/src fi cd ${mountpoint} fulldate=$(date) # TODO: fix identation post-rework # example destination directory: /a/snap/src-7/src/ (tricky!) if [ ! -d ${mountpoint}/src ]; then mkdir ${mountpoint}/src || finish 1 fi if [ ! -d ${mountpoint}/src/${VCS_SUBDIR} ]; then eval subdir=\$SRC_BRANCH_${branch}_SUBDIR if [ $VERBOSE ]; then echo "${VCS_CHECKOUT_COMMAND} ${VCS_SRC_REPOSITORY}/${subdir} ${mountpoint}/src" fi ${VCS_CHECKOUT_COMMAND} ${VCS_SRC_REPOSITORY}/${subdir} ${mountpoint}/src || finish 1 else if [ $VERBOSE ]; then echo "${VCS_OVERWRITE_COMMAND} ${mountpoint}/src" fi ${VCS_OVERWRITE_COMMAND} ${mountpoint}/src || finish 1 fi # hack for zfs breakiness find . -group wheel | xargs chgrp ${gid} snapdate=$(stamp ${fulldate}) if [ $VERBOSE ]; then echo "zfs snapshot ${zbase_prefix}${branch}/src@${snapdate}" fi zfs snapshot ${zbase_prefix}${branch}/src@${snapdate} || finish 1 echo ${fulldate} > src/.updated done finish 0