#!/bin/sh -e WORKING_COPY="/home/bschmidt/src/svn/freebsd/base/releng/8.1" STABLE_TREE="svn://svn.freebsd.org/base/stable/8" PATHES="sys/dev/iwi sys/net80211 sys/contrib/dev/iwi sys/modules/wlan sys/modules/wlan_acl sys/modules/wlan_amrr sys/modules/wlan_ccmp sys/modules/wlan_rssadapt sys/modules/wlan_tkip sys/modules/wlan_wep sys/modules/wlan_xauth sys/modules/iwi" PICKS="r209477 r210729" TARGET="$(dirname $0)/iwi_stable_8-$(date +%Y%m%d).patch" err() { echo $@ >&2 exit 1 } apply() { while [ "x$1" != "x" ]; do rev=$(echo $1 | tr 'r' 'c') echo "merging $1.." svn merge -$rev "${STABLE_TREE}" . >/dev/null shift done } cd "${WORKING_COPY}" echo "cleaning tree.. " svn revert -R . >/dev/null if [ "x$(svn stat .)" != "x" ]; then err "tree not clean" fi echo "updating tree.. " svn up --depth infinity . >/dev/null MERGE=$(mktemp /tmp/merge-candidates.XXXXXX) for pick in ${PICKS}; do echo $pick >> "${MERGE}" done for mpath in ${PATHES}; do echo "fetching merge candidates for $mpath.. " svn mergeinfo --show-revs=eligible \ "${STABLE_TREE}/${mpath}" "${mpath}" >> "${MERGE}" done MERGES=$(cat "${MERGE}" | sort -u) apply ${MERGES} rm "${MERGE}" echo "creating diff.. " FILES=$(svn stat | grep '^M' | awk '{ print $2 }') svn diff -x -up $FILES > "${TARGET}" FILES=$(svn stat | grep '^A' | awk '{ print $3 }') for file in ${FILES}; do diff -uNp /dev/null "${file}" >> "${TARGET}" done