summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xpristine-etc-keeper22
1 files changed, 12 insertions, 10 deletions
diff --git a/pristine-etc-keeper b/pristine-etc-keeper
index 2a1d51f..9fee0f3 100755
--- a/pristine-etc-keeper
+++ b/pristine-etc-keeper
@@ -5,6 +5,14 @@
# TODO: better error handling
+pacman-etc-name-ver() {
+ LC_ALL=C pacman -Qo /etc | sed 's|^/etc/ is owned by ||'
+}
+
+pacman-all-name-arch() {
+ LC_ALL=C pacman -Qi | tr $'\n' $'\r' | sed 's/\r\r/\n/g' | sed -r 's|(.*\r)?Name\s*:\s*(\S+)(\r.*)?\rArchitecture\s*:\s*(\S+)\r.*|\2 \4|'
+}
+
commit() (
local msg="$1"
@@ -18,16 +26,10 @@ commit() (
rm -rf etc/
- pacman -Q | while read -r pkgname pkgver; do
- file=("/var/cache/pacman/pkg/$pkgname-$pkgver"-*.pkg.tar.*)
- pacman -Qlq "$pkgname"|grep ^/etc/|sed "s|^/|$file |"
- done | while read -r tarfile etcfile; do
- if [[ "$etcfile" = */ ]]; then
- mkdir -p "$etcfile"
- else
- bsdtar xpfv "$tarfile" "$etcfile"
- fi
- done
+ while IFS=' ' read -r pkgname pkgver arch; do
+ file=("/var/cache/pacman/pkg/$pkgname-$pkgver-$arch".pkg.tar.*)
+ bsdtar xpfv "$file" etc
+ done <(join <(pacman-etc-name-ver|sort) <(pacman-all-name-arch|sort))
touch etc/.gitignore
ln -sr etc.git etc/.git