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 
newer))
#
import sys
import subprocess

def get_svn_txn_proplist(repos,txn):
  child = 
subprocess.Popen(['/usr/bin/svnlook','proplist','--revprop',repos,'-t',txn],
                           stdout=subprocess.PIPE,stderr=subprocess.PIPE)
  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],
                           stdout=subprocess.PIPE,stderr=subprocess.PIPE)
  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 
permitted.\n'
                   'Please upgrade to Subversion 1.5 or newer.\n')
  sys.exit(1)

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

sys.exit(0)


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] 
>> https://subversion.apache.org/docs/release-notes/1.8.html#hooks-start-commit 
>> <https://www.google.com/url?q=https%3A%2F%2Fsubversion.apache.org%2Fdocs%2Frelease-notes%2F1.8.html%23hooks-start-commit&sa=D&sntz=1&usg=AFQjCNG5AarLHZr4kAfA6cuRwPNj6Qeohg>
>>  
>>
>> Andreas 
>>
>

Reply via email to