From 0631fb5c447f71751f36c67f697e53556d070bdd Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Fri, 8 Jul 2016 23:19:36 -0400 Subject: this should improve so many things - set permissions correctly on directories (correctness) - get the cached file for the correct architecture (correctness) - only open each cached package file only once (speed) - only run pacman twice (instead of n+1 times). - don't ask pacman to make a list of all known files (speed) * this may be partially negated by running `pacman -Qi` --- pristine-etc-keeper | 22 ++++++++++++---------- 1 file 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 -- cgit v1.2.3