summaryrefslogtreecommitdiff
path: root/init.d/60darcs-deleted-symlinks
blob: 9c34e95b750753901895d258df0930558ddc5b84 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/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