I recently solved this by a solution inspired by http://www.noah.org/engineering/olden/svn_directory_lock.html
The particular python script in that post is overkill, but I put the following in the pre-commit hook for my repsoitory:
#!/bin/sh
err() { echo ${1+"$@"} 1>&2; } # stderr is sent to user
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
# Make sure there is a log message.
#
$SVNLOOK log -t "$TXN" "$REPOS" | grep -q "[a-zA-Z0-9]"
if [ $? -eq 1 ]
then
err "ERROR: Must enter a log message for this commit!"
exit 1
fi
# Usage: locked_dir dir [transaction_id]
locked_dir()
{
if [ -z "$2" ]; then _tid=""; else _tid="-t $2"; fi
$SVNLOOK propget $_tid "$REPOS" lock "$1" >/dev/null 2>&1
if [ $? -eq 0 ]; then echo true; else echo false; fi
}
for d in $($SVNLOOK dirs-changed -t "$TXN" "$REPOS")
do
locked_before=$(locked_dir $d)
locked_tx=$(locked_dir $d "$TXN")
if [ $locked_before = $locked_tx -a $locked_tx = true ]
then
err "ERROR: Directory $d is locked. Delete lock before you commit."
exit 1
fi
done
# All checks passed, so allow the commit.
exit 0
So now, you can simply use the "svn propset" and commit to create a "lock" property for a directory that you want to lock.