Last active
October 23, 2016 12:36
-
-
Save emkael/364f701a5342978e6e79c2368b905565 to your computer and use it in GitHub Desktop.
etckeeper-detailed-post-install.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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