summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog7
-rwxr-xr-xinit.d/20restore-etckeeper11
-rwxr-xr-xpre-commit.d/30store-metadata15
3 files changed, 27 insertions, 6 deletions
diff --git a/debian/changelog b/debian/changelog
index d287277..dd522bd 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+etckeeper (0.24) UNRELEASED; urgency=low
+
+ * Make .etckeeper test that files actually exist
+ before acting on them. Closes: #509888
+
+ -- Joey Hess <joeyh@debian.org> Sat, 27 Dec 2008 14:27:43 -0500
+
etckeeper (0.23) unstable; urgency=low
* Fix hook scripts to use new etckeeper path. Closes: #509742
diff --git a/init.d/20restore-etckeeper b/init.d/20restore-etckeeper
index 984d521..69cbc3d 100755
--- a/init.d/20restore-etckeeper
+++ b/init.d/20restore-etckeeper
@@ -1,6 +1,17 @@
#!/bin/sh
set -e
+# Used by .etckeeper to run a command if the file it acts on
+# (the last parameter) exists.
+maybe () {
+ command="$1"
+ shift 1
+
+ if [ -e "$(eval echo \$$#)" ]; then
+ "$command" "$@"
+ fi
+}
+
# Yes, this runs code from the repository. As documented, etckeeper-init
# should only be run on repositories you trust.
if [ -e .etckeeper ]; then
diff --git a/pre-commit.d/30store-metadata b/pre-commit.d/30store-metadata
index 243e019..5d3496c 100755
--- a/pre-commit.d/30store-metadata
+++ b/pre-commit.d/30store-metadata
@@ -18,6 +18,9 @@ generate_metadata() {
# This function generates the script commands to fix any files
# that aren't owner=root, group=root, or mode=0644 or 0755.
# The script is produced on stdout. Errors go to stderr.
+ #
+ # The script can use a 'maybe' function, which only runs a command
+ # if the file in its last argument exists.
# We maintain the permissions on the directory containing VCS data
# but we want find to ignore the VCS files themselves.
@@ -35,20 +38,20 @@ generate_metadata() {
fi
# Find all files and directories that don't have root as the owner
- find $NOVCS \! -user root -exec stat --format="chown %U '{}'" {} \; \
- | sort | filter_unknown chown owner
+ find $NOVCS \! -user root -exec stat --format="maybe chown %U '{}'" {} \; \
+ | sort | filter_unknown maybe chown owner
# Find all files and directories that don't have root as the group
- find $NOVCS \! -group root -exec stat --format="chgrp %G '{}'" {} \; \
- | sort | filter_unknown chgrp group
+ find $NOVCS \! -group root -exec stat --format="maybe chgrp %G '{}'" {} \; \
+ | sort | filter_unknown maybe chgrp group
# Find all directories that aren't 0755
find $NOVCS -type d \! -perm 0755 \
- -exec stat --format="chmod %a '{}'" {} \; | sort
+ -exec stat --format="maybe chmod %a '{}'" {} \; | sort
# Find all files that aren't 0644 or 0755 (we can assume the VCS will
# maintain the executable bit).
find $NOVCS -type f \! -perm 0644 \! -perm 0755 \
- -exec stat --format="chmod %a '{}'" {} \; | sort
+ -exec stat --format="maybe chmod %a '{}'" {} \; | sort
# We don't handle xattrs.
# Maybe check for getfattr/setfattr and use them if they're available?