forked from PKRoma/etckeeper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathetckeeper
executable file
·149 lines (129 loc) · 2.79 KB
/
etckeeper
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
140
141
142
143
144
145
146
147
148
149
#!/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.16"
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
if command -v perl >/dev/null; then
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
else
# fallback if perl isn't present
for script in $ETCKEEPER_CONF_DIR/$command.d/*; do
if [ ! -d "$script" -a -x "$script" ]; then
echo "$script" | egrep -q "/[-a-zA-Z0-9]+$"
[ $? -eq 0 ] && "$script" "$@"
fi
done
fi