#!/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
