On Wednesday 18 Aug 2010, Greg Alexander wrote:
> Hello,
>     I am a very new Subversion user and am trying to get a post commit hook
> script working. My Subversion is running on linux. The script I want to add
> would add the needs-lock property to every file that didn't have a lock.
> Any pointers on this would be great. I have searched and not found any
> good, working, examples on how to do this. Thanks,
>      Greg

Sorry for not answering your actual question but I feel that isn't the correct 
way to tackle the problem. Making changes to the repository during a 
post-commit means the committers working copy is instantly out of date and is 
not a recommended way to work as it can also lead to an infinite loop as the 
change it makes triggers the script again.

I think a better way to approach the problem would be to distribute an 
appropriate configuration file to the clients and implement a pre-commit hook 
to reject any commits without the properties. The config file on the client 
should have auto-props enabled (which is not the default) and have the needs 
lock added for all files. I've never tried adding a property on every file so 
I'm not sure what to put in for the pattern, would * work?

The area to look at in the subversion book is here, search for auto-props:
http://svnbook.red-bean.com/nightly/en/svn-book.html#svn.advanced.confarea.opts.config

oh, and I can help with the pre-commit hook. Hopefully this works but the 
logic around testing the property might not be correct. You can test it by 
calling it directly (make sure it is executable) with the path to the 
repository and a revision number so long as you change the -t $TXN to -r 
$TXN. You could also put an exit 1 at the end of the script and place it in a 
test repository until it works the way you want it to. The exit 1 at the end 
will refuse all commits and saves on having to keep creating test files :)

also I think the script can be cleaned up so their are only two svnlooks. I 
butchered my own pre-commit that is preventing commits of files in certain 
locations that didn't have the looped svnlook lookup.

#!/bin/sh

REPOS="$1"
TXN="$2"

SVNLOOK=/path/to/svnlook

# redirect all stdout to stderr, this is passed back to the subversion client
exec 1>&2

TMPFILE=/tmp/svn-pre-commit-$$.tmp

# pick out interesting files
$SVNLOOK changed -t "$TXN" "$REPOS" | \
  perl -n -e 'print "$1\n" if /^A.* +(.*)$/;' > $TMPFILE
exec 3<$TMPFILE

NOTIFIED=
while read -u 3 FILENAME ; do

    # check file
    PROPVALUE=$($SVNLOOK propget $REPOS -t $TXN svn:needs-lock $FILENAME 
2>/dev/null)
    if [ -z "$PROPVALUE" ]; then
      if [ -z "$NOTIFIED" ]; then
          echo 
          echo "Files need svn:needs-lock property set, use appropriate config 
file"
        echo 
        NOTIFIED="yes"
      fi
    fi

    echo "$FILENAME"
done

rm $TMPFILE

if [ ! -z "$NOTIFIED" ]; then
    exit 1
fi

# All checks passed, so allow the commit.
exit 0

-- 

__________________________________________________________________________________
Sword Ciboodle is the trading name of ciboodle Limited (a company 
registered in Scotland with registered number SC143434 and whose 
registered office is at India of Inchinnan, Renfrewshire, UK, 
PA4 9LH) which is part of the Sword Group of companies.

This email (and any attachments) is intended for the named
recipient(s) and is private and confidential. If it is not for you, 
please inform us and then delete it. If you are not the intended 
recipient(s), the use, disclosure, copying or distribution of any 
information contained within this email is prohibited. Messages to 
and from us may be monitored. If the content is not about the 
business of the Sword Group then the message is neither from nor 
sanctioned by us.

Internet communications are not secure. You should scan this
message and any attachments for viruses. Under no circumstances
do we accept liability for any loss or damage which may result from
your receipt of this email or any attachment.
__________________________________________________________________________________

Reply via email to