summaryrefslogtreecommitdiff
path: root/addons/x11infoscreen/usr/local/bin/savelocaltweaks
diff options
context:
space:
mode:
Diffstat (limited to 'addons/x11infoscreen/usr/local/bin/savelocaltweaks')
-rwxr-xr-xaddons/x11infoscreen/usr/local/bin/savelocaltweaks61
1 files changed, 61 insertions, 0 deletions
diff --git a/addons/x11infoscreen/usr/local/bin/savelocaltweaks b/addons/x11infoscreen/usr/local/bin/savelocaltweaks
new file mode 100755
index 0000000..b303cda
--- /dev/null
+++ b/addons/x11infoscreen/usr/local/bin/savelocaltweaks
@@ -0,0 +1,61 @@
+#!/bin/sh
+
+#set -e
+
+basedir="/etc"
+targetdir="/tmp/localtweaks"
+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
+for file in `for x in $files; do echo $x; done | uniq | sort`; do
+
+ 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
+ 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