summaryrefslogtreecommitdiff
path: root/etckeeper
blob: 12a012890d72b6a76bb2c2f247c51fd7b34c6621 (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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/bin/sh
set -e

if [ -z "$ETCKEEPER_CONF_DIR" ]; then
	ETCKEEPER_CONF_DIR=/etc/etckeeper
fi

conf="$ETCKEEPER_CONF_DIR/etckeeper.conf"

usage() {
	echo "usage: etckeeper command [-d directory]" >&2
	exit 1
}

if [ -e $conf ]; then
	. $conf
fi

if [ -n "$GIT_WORK_TREE" ]; then
	unset GIT_WORK_TREE
fi
if [ -n "$GIT_DIR" ]; then
	unset GIT_DIR
fi

program_directory="${0%/*}"
if [ -n "$program_directory" ]; then
	PATH="$PATH:$program_directory"
	export PATH
fi

if [ ! -z "$GIT_COMMIT_OPTIONS" ]; then
	export GIT_COMMIT_OPTIONS
fi
if [ ! -z "$HG_COMMIT_OPTIONS" ]; then
	export HG_COMMIT_OPTIONS
fi
if [ ! -z "$BZR_COMMIT_OPTIONS" ]; then
	export BZR_COMMIT_OPTIONS
fi
if [ ! -z "$DARCS_COMMIT_OPTIONS" ]; then
	export DARCS_COMMIT_OPTIONS
fi

if [ ! -z "$HIGHLEVEL_PACKAGE_MANAGER" ]; then
	export HIGHLEVEL_PACKAGE_MANAGER
fi
if [ ! -z "$LOWLEVEL_PACKAGE_MANAGER" ]; then
	export LOWLEVEL_PACKAGE_MANAGER
fi
if [ ! -z "$AVOID_COMMIT_BEFORE_INSTALL" ]; then
	export AVOID_COMMIT_BEFORE_INSTALL
fi
if [ ! -z "$AVOID_SPECIAL_FILE_WARNING" ]; then
	export AVOID_SPECIAL_FILE_WARNING
fi

if [ ! -z "$PUSH_REMOTE" ]; then
	export PUSH_REMOTE
fi

if [ -z "$HOME" ]; then
	HOME=~root
	export HOME
fi

if [ -z "$1" ]; then
	usage
elif [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ]; then
	man etckeeper || echo "Usage: etckeeper command [-d directory]" >&2
	exit 0
elif [ "x$1" = "x-v" ] || [ "x$1" = "x--version" ]; then
	# This is automatically updated by the Makefile.
        echo "Version: 1.18.5"
        exit 0
fi
command="$1"
shift 1

# compatability code
if [ "$command" = "post-apt" ]; then
	command=post-install
elif [ "$command" = "pre-apt" ]; then
	command=pre-install
fi

if echo "$command" | LANG=C egrep -q '[^-a-z_]'; then
	echo "etckeeper: invalid command $command" >&2
	exit 1
fi

if [ ! -d "$ETCKEEPER_CONF_DIR/$command.d" ]; then
	echo "etckeeper: $ETCKEEPER_CONF_DIR/$command.d does not exist" >&2
	exit 1
fi

if [ "x$1" = "x-d" ]; then
	if [ -n "$2" ]; then
		ETCKEEPER_DIR="$2"
		shift 2
	else
		usage
	fi
fi

if [ -z "$ETCKEEPER_DIR" ]; then
	ETCKEEPER_DIR=/etc
fi
cd "$ETCKEEPER_DIR"
export ETCKEEPER_DIR

if [ -d ".git" ]; then
	VCS=git
elif [ -d ".hg" ]; then
	VCS=hg
elif [ -d "_darcs" ]; then
	VCS=darcs
elif [ -d ".bzr" ]; then
	VCS=bzr
fi

if [ -z "$VCS" ]; then
	echo "Please configure a VCS in $conf" >&2
	exit 1
fi
export VCS

lsscripts() {
	LANG=C perl -e '
		$dir=shift;
		print join "\n", grep { ! -d $_ && -x $_ }
			grep /^\Q$dir\/\E[-a-zA-Z0-9]+$/,
			glob "$dir/*";
	' "$1"
}

for script in $(lsscripts "$ETCKEEPER_CONF_DIR/$command.d"); do
	"$script" "$@"
done