diff options
-rwxr-xr-x | pristine-etc-keeper | 22 |
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 |