diff options
author | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-07-08 23:19:36 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-07-08 23:19:36 -0400 |
commit | 0631fb5c447f71751f36c67f697e53556d070bdd (patch) | |
tree | 70817195e21dfd8fea6bee83ec1e1cbe57710534 | |
parent | 086ef1fe7aadfa68d637a9d481c180b474221afc (diff) |
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`
-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 |