blob: 3ce2bd0806ddf82c62809559df90cd842e6bf604 (
plain)
- #!/bin/sh
- set -e
- basedir="/etc"
- targetdir="$(mktemp -td localtweaks.XXXXXX)"
- includefile="/etc/local/localtweaks.include"
- excludefile="/etc/local/localtweaks.exclude"
- extensions=".orig .old"
- for ext in $extensions; do
- extfiles="$(find $basedir -name "*$ext")"
- for extfile in $extfiles; do
- xextfile="${extfile%$ext}"
- files="$files ${xextfile#$basedir}"
- done
- done
- includes=""
- if [ -d "$(dirname "$includefile")" ] && [ -r "$includefile" ]; then
- includes="$(cat "$includefile")"
- for include in $includes; do
- files="$files ${include#$basedir}"
- done
- fi
- excludes=""
- if [ -d "$(dirname "$excludefile")" ] && [ -r "$excludefile" ]; then
- xexcludes="$(cat "$excludefile")"
- for exclude in $xexcludes; do
- excludes="$excludes ${exclude#$basedir}"
- done
- fi
- # process all files once each
- files="$(for x in $files; do echo "$x"; done | uniq | sort)"
- for file in $files; do
- # file were chosen based on backups - it may not exist itelf
- [ -s "$basedir/$file" ] || continue
- for exclude in $excludes; do
- [ "$file" = "$exclude" ] && continue 2
- done
- ext=""
- for xext in $extensions; do
- if [ -e $basedir/$file$xext ]; then
- ext="$xext"
- continue
- fi
- done
- newdir="$targetdir/$basedir/$(dirname "$file")"
- mkdir -p "$newdir"
- cp -af "$basedir/$file" "$newdir"
- # Only diff against existing and non-empty files.
- if [ -n "$ext" ] && [ -s "$basedir/$file$ext" ]; then
- diff -ruN "$basedir/$file$ext" "$basedir/$file" > "$targetdir/$basedir/$file.diff" || [ $? -lt 2 ]
- chown --reference="$basedir/$file" "$targetdir/$basedir/$file.diff"
- chmod --reference="$basedir/$file" "$targetdir/$basedir/$file.diff"
- chmod a-x "$targetdir/$basedir/$file.diff"
- fi
- done
|