Sorry if this is a duplicate, I didn’t find the right answer still..
How do you lock a svn directory from command line? I need to lock a branch from checkins
Edit:
All of these answers I've found require the person to access the svn server. Thats not an option for me. I work in a company where the source control machine is literally locked in a vault. Gainning access to change auth rules is a process I can't work out ATM.
svn lock — Lock working copy paths or URLs in the repository so that no other user can commit changes to them.
How Locking Works in Subversion. By default, nothing is locked and anyone who has commit access can commit changes to any file at any time. Others will update their working copies periodically and changes in the repository will be merged with local changes.
Moving files and folders select the files or directories you want to move. right drag them to the new location inside the working copy. release the right mouse button. in the popup menu select Context Menu → SVN Move versioned files here.
You can't lock a directory. You can create authorization rules that will prohibit write access to directories. This is typically how this type of thing is done. You could also use a pre-commit hook but I think Subversion's authz is best. Here is a link:
http://svnbook.red-bean.com/nightly/en/svn.serverconfig.pathbasedauthz.html
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With