Skip to content

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
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.