You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.3 KiB
Bash

#!/bin/sh
set -e
filter_ignore() {
if [ "$VCS" = darcs ]; then
ignorefile=.darcsignore
fi
if [ "$VCS" = darcs ] && [ -e "$ignorefile" ]; then
# Spaces embedded into patterns would break it.
# But really, why would anyone want to use ' ' instead of '\s' ?
#patterns=$( grep -v '^[[:space:]]*\(#\|$\)' "$ignorefile" | xargs -n 1 printf " -e %s" )
#grep -Ev $patterns
#unset patterns
# Alternative using a temp file
patternsfile="$( mktemp -t etckeeper-$VCS.XXXXXXXXXX )"
grep -v '^[[:space:]]*\(#\|$\)' "$ignorefile" > "$patternsfile" || true
grep -Evf "$patternsfile"
rm -f "$patternsfile"
unset patternsfile
else
cat -
fi
}
if [ "$VCS" = darcs ];then
NOVCS='. -path ./.git -prune -o -path ./.bzr -prune -o -path ./.hg -prune -o -path ./_darcs -prune -o'
# We assume that if .etckeeper is empty this is the first run
if [ -s .etckeeper ]; then
linksindex="$( mktemp -t etckeeper-$VCS.XXXXXXXXXX )"
grep '^ln -s' .etckeeper | while IFS="'" read n n n link n; do
printf "%s\n" "$link" >> "$linksindex"
done
# Warn about symbolic links that shouldn't exist
if links=$( find $NOVCS -type l -print | filter_ignore | grep -vFf "$linksindex" ); then
printf "%s\n%s\n" \
"The following symbolic links should not exist:" \
"$links" >&2
fi
rm -f "$linksindex"
unset links linksindex
fi
fi