subversion-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Carlos Alberto Costa Beppler <>
Subject Re: start-commit log message.
Date Tue, 31 Mar 2015 18:28:55 GMT
Only to record.

I solved the problem looking for ephemeral properties on commit. They are 
only sent for 1.8 clients.

To do this I changed my start-commit hook was to this:

#!/usr/bin/env python
# The start-commit hook is invoked before a Subversion txn is created
# in the process of doing a commit.  Subversion runs this hook
# by invoking a program (script, executable, binary, etc.) named
# 'start-commit' (for which this file is a template)
# with the following ordered arguments:
#   [1] REPOS-PATH   (the path to this repository)
#   [2] USER         (the authenticated user attempting to commit)
#   [3] CAPABILITIES (a colon-separated list of capabilities reported
#                     by the client; see note below)
#   [4] TXN-NAME     (the name of the commit txn just created (1.8 or 
import sys
import subprocess

def get_svn_txn_proplist(repos,txn):
  child = 
  out,err = child.communicate()
  if child.returncode:
    return ([],err)
  return ([p.strip() for p in out.strip().split('\n')],'')

def get_svn_txn_log(repos,txn):
  child = subprocess.Popen(['/usr/bin/svnlook','log','-t',txn,repos],
  out,err = child.communicate()
  if child.returncode:
    return ('',err)
  return (out,'')

capabilities = sys.argv[3].split(':')

if 'mergeinfo' not in capabilities:
  sys.stderr.write('Commits from merge-tracking-unaware clients are not 
                   'Please upgrade to Subversion 1.5 or newer.\n')

repos = sys.argv[1]
txn = sys.argv[4]

log,err = get_svn_txn_log(repos,txn)
if err:
  sys.stderr.write('Error inspecting commit log: '+err)
elif not log.strip():
  proplist,err = get_svn_txn_proplist(repos,txn)
  if err:
    sys.stderr.write('Error inspecting commit properties: '+err)
  elif 'svn:txn-user-agent' in proplist:
    sys.stderr.write('Commits without log message are not permitted.\n'
                     'Please enter the log message.\n')


On Tuesday, March 31, 2015 at 12:34:36 PM UTC-3, Carlos Alberto Costa 
Beppler wrote:
> Sorry for asking without proprer documentation read and thanks.
> There is a way to "detect" that the log message is not sent because of an 
> older client version?
> My intent is to block the commit early if I can.
> On Tuesday, March 31, 2015 at 12:28:37 PM UTC-3, Andreas Stieger wrote:
>> Hello, 
>> > validate the log message [...] start-commit [...] 
>> > [...] 
>> > if the client is using an older version (like 1.7) the commit message 
>> obtained 
>> > using svnlook is always empty durng the start-commit. In this case the 
>> commit 
>> > message is available only during pre-commit. 
>> Yes, and this is expected, documented [1] and will not change. Quoting: 
>> [[[ 
>> Note: Subversion does not require that commit transaction properties 
>> (such as the revision log message) be attached to the transaction as part 
>> of its initialization. As such, some clients will still not provide that 
>> information to the server until after the start-commit hook has been 
>> invoked. Here is a list of such clients we are aware of: 
>>     Pre-1.8 clients communicating via HTTP 
>>     Clients communicating via HTTP when mod_dav_svn's 
>> "SVNAdvertiseV2Protocol" option has been set to "off" 
>> Administrators should consider modularizing the tests that their hooks 
>> perform on transaction properties, invoke those tests from both the 
>> start-commit and pre-commit hook scripts." 
>> ]]] 
>> You will need to run the same hook again as pre-commit. 
>> [1] 
>> <>

>> Andreas 
  • Unnamed multipart/mixed (inline, None, 0 bytes)
View raw message