Never been to CodeSnippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world (or not, you can keep them private!)

Using a pre-commit script (written in python) (See related posts)

For some odd reason tortoise SVN loves to commit empty commit sets. So I managed to get the following pre-commit script working under FreeBSD, seeing that the pre-commit.tmpl does not work as expected.

#!/usr/local/bin/python
"""
Subversion pre-commit hook which currently checks that the commit contains
a commit message to avoid commiting empty changesets which tortoisesvn seems
to have a habbit of committing.

Based on http://svn.collab.net/repos/svn/branches/1.2.x/contrib/hook-scripts/commit-block-joke.py
and hooks/pre-commit.tmpl

Hacked together by Jacques Marneweck <jacques@php.net>

$Id$
"""

import sys, os, string

SVNLOOK='/usr/local/bin/svnlook'

def main(repos, txn):
    log_cmd = '%s log -t "%s" "%s"' % (SVNLOOK, txn, repos)
    log_msg = os.popen(log_cmd, 'r').readline().rstrip('\n')

    if len(log_msg) < 10:
        sys.stderr.write ("Please enter a commit message which details what has changed during this commit.\n")
        sys.exit(1)
    else:
        sys.exit(0)

if __name__ == '__main__':
    if len(sys.argv) < 3:
        sys.stderr.write("Usage: %s REPOS TXN\n" % (sys.argv[0]))
    else:
        main(sys.argv[1], sys.argv[2])

Comments on this post

gujaru posts on Jul 22, 2009 at 00:54
This does not work on windows :(.
log_msg is always empty.

pre-commit.bat
python D:/TestProject/repository/hooks/pre-commit.py %1 %2

pre-commit.py
import sys, os, string
import logging

LOG_FILENAME = 'd:/temp/logging_example.out'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG,)

SVNLOOK='c:/progra~1/collab~1/svnlook.exe'

def main(repos, txn):
 log_cmd = '%s log -t "%s" "%s"' % (SVNLOOK, txn, repos)
 log_msg = os.popen(log_cmd, 'r').readline().rstrip('\n')
 logging.debug('log_msg=%s' % (log_msg))
 logging.debug( 'log_cmd = %s' % (log_cmd))
 if len(log_msg) < 10:
  sys.stderr.write ("Please enter a commit message which details what has changed during this commit.\n")
  sys.exit(1)
 else:
  sys.exit(0)

if __name__ == '__main__':
 if len(sys.argv) < 3:
  sys.stderr.write("Usage: %s REPOS TXN\n" % (sys.argv[0]))
 else:
  main(sys.argv[1], sys.argv[2]) 
Lang posts on May 25, 2011 at 12:10
I ran this as well under windows and I found the glitch.
In Windows, the txn and repos need to be switched.
You can see this is you print out the repos, txn, and log_msg values as part of your error message.
log_msg will be blank.
then take the values printed out, and try running the SVNLOOK command from the cmd windows.
With txn first, you'll see the error message.

Hope this helps.


You need to create an account or log in to post comments to this site.


Related Posts