Verificação de propriedades utilizando hook script (subversion) (Resolvido)

1 resposta
rapatao

Seguinte, estou tentando verificar a existência de algumas propriedades contidas nos arquivos enviados ao servidor (commit). O fato é que o commit deve ser rejeitado caso uma dessas propriedades não esteja definida, mas não estou conseguindo recuperar as propriedades dos arquivos.
Tenho um script em python que mostra mais ou menos como é feito, mas com ele só consigo verificar as propriedades contidas no commit, não em cada arquivo do commit, que é o objetivo.
Por exemplo,
[commit] contém algumas propriedades, como svn:author, svn:log e uma lista de arquivos/pastas que foram adicionadas/alteradas/apagados e, ao menos teoricamente, cada arquivo deveria ter algumas propriedades que a empresa definiu, como “autor”, “revisor”, “dataRevisao”, etc. O problema é que não estou sabendo como verificar essas propriedades, nem se quer recuperá-las.

Alguém poderia me dar uma luz?

Segue código python que possuo:

#!/usr/bin/env python

import sys
import os
import os.path
from svn import repos, fs, delta, core

# metodo feito para testar as propriedades do commit
# aqui poderia ser verificado se um commit foi feito 
# com um comentário devidamente adicionado,
# entre outras coisas.
def commit_test_props(props):
  return 0

# metodo criado para verificar os artefatos
# aqui sera feito a verificacao das props
def verifica_path(path, retorno):
  retval = retorno
  sys.stderr.write(path + "\n")
  return retval

def main(pool, repos_dir, txn):
  retval = 1
  fs_ptr = repos.svn_repos_fs(repos.svn_repos_open(repos_dir, pool))
  root = fs.txn_root(fs.open_txn(fs_ptr, txn, pool), pool)
  cc = repos.ChangeCollector(fs_ptr, root, pool)
#  retval = commit_test_props(cc.get_root_props())
  e_ptr, e_baton = delta.make_editor(cc, pool)
  repos.svn_repos_replay(root, e_ptr, e_baton, pool)
  changes = cc.get_changes()
  paths = changes.keys()
  paths.sort(lambda a, b: core.svn_path_compare_paths(a, b))
  for path in paths:
    retval = verifica_path(path, retval)
  return retval

def _usage_and_exit():
  sys.stderr.write("USAGE: %s REPOS-DIR TXN-NAME\n" % (sys.argv[0]))
  sys.exit(1)

if __name__ == '__main__':
  if len(sys.argv) < 3:
    _usage_and_exit()
  sys.exit(core.run_app(main, sys.argv[1], sys.argv[2]))

Se alguém souber me ajudar, ficarei muito agradecido.

1 Resposta

rapatao

Consegui resolver. Encontrei um framework que possui uma classe que possui métodos para recuperar as propriedades dos artefatos.
O framework pode ser encontrada aqui: http://svnchecker.tigris.org/

Segue código, bem simples e “sujo” que fiz para testar se o mesmo funcionava:

#!/usr/bin/env python

import sys
import os
import os.path
from svn import core
from modules.Transaction import Transaction

# método que irá verificar a existência das propriedades
def check_props(transaction, file):
  props = transaction.listProperties(file)
  for prop in props:
    sys.stderr.write(prop + " | ")

def main(pool, repos_dir, txn):
  retval = 1
  transaction = Transaction(repos_dir, txn)

  files = transaction.getFiles()
  for file in files:
    sys.stderr.write(file + "\n")
    check_props(transaction, file)

  return retval


def _usage_and_exit():
  sys.stderr.write("USAGE: %s REPOS-DIR TXN-NAME\n" % (sys.argv[0]))
  sys.exit(1)

if __name__ == '__main__':
  if len(sys.argv) < 3:
    _usage_and_exit()
  sys.exit(core.run_app(main, sys.argv[1], sys.argv[2]))
Criado 20 de maio de 2009
Ultima resposta 20 de mai. de 2009
Respostas 1
Participantes 1