summaryrefslogtreecommitdiff
path: root/pre-commit.d/20store-empty-directory
diff options
context:
space:
mode:
Diffstat (limited to 'pre-commit.d/20store-empty-directory')
-rwxr-xr-xpre-commit.d/20store-empty-directory27
1 files changed, 27 insertions, 0 deletions
diff --git a/pre-commit.d/20store-empty-directory b/pre-commit.d/20store-empty-directory
new file mode 100755
index 0000000..0cab9df
--- /dev/null
+++ b/pre-commit.d/20store-empty-directory
@@ -0,0 +1,27 @@
+#!/bin/sh
+set -e
+
+# These version control systems do not track directories, so empty
+# directories must be stored specially.
+if [ "$VCS" = git ] || [ "$VCS" = hg ]; then
+ # Make sure the file is not readable by others, since it can leak
+ # information about contents of non-readable directories in /etc.
+ umask 077
+
+ if [ -e .etckeeper ]; then
+ egrep -v '^mkdir ' .etckeeper > .etckeeper.new || true
+ fi
+ find -type d -empty | grep -v /.git/ | grep -v /.hg/ | sort |
+ sed -e "s/^/mkdir -p '/" -e "s/\$/'/" >> .etckeeper.new
+
+ if [ ! -e .etckeeper ] || ! cmp -s .etckeeper .etckeeper.new ; then
+ mv -f .etckeeper.new .etckeeper
+ if [ "$VCS" = git ]; then
+ git add .etckeeper
+ elif [ "$VCS" = hg ]; then
+ hg add .etckeeper
+ fi
+ else
+ rm -f .etckeeper.new
+ fi
+fi