POSIX sed doesn't support \+ in BREs which causes the regex that
extracts a file's current keys to return nothing, meaning that files
are unecessarily reencrypted.
This converts the regex in question to use ERE.
---
 src/password-store.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/password-store.sh b/src/password-store.sh
index a0dcf2e..e248a01 100755
--- a/src/password-store.sh
+++ b/src/password-store.sh
@@ -129,7 +129,7 @@ reencrypt_path() {
                        done
                        gpg_keys="$($GPG $PASSWORD_STORE_GPG_OPTS --list-keys 
--with-colons "${GPG_RECIPIENTS[@]}" | sed -n 
's/^sub:[^idr:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[a-zA-Z]*e[a-zA-Z]*:.*/\1/p'
 | LC_ALL=C sort -u)"
                fi
-               current_keys="$(LC_ALL=C $GPG $PASSWORD_STORE_GPG_OPTS -v 
--no-secmem-warning --no-permission-warning --decrypt --list-only 
--keyid-format long "$passfile" 2>&1 | sed -n 's/^gpg: public key is 
\([A-F0-9]\+\)$/\1/p' | LC_ALL=C sort -u)"
+               current_keys="$(LC_ALL=C $GPG $PASSWORD_STORE_GPG_OPTS -v 
--no-secmem-warning --no-permission-warning --decrypt --list-only 
--keyid-format long "$passfile" 2>&1 | sed -nE 's/^gpg: public key is 
([A-F0-9]+)$/\1/p' | LC_ALL=C sort -u)"
 
                if [[ $gpg_keys != "$current_keys" ]]; then
                        echo "$passfile_display: reencrypting to 
${gpg_keys//$'\n'/ }"
-- 
2.32.0

Reply via email to