aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/justfile
diff options
context:
space:
mode:
authorLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-04-21 01:24:35 +0100
committerLibravatar sommerfeld <sommerfeld@sommerfeld.dev>2026-04-21 01:24:35 +0100
commite24c62228c49766935f434192db0d1cb4fdde820 (patch)
tree162d1162db2eb6f21b024b4430e9d97c09d67c11 /justfile
parenta7eb25c7a4634418325256a8b368591e5b86ebeb (diff)
downloaddotfiles-e24c62228c49766935f434192db0d1cb4fdde820.tar.gz
dotfiles-e24c62228c49766935f434192db0d1cb4fdde820.tar.bz2
dotfiles-e24c62228c49766935f434192db0d1cb4fdde820.zip
fix(etc-restore): preserve mtime so pacman -Qkk sees file as unmodified
'bsdtar -xOf | doas tee' wrote pristine content but with mtime=now, which caused 'pacman -Qkk' (and therefore 'just etc') to still flag the file as drifted — pacman compares stored metadata, not content. Switch to 'doas bsdtar -xpf <archive> -C / <file>', which extracts the single file in place with its original owner, mode, and mtime from the package archive.
Diffstat (limited to 'justfile')
-rw-r--r--justfile4
1 files changed, 3 insertions, 1 deletions
diff --git a/justfile b/justfile
index f8205ff..e7c9912 100644
--- a/justfile
+++ b/justfile
@@ -479,7 +479,9 @@ etc-restore +paths:
[ -n "$cache" ] || { echo "error: no cache for ${pkg}-${ver}; mirror may have moved past installed version" >&2; exit 1; }
bsdtar -tf "$cache" "${live#/}" >/dev/null 2>&1 \
|| { echo "error: $live not present in $pkg archive" >&2; exit 1; }
- bsdtar -xOf "$cache" "${live#/}" | doas tee "$live" >/dev/null
+ # Extract with -p to preserve owner/mode/mtime so pacman -Qkk sees the
+ # file as unmodified (same metadata as install time, not just same bytes).
+ doas bsdtar -xpf "$cache" -C / "${live#/}"
echo "restored (from $pkg): $live"
done