python - barplot - pandas plot
subversion python enlaces documentación? (4)
Esto parece una documentación bastante completa:
http://pysvn.tigris.org/docs/pysvn_prog_ref.html
Y aquí hay un par de ejemplos:
http://svn.apache.org/repos/asf/subversion/trunk/tools/examples/
¿Dónde puedo encontrar una buena introducción al uso de enlaces subversivos de python?
Encontré una sección en el svnbook que habla de eso; y algunos ejemplos básicos de 1.3 .
¿Hay algo un poco más completo y actualizado?
Si compila Subversion desde la fuente, los enlaces de Subversion Python no se incluyen automáticamente. Tienes que construirlos específicamente e incluirlos. Afortunadamente, puedes hacer esto luego de que hayas instalado Subversion. La fuente de los enlaces se incluye dentro del código fuente de Subversion.
Estas instrucciones son para Subversion 1.5.9 y Python 2.4.3 en Red Hat Enterprise Linux, pero deben ser fácilmente pirateables para las versiones recientes de Subversion y Python y las instalaciones genéricas de Unix.
Primero, descarga swig desde http://downloads.sourceforge.net/swig
tar -xvf swig-<version>.tar.gz
cd swig-<version>
En este punto, debes tomar una decisión. Puede instalar swig para todos los idiomas compatibles o puede instalar solo lo que necesita. ''make check'' puede tardar hasta una hora en ejecutarse y puede fallar debido a errores en los idiomas que no le interesan.
Si desea utilizar todos los idiomas admitidos, ejecute:
./configure
Si quieres ampliar el alcance a solo python, ejecuta:
./configure --with-python=/usr/local/bin/python2.4 --without-perl --without-ruby --without-php4
A continuación, ejecuta:
make
Si optó por la instalación completa, ejecute:
make -k check
Si seleccionó Python solo necesita ejecutar las pruebas de Python:
make check-python-examples
make check-python-test-suite
Si todo está bien, estás listo para instalar Swig:
hacer la instalación
A partir de aquí, la instalación de enlaces de subversión python debería ser bastante sencilla:
tar -xvf subversion-1.5.9.tar.gz --gzip
cd subversion-1.5.9
make swig-py
make install-swig-py
touch /usr/lib64/python2.4/site-packages/svn-python.pth
echo /usr/local/lib/svn-python > /usr/lib64/python2.4/site-packages/svn-python.pth
Como siempre, su kilometraje puede variar según sus versiones específicas y su arquitectura. Buena suerte.
Espero que esté bien con otra publicación re: python-subversion
: quería probar el ejemplo 8.3. Un rastreador de estado de Python: uso de las API (svnbook) . en Ubuntu 11.04, Python 2.7, svn_client_status2
estrelló en un nombre de archivo con caracteres UTF-8 con " Error (22): Error al convertir entrada en el directorio ''ruta'' a UTF-8 " - la solución a esto es llamar a setlocale
antes de cualquier llamada a esta función.
También me di cuenta de que hay svn_client_status3
y svn_client_status4
en la API de Python; svn_client_status3
tiene una llamada ligeramente diferente, y también necesita setlocale
. Sin embargo, no se debe usar svn_client_status4; segfaults, ya que necesita un argumento struct que Python no puede entregar; para obtener más información, consulte # 16027750 Depuración: paso por el script de Python con gdb? .
Para concluir, aquí está el ejemplo 8.3 con la configuración regional que usa svn_client_status3
- y no se svn_client_status3
en mi sistema (incluso en nombres de archivos con caracteres UTF-8):
#!/usr/bin/env python
# modified from:
# http://svnbook.red-bean.com/en/1.5/svn.developer.usingapi.html
# does the same as `svn status`, and is marked:
"""Crawl a working copy directory, printing status information."""
# tested on Python 2.7, Ubuntu Natty 11.04; needs:
# sudo apt-get install python-subversion
import locale
print locale.getlocale() # (None, None) - in C: ANSI_X3.4-1968
locale.setlocale(locale.LC_ALL, '''') # would print en_US.UTF-8
print locale.getlocale() # NOW it is (''en_US'', ''UTF-8'')
import sys
import os.path
import getopt
import svn.core, svn.client, svn.wc
def generate_status_code(status):
"""Translate a status value into a single-character status code,
using the same logic as the Subversion command-line client."""
code_map = { svn.wc.svn_wc_status_none : '' '',
svn.wc.svn_wc_status_normal : '' '',
svn.wc.svn_wc_status_added : ''A'',
svn.wc.svn_wc_status_missing : ''!'',
svn.wc.svn_wc_status_incomplete : ''!'',
svn.wc.svn_wc_status_deleted : ''D'',
svn.wc.svn_wc_status_replaced : ''R'',
svn.wc.svn_wc_status_modified : ''M'',
svn.wc.svn_wc_status_merged : ''G'',
svn.wc.svn_wc_status_conflicted : ''C'',
svn.wc.svn_wc_status_obstructed : ''~'',
svn.wc.svn_wc_status_ignored : ''I'',
svn.wc.svn_wc_status_external : ''X'',
svn.wc.svn_wc_status_unversioned : ''?'',
}
return code_map.get(status, ''?'')
def do_status(wc_path, verbose):
# Build a client context baton.
ctx = svn.client.svn_client_ctx_t()
def _status_callback(path, status):
"""A callback function for svn_client_status."""
# Print the path, minus the bit that overlaps with the root of
# the status crawl
text_status = generate_status_code(status.text_status)
prop_status = generate_status_code(status.prop_status)
print ''%s%s %s'' % (text_status, prop_status, path)
# Do the status crawl, using _status_callback() as our callback function.
revision = svn.core.svn_opt_revision_t()
revision.type = svn.core.svn_opt_revision_head
#~ svn.client.svn_client_status2(wc_path, revision, _status_callback,
#~ svn.core.svn_depth_infinity, verbose,
#~ 0, 0, 1, ctx)
svn.client.svn_client_status3(wc_path, revision, _status_callback,
svn.core.svn_depth_infinity, verbose,
0, 0, 1, (), ctx)
# DO NOT USE svn_client_status4! (needs a C struct argument)
def usage_and_exit(errorcode):
"""Print usage message, and exit with ERRORCODE."""
stream = errorcode and sys.stderr or sys.stdout
stream.write("""Usage: %s OPTIONS WC-PATH
Options:
--help, -h : Show this usage message
--verbose, -v : Show all statuses, even uninteresting ones
""" % (os.path.basename(sys.argv[0])))
sys.exit(errorcode)
if __name__ == ''__main__'':
# Parse command-line options.
try:
opts, args = getopt.getopt(sys.argv[1:], "hv", ["help", "verbose"])
except getopt.GetoptError:
usage_and_exit(1)
verbose = 0
for opt, arg in opts:
if opt in ("-h", "--help"):
usage_and_exit(0)
if opt in ("-v", "--verbose"):
verbose = 1
if len(args) != 1:
usage_and_exit(2)
# Canonicalize the repository path.
wc_path = svn.core.svn_path_canonicalize(args[0])
# Do the real work.
try:
do_status(wc_path, verbose)
except svn.core.SubversionException, e:
sys.stderr.write("Error (%d): %s/n" % (e.apr_err, e.message))
sys.exit(1)
Solo quería agregar un poco de aclaración aquí.
Gracias a las dos respuestas anteriores ( @BenjaminWohlwend y @Logan ), me di cuenta de que hay más de un conjunto de enlaces / interfaces de Python para Subversion; Hice esto en mi caja de Ubuntu 11.04:
$ apt-cache search ''[Ss]vn|[Ss]ubversion'' | grep -i python
python-svn - A(nother) Python interface to Subversion
python-svn-dbg - A(nother) Python interface to Subversion (debug extension)
python-subversion - Python bindings for Subversion
python-subversion-dbg - Python bindings for Subversion (debug extension)
python-opster - a python command line parsing speedster
python-py - Advanced Python testing tool and networking lib
python-rope - Python refactoring library
python-subvertpy - Alternative Python bindings for Subversion
Uno puede mirar la lista de archivos del paquete Debian, para determinar a qué bibliotecas se refieren; entonces tenemos:
-
python-subversion
- o SWIG bindings (olibsvn
,libsvn_swig_py
) filelist- Ejemplos: http://svn.apache.org/repos/asf/subversion/trunk/tools/examples/ , http://svn.apache.org/repos/asf/subversion/trunk/subversion/bindings/swig/python / pruebas /
-
import svn.core, svn.client
;from svn import fs, core, repos
-
pysvn
archivospython-svn
o pysvn -
python-subvertpy
- osubvertpy
archivos- Ejemplos: http://sourcecodebrowser.com/subvertpy/0.7.2/dir_22b88615bda8eebb370e96884c00fb89.html
-
from subvertpy import delta, repos
,from subvertpy.ra import RemoteAccess, Auth
... y también encontré otro en el repositorio:
-
ctypes-python
- o fuentecsvn
- Ejemplos: http://svn.apache.org/repos/asf/subversion/trunk/subversion/bindings/ctypes-python/examples/
-
import csvn.core
,from csvn.repos import *
El enlace http://svn.apache.org/repos/asf/subversion (que obtuve de @BenjaminWohlwend ) aparentemente es el repositorio de Apache Software Foundation (¿asf?) Subversion para el código fuente de Subversion.
La búsqueda de documentación del OP parece relacionada con python-subversion
(o SWIG bindings (o libsvn
), cuyas instrucciones build-from-source están en la publicación de @Logan . No pude encontrar mucho mejor fuente de documentación desde svn.developer: Utilizando las API ya mencionadas en el OP, a excepción de bindings / swig / python / README , explica cómo SWIG genera las interfaces de Python desde C:
TRADUCCIÓN DE LISTAS DE PARÁMETROS
Las leyes de reducción de argumentos de SWIG vinculan algo como
esta:
- The module prefix can be omitted. o: void *some_C_function = svn_client_foo; becomes: import svn.client func = svn.client.foo
[...]
Entonces, uno podría mirar, digamos, svn / core.py , y encontrar funciones (y "Símbolos definidos explícitamente") como svn_mergeinfo_merge
; teniendo en cuenta que core.py
importa libsvn.core
- donde libsvn
probablemente se refiere a los archivos de objetos compartidos ( .so
) creados a partir del archivo C libsvn_swig_py / swigutil_py.c .
Luego, podemos buscar svn_mergeinfo_merge
, y encontrar un mensaje de confirmación como SVNSearch: Subversion (commit 23570 05.03.2007) , que se refiere a esa función, y un svn_mergeinfo.h
; Al buscar ese archivo aún más, lo encontramos en el repositorio de ASF: svn_mergeinfo.h , que de hecho contiene:
/** Like svn_mergeinfo_merge2, but uses only one pool.
*
* @deprecated Provided for backward compatibility with the 1.5 API.
*/
SVN_DEPRECATED
svn_error_t *
svn_mergeinfo_merge(svn_mergeinfo_t mergeinfo,
svn_mergeinfo_t changes,
apr_pool_t *pool);
Ver DEPRECATED
allí, probablemente sea bueno aquí para referirse a svn commit: r1175903 (Mon Sep 26 2011) :
subversion / libsvn_subr / mergeinfo.c
(svn_mergeinfo_merge2): Nuevo.
(svn_mergeinfo_merge): pasar a deprecated.c.
(svn_mergeinfo_catalog_merge): usa la nueva API.
Es decir, esa función en particular ha quedado obsoleta en 2011, así que con suerte, los enlaces SVN de Python y la instalación de SVN deberían coincidir ...