X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=examples%2Fgrok-pull.post_update_hook.sh;h=4d303c0326abc6ebfc3bd2863cf3678a6cad9e0d;hb=HEAD;hp=1f51140ffbd139b57d41065e619a4115173ee841;hpb=064811ca0fa11586159d0049476e64b70f7e34d1;p=public-inbox.git diff --git a/examples/grok-pull.post_update_hook.sh b/examples/grok-pull.post_update_hook.sh index 1f51140f..4d303c03 100755 --- a/examples/grok-pull.post_update_hook.sh +++ b/examples/grok-pull.post_update_hook.sh @@ -25,11 +25,13 @@ then inbox_dir=$(expr "$full_git_dir" : "$EPOCH2MAIN") inbox_name=$(basename "$inbox_dir") msgmap="$inbox_dir"/msgmap.sqlite3 + inbox_lock="$inbox_dir"/inbox.lock else inbox_fmt=1 inbox_dir="$full_git_dir" inbox_name=$(basename "$inbox_dir" .git) msgmap="$inbox_dir"/public-inbox/msgmap.sqlite3 + inbox_lock="$inbox_dir"/ssoma.lock fi # run public-inbox-init iff unconfigured @@ -109,7 +111,7 @@ case $cfg_dir in "publicinbox.$inbox_name.infourl" "$url" done curl -sSfv "$remote_inbox_url"/description >"$inbox_dir"/description - echo "I: $inbox_name at $inbox_dir ($addresses) $local_url" + echo "# $inbox_name at $inbox_dir ($addresses) $local_url" ;; esac @@ -118,7 +120,18 @@ esac # don't know what indexlevel a user wants if test -f "$msgmap" then - n=$(echo 'SELECT COUNT(*) FROM msgmap' | sqlite3 -readonly "$msgmap") + # We need to use flock(1) (from util-linux) to avoid timeouts + # and SQLite locking problems. + # FreeBSD has a similar lockf(1) utility, but it unlinks by + # default so we use `-k' to keep the lock on the FS. + FLOCK=flock + case $(uname -s) in + FreeBSD) FLOCK='lockf -k' ;; + # ... other OSes here + esac + + n=$(echo 'SELECT COUNT(*) FROM msgmap' | \ + $FLOCK $inbox_lock sqlite3 -readonly "$msgmap") case $n in 0|'') : v2 inboxes may be init-ed with an empty msgmap