summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2014-09-04 13:53:42 -0400
committerJoey Hess <joey@kitenet.net>2014-09-04 13:53:42 -0400
commit1b70e83dddcafbcbea84fc55a6396e4876a9a0c4 (patch)
tree0332e952c763afe3a9f3bbab2e11b03fed7ded9d
parent0d7150577465bb7d5526d34a25a2e75dd6fc09e3 (diff)
Avoid propigating nonzero exit status of any command called by etckeeper out to the caller. This is to avoid making apt give up because git is misconfigured and cannot commit, or similar. Closes: #760011
I absoltely do not want etckeeper to dive into the rats nest of making git be able to commit reliably. git commit has about a dozen failure modes, and it's up to the admin to avoid breaking their system by not giving it a hostname, or writing a broken ~/.gitconfig, or not giving uid 0 a user name, etc. I considered making only apt.conf's etckeeper calls be guarded with || true, but this would also need to be done for the other package managers that can call etckeeper. And it's better to let etckeeper indicate which script failed, rather than seeing an error message and apt continuing without an indication of why git commit was being called then.
-rw-r--r--debian/changelog8
-rwxr-xr-xetckeeper5
-rw-r--r--etckeeper.84
3 files changed, 16 insertions, 1 deletions
diff --git a/debian/changelog b/debian/changelog
index 1575d89..ef5039b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+etckeeper (1.14) UNRELEASED; urgency=medium
+
+ * Avoid propigating nonzero exit status of any command called by etckeeper
+ out to the caller. This is to avoid making apt give up because git is
+ misconfigured and cannot commit, or similar. Closes: #760011
+
+ -- Joey Hess <joeyh@debian.org> Thu, 04 Sep 2014 13:49:26 -0400
+
etckeeper (1.13) unstable; urgency=medium
* Ignore check-mk-agent-logwatch's FHS violating
diff --git a/etckeeper b/etckeeper
index 554ada9..bfd1070 100755
--- a/etckeeper
+++ b/etckeeper
@@ -126,5 +126,8 @@ lsscripts() {
}
for script in $(lsscripts "$ETCKEEPER_CONF_DIR/$command.d"); do
- "$script" "$@"
+ if ! "$script" "$@"; then
+ echo "etckeeper failed running $script" >&1
+ exit 0
+ fi
done
diff --git a/etckeeper.8 b/etckeeper.8
index 62ae976..7ac077f 100644
--- a/etckeeper.8
+++ b/etckeeper.8
@@ -64,6 +64,10 @@ prompting.)
/etc/etckeeper also contains directories containing the programs that are
run for each of the above commands.
+.SH EXIT STATUS
+If the etckeeper command fails to run for some reason, etckeeper will show
+what failed, but still exit 0. This is to avoid breaking things like apt
+that call etckeeper.
.SH ENVIRONMENT VARIABLES
ETCKEEPER_CONF_DIR path to configuration directory instead of default /etc/etckeeper.
.SH SEE ALSO