blob: 12f997e1ed1297264b42cc7b2373c033c5b51e69 (
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
|
#!/bin/sh
set -e
pl="/var/cache/etckeeper/packagelist"
get_changes () {
if [ "$VCS" = git ]; then
git diff --stat | grep '|' | cut -d'|' -f1 | cut -b2-
git ls-files --exclude-standard --others
fi
if [ "$VCS" = hg ]; then
hg status --no-status
fi
if [ "$VCS" = bzr ]; then
bzr status -S | cut -b5-
fi
if [ "$VCS" = darcs ]; then
# ignore ' file -> file' lines for moved files
# trim ' -M +N rP' from change summary
darcs whatsnew --summary | grep -v '^ .* -> ' | cut -d' ' -f2- | sed 's/ [-+r][0-9]\+//g;s/^\.\///'
# lines beginning with 'a' show unversioned files
darcs whatsnew --look-for-adds --boring --summary | grep '^a' | cut -d' ' -f2- | sed 's/^\.\///'
fi
}
get_changed_packages () {
if [ "$LOWLEVEL_PACKAGE_MANAGER" = dpkg ]; then
get_changes | sed 's/^/\/etc\//;s/\s*$//' | xargs -d '\n' dpkg 2>/dev/null -S | cut -d':' -f1 | sed 's/, /\n/g'
fi
if [ "$LOWLEVEL_PACKAGE_MANAGER" = rpm ]; then
# if output contains file path, file was not found
get_changes | sed 's/^/\/etc\//;s/\s*$//' | xargs -d '\n' rpm --qf '%{NAME}\n' -qf | grep -v "/etc/"
fi
# is it even possible to use pacmatic without pacman?
if [ "$LOWLEVEL_PACKAGE_MANAGER" = pacman -o "$LOWLEVEL_PACKAGE_MANAGER" = pacmatic ]; then
get_changes | sed 's/^/\/etc\//;s/\s*$//' | xargs -d '\n' pacman 2>/dev/null -Qo | rev | cut -d' ' -f1-2 | rev | cut -d' ' -f1
fi
if [ "$LOWLEVEL_PACKAGE_MANAGER" = pkgng ]; then
get_changes | sed 's/^/\/etc\//;s/\s*$//' | xargs -d '\n' pkg which --quiet | rev | cut -d'-' -f2- | rev
fi
}
if etckeeper unclean; then
message="committing changes in /etc after $HIGHLEVEL_PACKAGE_MANAGER run"
set +e
if [ -e $pl.pre-install ] && [ "$(cat $pl.fmt 2>/dev/null || true)" = "$(etckeeper list-installed fmt)" ]; then
(
echo "$message"
echo
get_changed_packages | sort | uniq > $pl.found-pkgs
if [ -s $pl.found-pkgs ]; then
sed -i 's/^/^[-+]/;s/$/ /' $pl.found-pkgs
etckeeper list-installed | diff -U0 $pl.pre-install - | tail -n+4 | egrep '^[-+]' | grep -f $pl.found-pkgs > $pl.found-packages
if [ -s $pl.found-packages ]; then
echo "Packages with configuration changes:"
cat $pl.found-packages || true
echo
fi
fi
echo "Package changes:"
etckeeper list-installed | diff -U0 $pl.pre-install - | tail -n+4 | egrep '^[-+]' || true
) | etckeeper commit --stdin
else
etckeeper commit "$(printf "$message")"
fi
status=$?
set -e
if [ "$status" != 0 ]; then
echo "warning: etckeeper failed to commit changes in /etc using $VCS" >&2
fi
fi
rm -f $pl.pre-install $pl.fmt
rm -f $pl.found-pkgs $pl.found-packages
|