Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
etckeeper-detailed-post-install.patch
diff --git a/post-install.d/50vcs-commit b/post-install.d/50vcs-commit
index 53138c8..f07ba52 100755
--- a/post-install.d/50vcs-commit
+++ b/post-install.d/50vcs-commit
@@ -3,6 +3,43 @@ set -e
pl="/var/cache/etckeeper/packagelist"
+get_changes () {
+ if [ "$VCS" = git ]; then
+ git diff --stat | grep '|' | cut -d'|' -f1 | cut -b2-
+ git ls-files --exclude-standard --others
+ fi
+ if [ "$VCS" = hg ]; then
+ hg status --no-status
+ fi
+ if [ "$VCS" = bzr ]; then
+ bzr status -S | cut -b5-
+ fi
+ if [ "$VCS" = darcs ]; then
+ # ignore ' file -> file' lines for moved files
+ # trim ' -M +N rP' from change summary
+ darcs whatsnew --summary | grep -v '^ .* -> ' | cut -d' ' -f2- | sed 's/ [-+r][0-9]\+//g;s/^\.\///'
+ # lines beginning with 'a' show unversioned files
+ darcs whatsnew --look-for-adds --boring --summary | grep '^a' | cut -d' ' -f2- | sed 's/^\.\///'
+ fi
+}
+
+get_changed_packages () {
+ if [ "$LOWLEVEL_PACKAGE_MANAGER" = dpkg ]; then
+ get_changes | sed 's/^/\/etc\//;s/\s*$//' | xargs -d '\n' dpkg 2>/dev/null -S | cut -d':' -f1 | sed 's/, /\n/g'
+ fi
+ if [ "$LOWLEVEL_PACKAGE_MANAGER" = rpm ]; then
+ # if output contains file path, file was not found
+ get_changes | sed 's/^/\/etc\//;s/\s*$//' | xargs -d '\n' rpm --qf '%{NAME}\n' -qf | grep -v "/etc/"
+ fi
+ # is it even possible to use pacmatic without pacman?
+ if [ "$LOWLEVEL_PACKAGE_MANAGER" = pacman -o "$LOWLEVEL_PACKAGE_MANAGER" = pacmatic ]; then
+ get_changes | sed 's/^/\/etc\//;s/\s*$//' | xargs -d '\n' pacman 2>/dev/null -Qo | rev | cut -d' ' -f1-2 | rev | cut -d' ' -f1
+ fi
+ if [ "$LOWLEVEL_PACKAGE_MANAGER" = pkgng ]; then
+ get_changes | sed 's/^/\/etc\//;s/\s*$//' | xargs -d '\n' pkg which --quiet | rev | cut -d'-' -f2- | rev
+ fi
+}
+
if etckeeper unclean; then
message="committing changes in /etc after $HIGHLEVEL_PACKAGE_MANAGER run"
@@ -11,6 +48,16 @@ if etckeeper unclean; then
(
echo "$message"
echo
+ get_changed_packages | sort | uniq > $pl.found-pkgs
+ if [ -s $pl.found-pkgs ]; then
+ sed -i 's/^/^[-+]/;s/$/ /' $pl.found-pkgs
+ etckeeper list-installed | diff -U0 $pl.pre-install - | tail -n+4 | egrep '^[-+]' | grep -f $pl.found-pkgs > $pl.found-packages
+ if [ -s $pl.found-packages ]; then
+ echo "Packages with configuration changes:"
+ cat $pl.found-packages || true
+ echo
+ fi
+ fi
echo "Package changes:"
etckeeper list-installed | diff -U0 $pl.pre-install - | tail -n+4 | egrep '^[-+]' || true
) | etckeeper commit --stdin
@@ -24,5 +71,6 @@ if etckeeper unclean; then
echo "warning: etckeeper failed to commit changes in /etc using $VCS" >&2
fi
fi
rm -f $pl.pre-install $pl.fmt
+rm -f $pl.found-pkgs $pl.found-packages
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment