summaryrefslogtreecommitdiff
path: root/savelocaltweaks
blob: 74717658a4139b295f30c91d5364ccbb008500fb (plain)
  1. #!/bin/sh
  2. set -e
  3. targetdir=/tmp/localtweaks
  4. origfiles="`cd /etc && find . -name '*.orig'`"
  5. oldfiles="`cd /etc && find . -name '*.old'`"
  6. includes=""
  7. excludes=""
  8. if [ -d /etc/local ]; then
  9. if [ -r /etc/local/localtweaks.include ]; then
  10. includes="`cat /etc/local/localtweaks.include`"
  11. fi
  12. if [ -r /etc/local/localtweaks.exclude ]; then
  13. excludes="`cat /etc/local/localtweaks.exclude`"
  14. fi
  15. fi
  16. files="$origfiles $oldfiles $includes"
  17. # process all *.{orig,old} once each
  18. for file in `for x in $files; do echo $x; done | uniq | sort`; do
  19. olddir="/etc/`dirname $file`"
  20. newdir="$targetdir/`dirname $file`"
  21. oldname="`basename $file`"
  22. newname="`basename $file .orig`"
  23. for exclude in $excludes; do
  24. [ "$newname" = "$exclude" ] && continue 2
  25. done
  26. if [ ! -e $olddir/$newname.orig ]; then
  27. newname="`basename $file .old`"
  28. fi
  29. if [ "$oldname" = "$newname" ]; then
  30. echo "FATAL: file is neither .orig nor .old: \"$file\"!"
  31. exit 1
  32. fi
  33. if [ ! -e $olddir/$oldname ]; then
  34. echo "FATAL: file found disappeared again: \"$file\"!"
  35. exit 1
  36. fi
  37. mkdir -p $newdir
  38. cp -af $olddir/$newname $newdir
  39. # Only diff against non-empty files.
  40. if [ -s $olddir/$oldname ]; then
  41. diff -ruN $olddir/$oldname $olddir/$newname > $newdir/$newname.diff
  42. chown --reference=$olddir/$newname $newdir/$newname.diff
  43. chmod --reference=$olddir/$newname $newdir/$newname.diff
  44. chmod a-x $newdir/$newname.diff
  45. fi
  46. done