Anthony Towns wrote: > I was more meaning it as an optimisation so you could ignore "key > add 0x7172daed" if there was a "key delete 0x7172daed" changeset > later. Likewise a "uid add" followed by a "uid del" or whatever.
Ah, sure, as an optimisation it could be useful. However, I think that letting the keyring build tool operate in incremental mode during maintenance sessions (with one noninremental build at the end if desired) will make it fast enough. > How would you convert "gpg --refresh-keys" into changeset based > operations, I wonder? Maybe you could do it by something like: > cp real-keyring.gpg tmpkeys.gpg > gpg --keyring tmpkeys.gpg --refresh-keys > for x in $(changed-keys); do > ( > echo "Changed-By: me" > echo "Comment: new signatures/uids for key $x" > echo "Action: import --keyserver-options merge-only" > echo "Data:" > gpg --keyring tmpkeys.gpg --ascii --armour --export "$x" | sed -e 's/^/ > /' > ) > changeset-refresh-$x > done > rm tmpkeys.gpg > echo "Now you just have to apply changeset-refresh-* to real-keyring.gpg > :)" That's beautiful, if we can figure out what "changed-keys" is. :-) BTW, I have a keyring-explode script that does similar for converting an existing monlithic keyring into changesets. (attached) -- see shy jo
#!/bin/sh
# Converts a keyring into a bunch of changesets, one per key.
# Only intended to be used for initial import of keyring.
set -e
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Usage: keyring-expode keyring changesetdir" >&2
exit 1
fi
keyring=$(readlink -f "$1") # gpg works better with absolute keyring paths
changesetdir="$2"
basename=$(basename "$keyring")
mkdir -p "$changesetdir"
touch "$changesetdir/index"
for key in $(gpg --no-default-keyring --keyring "$keyring" --list-keys|grep
'^pub' | sed -e 's!.*/!!' -e 's/ .*//'); do
out="$changesetdir/add-$key"
echo "$out"
echo "Comment: extracted from $basename by keyring-explode" > "$out"
echo "Action: import" >> "$out"
echo "Data:" >> "$out"
gpg --no-auto-check-trustdb --keyring "$keyring" -a --export "$key" |
sed 's/^/ /' >> "$out"
echo "$(md5sum "$out" | cut -d " " -f 1) add-$key" >>
"$changesetdir/index"
done
signature.asc
Description: Digital signature

