#!/bin/sh set -e targetdir=/tmp/localtweaks origfiles="`cd /etc && find . -name '*.orig'`" oldfiles="`cd /etc && find . -name '*.old'`" includes="" excludes="" if [ -d /etc/local ]; then if [ -r /etc/local/localtweaks.include ]; then includes="`cat /etc/local/localtweaks.include`" fi if [ -r /etc/local/localtweaks.exclude ]; then excludes="`cat /etc/local/localtweaks.exclude`" fi fi files="$origfiles $oldfiles $includes" # process all *.{orig,old} once each for file in `for x in $files; do echo $x; done | uniq | sort`; do olddir="/etc/`dirname $file`" newdir="$targetdir/`dirname $file`" oldname="`basename $file`" newname="`basename $file .orig`" for exclude in $excludes; do [ "$newname" = "$exclude" ] && continue 2 done if [ ! -e $olddir/$newname.orig ]; then newname="`basename $file .old`" fi if [ "$oldname" = "$newname" ]; then echo "FATAL: file is neither .orig nor .old: \"$file\"!" exit 1 fi if [ ! -e $olddir/$oldname ]; then echo "FATAL: file found disappeared again: \"$file\"!" exit 1 fi mkdir -p $newdir cp -af $olddir/$newname $newdir # Only diff against non-empty files. if [ -s $olddir/$oldname ]; then diff -ruN $olddir/$oldname $olddir/$newname > $newdir/$newname.diff chown --reference=$olddir/$newname $newdir/$newname.diff chmod --reference=$olddir/$newname $newdir/$newname.diff chmod a-x $newdir/$newname.diff fi done