C # -> Python SVN Pre-Commit Hook: cómo acceder a svn: palabras key?

Se me ha pedido que vuelva a agregar un cheque adicional a nuestro enlace precompromiso para garantizar svn: las palabras key se establecen en ciertas routes en nuestros repositorys (por ejemplo, scripts que necesitan la inyección de los valores de revisión e URL). Tuvimos un gancho precompromiso complicado escrito en C # usando SharpSvn haciendo esto originalmente, pero migramos nuestro server SVN a Linux, así que reescribí el gancho en Python. Tiene la mayor parte de la funcionalidad, pero me perdí la verificación de palabra key.

En C #, el código utilizado es así:

SvnPropertyCollection propCollection; svnLookClient.GetPropertyList(svnHookArgs.LookOrigin, item.Path, out propCollection); .... if (item.Path.Contains("some path") && !propCollection.Contains("svn:keywords")) { /*Fail the commit here*/ } 

Descubrí por las malas que las properties de transacción no contienen svn: keywords, incluso cuando realizo un commit donde todo lo que he hecho es establecerlas; svn.fs.svn_fs_txn_proplist a svn.fs.svn_fs_txn_proplist en la transacción me da las siguientes properties:

  • svn: log
  • svn: txn-client-compat-version
  • svn: txn-usuario-agente
  • svn: autor
  • svn: date

Mi código Python se ve así:

 def check_keywords_are_set(transaction, repos_name): commit_has_source_files = False source_extensions = ('.sql', '.hlr') #Only care about source files transaction_root = svn.fs.svn_fs_txn_root(transaction) changed_paths = svn.fs.paths_changed(transaction_root) for path, change in changed_paths.iteritems(): if repos_name == 'repo1' or (repos_name == 'repo2' and ('some path' in path): #These are the paths I want to enforce keywords being set on if path.endswith(source_extensions): commit_has_source_files = True if not commit_has_source_files: return True #debugging code here: transaction_props = svn.fs.svn_fs_txn_proplist(transaction) sys.stdout.write('Transaction prop list:\n{0}\n'.format(transaction_props)) #end debugging keywords = svn.fs.svn_fs_txn_prop(transaction, 'svn:keywords') #keywords is always None 

Mirando hacia atrás en el código C #, puedo ver references a svnlook, así que supongo que tendré que usar esto. Sin embargo, estoy confundido entre 'properties de revisión' y todas las demás 'properties'. Tampoco estoy seguro de cómo escribir esto, de modo que si un desarrollador agrega las palabras key faltantes a los files dentro de una carpeta que debería tenerlos, o si creamos una nueva carpeta donde esto se aplicará más adelante, no se lanzará un falso negativo. La documentation para hacer esto en Python es bastante pobre y generalmente requiere leer el código fuente de C API, que desafortunadamente no entiendo bien (no soy un desarrollador de C), y mucho less traducirlo a Python. Cualquier ayuda sería muy apreciada.