summaryrefslogtreecommitdiff
path: root/init.d/50vcs-ignore
blob: 1b6441a04a232ceebe620cd92a428d3c16750998 (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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/sh
set -e

if [ "$VCS" = git ] && [ ! -e .gitignore ]; then
	file=.gitignore
elif [ "$VCS" = hg ] && [ ! -e .hgignore ]; then
	file=.hgignore
elif [ "$VCS" = bzr ] && [ ! -e .bzrignore ]; then
	file=.bzrignore
elif [ "$VCS" = darcs ] && [ ! -e .darcsignore ]; then
	file=.darcsignore
fi

if [ -z "$file" ] || [ -e "$file" ]; then
	exit 0
fi

nl() {
	echo >>$file
}

comment() {
	comment="$1"
	echo "# $comment" >>$file
}

ignore() {
	glob="$1"
	
	case "$VCS" in
		git|bzr)
			echo "$glob" >> $file
		;;
		hg)
			# rather than converting the glob to a regexp, just
			# configure hg to use globs
			if [ -z "$hg_syntax_printed" ]; then
				comment "use glob syntax"
				echo "syntax: glob" >> $file
				nl
				hg_syntax_printed=1
			fi
			echo "$glob" >> $file
		;;
		darcs)
			# darcs doesn't understand globs, so we need to translate
			# them into regexs. Not a complete converter, but suitable
			# for given globs.
			if [ "${glob%\*}" != "$glob" ]; then
				glob="${glob%\*}"
			else
				glob="$glob"'($|/)'
			fi
			if [ "${glob#\*}" != "$glob" ]; then
				glob="${glob#\*}"
			else
				glob='(^|/)'"$glob"
			fi
			glob="$( printf %s $glob | sed -e 's/\./\\./g;s/\*/[^\/]*/g;' )"
			echo "$glob" >> $file
	esac
}

if [ "$VCS" = darcs ]; then
	darcs setpref boringfile .darcsignore
fi

if [ "$LOWLEVEL_PACKAGE_MANAGER" = dpkg ]; then
	comment "new and old versions of conffiles, stored by dpkg"
	ignore "*.dpkg-*"
	nl
elif [ "$LOWLEVEL_PACKAGE_MANAGER" = "rpm" ]; then
	comment "new and old versions of conffiles, stored by apt/rpm"
	ignore "*.rpm*"
	nl
elif [ "$LOWLEVEL_PACKAGE_MANAGER" = "pacman-g2" ]; then
	comment "new and old versions of conffiles, stored by pacman"
	ignore "*.pacnew"
	ignore "*.pacorig"
	ignore "*.pacsave"
	nl
fi

comment "mount(8) records system state here, no need to store these"
ignore blkid.tab
ignore blkid.tab.old
nl

comment "some other files in /etc that typically do not need to be tracked"
ignore nologin
ignore ld.so.cache
ignore mtab
ignore .pwd.lock
ignore network/run
ignore adjtime
ignore lvm/cache
nl

comment "editor backup files"
ignore "*~"
nl