2009-09-19 5 views

Répondre

1

Cela ressemble à une documentation assez complète:

http://pysvn.tigris.org/docs/pysvn_prog_ref.html

Et voici des exemples de couple:

http://svn.apache.org/repos/asf/subversion/trunk/tools/examples/

+6

pysvn est un autre ensemble de liaisons de python que ceux que je suis désireux d'utiliser . Mais ces exemples peuvent être utiles. – retracile

+0

+1 le svnshell.py sera très utile. Mais je ne vois pas beaucoup de choses liées aux caisses et aux fusions, alors je suis toujours à la recherche de plus. – retracile

1

Si vous construisez Subversion à partir des sources les liaisons Subversion Python ne sont pas automatiquement inclus. Vous devez spécifiquement les construire et les inclure. Heureusement, vous pouvez le faire après avoir installé Subversion. La source des liaisons est incluse dans le code source de Subversion.

Ces instructions sont pour Subversion 1.5.9 et Python 2.4.3 sur Red Hat Enterprise Linux, mais elles devraient être facilement piratables pour les versions récentes de Subversion et Python et les installations génériques Unix.

d'abord, téléchargez rasade de http://downloads.sourceforge.net/swig

tar -xvf swig-<version>.tar.gz 
cd swig-<version> 

À ce stade, vous devez prendre une décision. Vous pouvez installer swig pour toutes les langues prises en charge ou vous pouvez installer pour ce dont vous avez besoin. 'make check' peut prendre jusqu'à une heure pour s'exécuter et peut échouer en raison d'erreurs dans des langues qui ne vous intéressent pas.

Si vous souhaitez utiliser toutes les langues prises en charge Run:

./configure 

Si vous voulez champ vers le bas juste python, exécutez:

./configure --with-python=/usr/local/bin/python2.4 --without-perl --without-ruby --without-php4 

Ensuite, exécutez:

make 

Si vous avez opté pour l'installation complète, exécutez:

make -k check 

Si vous SCOPED vers le bas pour python juste il vous suffit de lancer les tests de python:

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

Si tout est OK, vous êtes prêt à installer rasade:

make install

De là, l'installation des liaisons python subversion devrait être assez simple:

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 

Comme toujours, votre kilométrage peut varier en fonction de vos versions et de votre architecture. Bonne chance.

+5

Bien que cela puisse être utile à ceux qui cherchent des informations sur la façon d'installer les liaisons, cela ne répond pas à ma question sur l'utilisation des liaisons. Je suis à la recherche d'API et de documentation de programmation, pas d'aide à l'installation. – retracile

5

Je voulais juste ajouter quelques précisions ici.

Grâce aux deux réponses ci-dessus (@BenjaminWohlwend et @Logan), j'ai pris conscience qu'il existe plus d'un ensemble de liaisons/interfaces Python pour Subversion; Je l'ai fait sur ma boîte 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 

On peut regarder le paquet Debian filelist, pour déterminer quelles bibliothèques ceux-ci concernent; nous avons donc:

... et je trouve aussi une autre dans le référentiel:

Le lien http://svn.apache.org/repos/asf/subversion (que je suis arrivé de @BenjaminWohlwend) est apparemment le dépôt Subversion Apache Software Foundation (ASF?) Pour le code source de Subversion lui-même.

La quête OP pour la documentation semble liée à python-subversion (ou les liaisons SWIG (ou libsvn), dont les instructions de construction-source sont en poste de @Logan.Je ne pouvais pas trouver une meilleure source de documentation de la svn.developer: Using the APIs déjà mentionné dans l'OP, à l'exception de la bindings/swig/python/README; il explique comment SWIG génère des interfaces Python à partir de C:

TRANSLATION PARAMETER LISTES

Les lois-réductions argument des liaisons SWIG quelque chose aller comme
cela:

- The module prefix can be omitted. o: 

    void *some_C_function = svn_client_foo; 

    becomes: 

    import svn.client 
    func = svn.client.foo 

[... ]

Puis, on pourrait regarder, par exemple, svn/core.py, et trouver la fonction s (et "Symboles définis explicitement") comme svn_mergeinfo_merge; notant que core.py importations libsvn.core - où libsvn fait probablement référence à l'objet partagé (.so) fichiers construits à partir du fichier C libsvn_swig_py/swigutil_py.c. Puis, nous pouvons rechercher svn_mergeinfo_merge, et trouver un message de validation comme SVNSearch: Subversion (commit 23570 05.03.2007), qui fait référence à cette fonction, et svn_mergeinfo.h; regardant ce fichier plus loin, on trouve dans le référentiel ASF: svn_mergeinfo.h, qui contient en effet:

/** 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); 

En voyant là DEPRECATED, il est probablement bien ici de se référer à svn commit: r1175903 (Mon Sep 26 2011):

  • subversion /libsvn_subr/mergeinfo.c

    (svn_mergeinfo_merge2): Nouveau.

    (svn_mergeinfo_merge): Déplacez-vous sur deprecated.c.

    (svn_mergeinfo_catalog_merge): utilisez la nouvelle API.

C'est - cette fonction particulière a été dépréciée en 2011 - si tout va bien, une des liaisons de Python SVN et l'installation SVN doivent être assorties ...

0

Espérons que c'est OK avec un autre poste re: python-subversion : Je voulais essayer Example 8.3. A Python status crawler - Using the APIs (svnbook). sur Ubuntu 11.04, Python 2.7, svn_client_status2 écrasé sur un nom de fichier avec des caractères UTF-8 avec "Erreur (22): Erreur de conversion de l'entrée dans le répertoire 'chemin' à UTF-8" - la solution est d'appeler setlocale avant toute appelle à cette fonction.

J'ai également réalisé qu'il y a svn_client_status3 et svn_client_status4 dans l'API Python; svn_client_status3 a un appel légèrement différent, et a également besoin de setlocale. Cependant, svn_client_status4 NE DOIT PAS être utilisé - il segfault, car il a besoin d'un argument struct que Python ne peut pas fournir; pour plus d'informations, voir #16027750 Debugging: stepping through Python script using gdb?.

Pour conclure, voici l'exemple 8.3 avec des paramètres régionaux qui utilise svn_client_status3 - et ne tombe pas en panne sur mon système (même sur les noms de fichiers avec des caractères 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) 
Questions connexes