¿Existe una manera simple de exportar los registros de subversión a un archivo CSV?Exportación del registro de Subversion a CSV
Quiero usarlos para aproximar las horas que paso en un proyecto y hacerlo en una hoja de cálculo sería fácil.
Gracias.
¿Existe una manera simple de exportar los registros de subversión a un archivo CSV?Exportación del registro de Subversion a CSV
Quiero usarlos para aproximar las horas que paso en un proyecto y hacerlo en una hoja de cálculo sería fácil.
Gracias.
Este script Python corto proporcionará un CSV con su salida del registro de SVN:
#!/usr/bin/env python
import csv
import subprocess
import sys
import xml.etree.cElementTree as etree
log_text = subprocess.Popen(['svn', 'log', '--xml'] + sys.argv[1:],
stdout=subprocess.PIPE).communicate()[0]
log_xml = etree.XML(log_text)
csv_writer = csv.writer(sys.stdout)
for child in log_xml.getchildren():
csv_writer.writerow([
child.attrib['revision'],
child.findtext('date'),
child.findtext('author').encode('utf-8'),
child.findtext('msg').encode('utf-8'),
])
Pasa a través de argumentos de línea de comando para la llamada SVN subyacente, por lo que si sólo desea ver la revisión de 34 y más tarde, puede invocarlo de la siguiente manera:
$ svnlog2csv -r 34:HEAD >my_spreadsheet.csv
¡Gracias por la secuencia de comandos! He añadido esta ligera modificación debido a nuestro repositorio SVN es UTF-8 con caracteres acentuados (francés) y el guión borked:
#!/usr/bin/env python
import csv
import subprocess
import sys
import xml.etree.cElementTree as etree
import codecs
log_text = subprocess.Popen(['svn', 'log', '--xml'] + sys.argv[1:],
stdout=subprocess.PIPE).communicate()[0]
log_xml = etree.XML(log_text)
csv_writer = csv.writer(sys.stdout)
for child in log_xml.getchildren():
csv_writer.writerow([
child.attrib['revision'],
child.findtext('date'),
child.findtext('author'),
child.findtext('msg').encode("utf-8"),
])
Cheers,
FYI - no necesita importar 'codecs' para llamar' codificar' en una cadena; Dicho esto, esta es una adición útil, y espero que me perdones por haberla adoptado. ¡Gracias! –
Otra solución rápida que he tenido un gran éxito con es here at Chris' blog. Es un programa Java que lo convierte rápidamente en un archivo CSV. También puede usar la versión en línea que se muestra allí. Por lo general, publica artículos de JavaScript, pero supongo que también conoce Java, ya que supuestamente son bastante similares.
Java! = JavaScript no son 'similares' en ningún otro modo que no sean 'Java' en el nombre; que alguien en Netscape debería ser derrotado por hacer. –
Gracias a todos, muy útil. Descubrí que en las computadoras con Windows, python csv_writer espera una salida de archivo binario; de lo contrario, se emiten retornos de carro adicionales. La siguiente secuencia de comandos maneja este caso y también elimina las líneas nuevas en el medio de los mensajes de confirmación (reemplazados con barra diagonal) para garantizar una salida de una línea.
#!/usr/bin/env python
import csv
import subprocess
import sys
import xml.etree.cElementTree as etree
log_text = subprocess.Popen(['svn', 'log', '--xml'] + sys.argv[1:],
stdout=subprocess.PIPE).communicate()[0]
log_xml = etree.XML(log_text)
if sys.platform == "win32":
import os, msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
csv_writer = csv.writer(sys.stdout)
for child in log_xml.getchildren():
csv_writer.writerow([
child.attrib['revision'],
child.findtext('date'),
child.findtext('author'),
child.findtext('msg').encode("utf-8").replace('\n','/'),
])
(Ahora, que desea otra cosa svn log tomaron las mismas opciones que git log ?? ;-)
me encontré con este pequeño script útil
svn log -r {2015-05-01}:{2015-05-31} http://svn.company.co.id/dev/ | tr -d '\n' | sed -r 's/-{2,}/\n/g' | sed -r 's/ \([^\)]+\)//g' | sed -r 's/^r//' | sed -r "s/[0-9]+ lines?//g" | sort -g | sed 's/ | /;/g' > list.csv
que exporta svn log de fechas 1 de mayo de 2015 al 31 de mayo de 2015 list.csv .. aquí estoy usando semi colon como separadores ... porque mis desarrolladores usan comas en sus notas ...
¡Gracias! Esta secuencia de comandos funcionó muy bien para mí. – Johann