subversion python enlaces documentation?

¿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?

Solo quería agregar un poco de aclaración aquí.

Gracias a las dos respuestas anteriores ( @BenjaminWohlwend y @Logan ), me di count de que hay más de un set 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 list de files del package Debian, para determinar a qué bibliotecas se refieren; entonces tenemos:

… y también encontré otro en el repository:

El enlace http://svn.apache.org/repos/asf/subversion (que obtuve de @BenjaminWohlwend ) aparentemente es el repository de Apache Software Foundation (¿asf?) Subversion para el código fuente de Subversion.

La búsqueda de documentation 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 documentation desde svn.developer: Utilizando las API ya mencionadas en el OP, a exception 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 networkingucción de arguments 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 count que core.py importa libsvn.core – donde libsvn probablemente se refiere a los files de objects compartidos ( .so ) creados a partir del file C libsvn_swig_py / swigutil_py.c .

Luego, podemos search svn_mergeinfo_merge , y encontrar un post de confirmación como SVNSearch: Subversion (commit 23570 05.03.2007) , que se refiere a esa function, y un svn_mergeinfo.h ; Al search ese file aún más, lo encontramos en el repository 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 function en particular ha quedado obsoleta en 2011, así que con suerte, los enlaces SVN de Python y la installation de SVN deberían coincidir …

Esto parece una documentation 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/

Si comstack Subversion desde la fuente, los enlaces de Subversion Python no se incluyen automáticamente. Tienes que buildlos específicamente e includelos. 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 scope 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 installation completa, ejecute:

 make -k check 

Si seleccionó Python solo necesita ejecutar las testings de Python:

 make check-python-examples make check-python-test-suite 

Si todo está bien, estás listo para instalar Swig:

hacer la installation

A partir de aquí, la installation 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 architecture. 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 file con caracteres UTF-8 con " Error (22): Error al convertir input en el directory 'ruta' a UTF-8 " – la solución a esto es llamar a setlocale antes de cualquier llamada a esta function.

También me di count 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 get más información, consulte # 16027750 Depuración: paso a paso por la secuencia de commands de Python con gdb? .

Para concluir, aquí está el ejemplo 8.3 con la configuration regional que usa svn_client_status3 – y no se svn_client_status3 en mi sistema (incluso en nombres de files con caracteres UTF-8):

 #!/usr/bin/env python # modified from: # http://svnbook.networking-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_ignonetworking : '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)