X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=examples%2Fgrok-pull.post_update_hook.sh;h=77489472123192ca1df6522e6a1bbaa8fe6845b5;hb=21fcd8a37c82c1ef654d402cf592f0c9d803aa26;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..77489472 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 @@ -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