How can I prevent Subversion commits without comments?

39,052

Solution 1

You can use a hook (put it into <repository>/hooks and name it pre-commit.bat (Windows)):

@echo off
::
:: Stops commits that have empty log messages.
::

setlocal

rem Subversion sends through the path to the repository and transaction id
set REPOS=%1
set TXN=%2

rem check for an empty log message
svnlook log %REPOS% -t %TXN% | findstr . > nul
if %errorlevel% gtr 0 (goto err) else exit 0

:err
echo. 1>&2
echo Your commit has been blocked because you didn't give any log message 1>&2
echo Please write a log message describing the purpose of your changes and 1>&2
echo then try committing again. -- Thank you 1>&2
exit 1

src: http://www.anujgakhar.com/2008/02/14/how-to-force-comments-on-svn-commit/

Solution 2

Here is a pre-commit hook with @miku's detailed error message for Linux:

#!/bin/sh

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

SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
   grep "[a-zA-Z0-9]" > /dev/null

GREP_STATUS=$?
if [ $GREP_STATUS -ne 0 ]
then
    echo "Your commit has been blocked because you didn't give any log message" 1>&2
    echo "Please write a log message describing the purpose of your changes and" 1>&2
    echo "then try committing again. -- Thank you" 1>&2
    exit 1
fi
exit 0

Solution 3

Actually, when you create a Subversion repository, its hooks subdirectory already contains hook samples. Check out the one called pre-commit.tmpl for details on the hook's parameters. It also contains an example for a hook that you're looking for:

#!/bin/sh
REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/local/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
   grep "[a-zA-Z0-9]" > /dev/null || exit 1

You can write your hook in any script or language, as long as it's executable on your Subversion machine.

Solution 4

If you are using TortoiseSVN only then you can add TortoiseSVN's property to the root directory: property name: tsvn:logminsize value: 1 This will disable OK button in TortoiseSVN commit window then Message is empty. Please be aware that this property is TortoiseSVN specific it might not work with other SVN client.

Solution 5

Create a pre-commit hook. Here's some instructions on how to do so yourself, or here is an example hook script that will reject anything with a commit message shorter than 10 characters.

Share:
39,052
Admin
Author by

Admin

Updated on August 22, 2020

Comments

  • Admin
    Admin almost 4 years

    Does anybody know how to prevent commits to a Subversion code repository when there is no commit comment entered?

  • Glen
    Glen over 14 years
    +1, though of course this can't force users to use meaningful comments. svn commit -m "foo" foo.h would still work.
  • Nam G VU
    Nam G VU almost 13 years
    This works for me on Ubuntu with UberSVN. Though I need to point SVNLOOK to /opt/ubersvn/bin/svnlook
  • Nam G VU
    Nam G VU almost 13 years
    I also have to sudo chmod 777 pre-commit to get it works; otherwise, all commits are refused.
  • Nux
    Nux over 12 years
    Great! Works fine, I just had to change location of python and svnlook.
  • Shadok
    Shadok over 12 years
    @NamGiVU 777 should not be used lightly, you just had to use 700 or 750 on the file for it to work if the owner is correctly set.
  • Nam G VU
    Nam G VU over 12 years
    Thanks @Shadok. Though I have no idea on the owner is correct. Would be nice if you can point out more
  • Shadok
    Shadok over 12 years
    @NamGiVU You should take a day or two to read general documentation on linux because it seems you lack some basic skills (no offense), have a look here for a quick lesson on files onwership and permissions: code.google.com/edu/tools101/linux/ownership_permissions.htm‌​l
  • tgharold
    tgharold over 11 years
    The link to the sample hook script that rejects anything shorter then 10 characters is broken.
  • bahrep
    bahrep about 11 years
    What for is the ` > nul` part? What's the purpose of it?
  • Liam
    Liam almost 10 years
    this answer is all a bit "link only". Couldn't you put the contents of the hook example into the answer?
  • Arthur Wu
    Arthur Wu over 5 years
    Tips: Rename pre-commit.tmpl to pre-commit
  • vatsug
    vatsug almost 4 years
    Excellent, does this hook work client-side or serverside? Ideally, I would want this to work serverside to prevent everyone from commiting without commit message.