summaryrefslogtreecommitdiff
path: root/savelocaltweaks
blob: 7f2c84dfa2ffecc184f1cbd0171cc42542daaf67 (plain)
  1. #!/bin/sh
  2. #set -e
  3. basedir="/etc"
  4. targetdir="/tmp/localtweaks"
  5. for ext in .orig .old; do
  6. extfiles="`find $basedir -name \*$ext`"
  7. for extfile in $extfiles; do
  8. xextfile="${extfile%$ext}"
  9. files="$files ${xextfile#$basedir}"
  10. done
  11. done
  12. includes=""
  13. excludes=""
  14. if [ -d /etc/local ]; then
  15. if [ -r /etc/local/localtweaks.include ]; then
  16. includes="`cat /etc/local/localtweaks.include`"
  17. for include in $includes; do
  18. files="$files ${include#$basedir}"
  19. done
  20. fi
  21. if [ -r /etc/local/localtweaks.exclude ]; then
  22. xexcludes="`cat /etc/local/localtweaks.exclude`"
  23. for exclude in $xexcludes; do
  24. excludes="$excludes ${exclude#$basedir}"
  25. done
  26. fi
  27. fi
  28. # process all files once each
  29. for file in `for x in $files; do echo $x; done | uniq | sort`; do
  30. for exclude in $excludes; do
  31. [ "$file" = "$exclude" ] && continue 2
  32. done
  33. if [ -e $basedir/${file}.orig ]; then
  34. ext=".orig"
  35. elif [ -e $basedir/${file}.old ]; then
  36. ext=".old"
  37. else
  38. ext=""
  39. fi
  40. newdir="$targetdir/$basedir/`dirname $file`"
  41. mkdir -p $newdir
  42. cp -af $basedir/$file $newdir
  43. # Only diff against existing and non-empty files.
  44. if [ -n "$ext" ] && [ -s $basedir/$file$ext ]; then
  45. diff -ruN $basedir/$file$ext $basedir/$file > $targetdir/$basedir/$file.diff
  46. chown --reference=$basedir/$file $targetdir/$basedir/$file.diff
  47. chmod --reference=$basedir/$file $targetdir/$basedir/$file.diff
  48. chmod a-x $targetdir/$basedir/$file.diff
  49. fi
  50. done