diff options
-rw-r--r-- | debian/changelog | 7 | ||||
-rwxr-xr-x | init.d/20restore-etckeeper | 11 | ||||
-rwxr-xr-x | pre-commit.d/30store-metadata | 15 |
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? |