summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2016-07-08 23:19:36 -0400
committerLuke Shumaker <lukeshu@sbcglobal.net>2016-07-08 23:19:36 -0400
commit0631fb5c447f71751f36c67f697e53556d070bdd (patch)
tree70817195e21dfd8fea6bee83ec1e1cbe57710534
parent086ef1fe7aadfa68d637a9d481c180b474221afc (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-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