#!/bin/sh -euf script=update-kernel set -euf # ----------------------------------------------------- # BASIC STUFF is_yes() { case ${1-} in [Yy][Ee][Ss]|[Yy]|[Tt][Rr][Uu][Ee]) return 0 ;; *) return 1 ;; esac } empty() { case ${@:+1} in '') return 0 ;; *) return 1 ;; esac } warn() { echo "$script: $@" >&2 } fail() { echo "$script: $@" >&2 exit 1 } # ------------------------------------------------------------ # Main action usage() { echo "usage: $script [-vn] [-s server] [-B branch]" >&2 exit 2 } supfile=/usr/src/cvsupfile-sys server="cvsup2.FreeBSD.org" version=`uname -r | sed -En 's/^([.0-9]+).*/\1/p'` branch="RELENG_`echo $version | tr '.' '_'`" csup="csup -L2" patch="patch" printf="printf" patches="YES" while getopts "B:ns:qv" arg; do case $arg in B) branch="$OPTARG" ;; n) patches="NO" ;; s) server="$OPTARG" ;; q) csup="csup -L0" printf="true" ;; v) ;; *) usage ;; esac done shift `expr $OPTIND - 1` if [ $# -ne 0 ]; then usage fi if empty $version; then fail "couldn't determine OS version" fi if empty $branch; then fail "couldn't determine cvsup branch" fi base=`dirname $0` base=`realpath $base` patchdir=$base/kernel-$version if [ ! -d $patchdir ]; then fail "patches directory does not exist: $patchdir" fi cat > $supfile << EOF *default host=$server *default base=/usr *default prefix=/usr *default release=cvs *default tag=$branch *default delete use-rel-suffix src-sys EOF # Only allow up to 10 files to be deleted $csup -d 10 $supfile if is_yes $patches; then # Allow globbing from here on out set +f cd $patchdir for file in *; do if [ -f "$file" ]; then printf "Applying $file\n" $patch -d /usr/src -p0 \ --forward --quiet --batch --fuzz=0 < $file fi done fi $printf "Done\n"