2009-09-19 16 views
10

सबवर्सन पायथन बाइंडिंग का उपयोग करने के लिए मुझे एक अच्छा परिचय कहां मिल सकता है?उपversण पायथन बाइंडिंग दस्तावेज?

मुझे one section in the svnbook मिला जो इसके बारे में बात करता है; और कुछ basic examples from 1.3

क्या कुछ और अधिक गहन और अद्यतित है?

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

और यहाँ कुछ उदाहरण हैं::

उत्तर

1

यह एक बहुत पूरा प्रलेखन की तरह लग रहा

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

+6

pysvn लोगों मैं का उपयोग करना चाहते कर रहा हूँ की तुलना में अजगर बाइंडिंग का एक अलग सेट है: और क्रैश नहीं होता अपने सिस्टम पर (यहां तक ​​कि UTF-8 वर्णों के साथ फ़ाइल नाम पर) - जो svn_client_status3 का उपयोग करता है स्थानीय सेटिंग के साथ 3 । लेकिन वे उदाहरण उपयोगी हो सकते हैं। – retracile

+0

+1 svnshell.py काफी उपयोगी होगा। लेकिन मैं चेकआउट और विलय से ज्यादा संबंधित नहीं देख रहा हूं, इसलिए मैं अभी भी और अधिक खोज रहा हूं। – retracile

1

आप स्रोत से सबवर्सन निर्माण तो सबवर्सन पायथन बाइंडिंग नहीं हैं स्वचालित रूप से शामिल आपको विशेष रूप से उन्हें बनाना और शामिल करना होगा। सौभाग्य से, आप सबवर्सन स्थापित करने के बाद ऐसा कर सकते हैं। बाइंडिंग के लिए स्रोत सबवर्जन स्रोत कोड के भीतर शामिल किया गया है।

ये निर्देश Red Hat Enterprise Linux पर सबवर्सन 1.5.9 और पायथन 2.4.3 के लिए हैं, लेकिन उन्हें सबवर्जन और पायथन और जेनेरिक यूनिक्स इंस्टॉलेशन के हाल के संस्करणों के लिए आसानी से हैक करने योग्य होना चाहिए।

पहले, से http://downloads.sourceforge.net/swig

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

डाउनलोड बड़ा घूँट इस बिंदु पर आप एक निर्णय करने के लिए किया है। आप सभी समर्थित भाषाओं के लिए स्विग इंस्टॉल कर सकते हैं या आप जो चाहते हैं उसके लिए आप इंस्टॉल कर सकते हैं। 'चेक चेक' को चलाने के लिए एक घंटे तक लग सकते हैं और उन भाषाओं की त्रुटियों के कारण विफल हो सकते हैं जिनके बारे में आप चिंतित नहीं हैं।

आप सभी समर्थित भाषाओं उपयोग करना चाहते हैं चलाएँ:

./configure 

तुम सिर्फ अजगर करने के लिए नीचे गुंजाइश चाहते हैं, चलाएँ:

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

इसके बाद, चलाएँ:

make 

यदि आपने पूर्ण इंस्टॉल का चयन किया है, तो चलाएं:

make -k check 

आप नीचे scoped सिर्फ अजगर को आप केवल अजगर परीक्षण चलाने के लिए की जरूरत है:

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

यदि सब कुछ के ठीक है, आप बड़ा घूँट स्थापित करने के लिए तैयार हैं:

स्थापित कर

यहां से, सबवर्सन पायथन बाइंडिंग स्थापित करना काफी सरल होना चाहिए:

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 

हमेशा के रूप में, आपका माइलेज आपके विशिष्ट संस्करणों और वास्तुकला के आधार पर भिन्न हो सकता है। सौभाग्य।

+5

हालांकि यह उन लोगों के लिए सहायक हो सकता है जो बाइंडिंग को स्थापित करने के तरीके के बारे में जानकारी चाहते हैं, जो कि बाइंडिंग के बारे में मेरे प्रश्न को संबोधित नहीं करता है। मैं एपीआई और प्रोग्रामिंग दस्तावेज की तलाश में हूं, इंस्टॉलेशन सहायता नहीं। – retracile

5

बस यहां थोड़ा सा स्पष्टीकरण जोड़ना चाहता था।

उपरोक्त दो उत्तरों (@BenjaminWohlwend और @Logan) के लिए धन्यवाद, मुझे पता चला कि सबवर्सन के लिए पाइथन बाइंडिंग/इंटरफेस के एक से अधिक सेट हैं; मैं अपने उबंटू 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 

एक Debian पैकेज filelist देख सकते हैं, यह निर्धारित करने के जो पुस्तकालय इन का संदर्भ लें; इसलिए हमने:

... और मैं भी भंडार में एक और पाया:

लिंक http://svn.apache.org/repos/asf/subversion (जो मैं @BenjaminWohlwend से मिला) जाहिरा तौर पर Apache सॉफ्टवेयर फाउंडेशन (asf?) सबवर्सन स्रोत कोड खुद के लिए सबवर्सन भंडार है। जिसका निर्माण से स्रोत निर्देश @Logan की पोस्ट में हैं, प्रलेखन के लिए

ओपी की तलाश python-subversion (या बड़ा घूँट बाइंडिंग (या libsvn) से संबंधित लगता है।bindings/swig/python/README को छोड़कर, मुझे ओपी में पहले से संदर्भित svn.developer: Using the APIs से अधिक बेहतर प्रलेखन स्रोत नहीं मिला; यह बताते हैं कि कैसे बड़ा घूँट सी से अजगर इंटरफेस उत्पन्न करता है:

अनुवाद पैरामीटर सूचियाँ बड़ा घूँट बाइंडिंग कुछ की

तर्क-कटौती कानूनों
इस तरह जाना:

- The module prefix can be omitted. o: 

    void *some_C_function = svn_client_foo; 

    becomes: 

    import svn.client 
    func = svn.client.foo 

[... ]

फिर, svn/core.py कहें, और फ़ंक्शन ढूंढें एस (और "स्पष्ट रूप से परिभाषित प्रतीक") जैसे svn_mergeinfo_merge; यह नोट करते हुए कि core.py आयात libsvn.core - जहां libsvn सी फ़ाइल libsvn_swig_py/swigutil_py.c से निर्मित साझा ऑब्जेक्ट (.so) फ़ाइलों को संदर्भित करता है।

फिर, हम svn_mergeinfo_merge देख सकते हैं, और SVNSearch: Subversion (commit 23570 05.03.2007) जैसे एक प्रतिबद्ध संदेश ढूंढ सकते हैं, जो उस कार्य को संदर्भित करता है, और svn_mergeinfo.h; आगे उस फ़ाइल को देख, हम इसे ASF भंडार में मिल: svn_mergeinfo.h, जो वास्तव में शामिल हैं:

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

वहाँ DEPRECATED देखकर, यह svn commit: r1175903 (Mon Sep 26 2011) का उल्लेख करने के शायद यहाँ अच्छा है:

  • तोड़फोड़ /libsvn_subr/mergeinfo.c

    (svn_mergeinfo_merge2): नया।

    (svn_mergeinfo_merge): deprecated.c पर जाएं।

    (svn_mergeinfo_catalog_merge): नया एपीआई का उपयोग करें।

है - कि विशेष रूप से समारोह 2011 में पदावनत किया गया है - इसलिए उम्मीद है कि, किसी के अजगर SVN बाइंडिंग और SVN स्थापना मिलान किया जाना चाहिए ...

0

आशा है कि यह एक और पोस्ट को पुनः के साथ ठीक है: python-subversion : मैं Example 8.3. A Python status crawler - Using the APIs (svnbook) कोशिश करना चाहता था। उबंटू 11.04, पायथन 2.7, svn_client_status2 "त्रुटि (22) के साथ यूटीएफ -8 अक्षरों के साथ एक फ़ाइल नाम पर दुर्घटनाग्रस्त हो गया: यूटीएफ -8 पर निर्देशिका 'पथ' में प्रविष्टि को परिवर्तित करने में त्रुटि" - इसका समाधान setlocale को किसी भी से पहले कॉल करना है इस समारोह में कॉल करता है।

मुझे यह भी एहसास हुआ कि पाइथन एपीआई में svn_client_status3 और svn_client_status4 हैं; svn_client_status3 में थोड़ा अलग कॉल है, और setlocale की भी आवश्यकता है। हालांकि, svn_client_status4 का उपयोग नहीं किया जाना चाहिए - यह segfaults, क्योंकि इसे एक स्ट्रक्चर तर्क की आवश्यकता है जो पायथन वितरित नहीं कर सकता है; अधिक के लिए, #16027750 Debugging: stepping through Python script using gdb? देखें।

इसे लपेटने के लिए, यहां उदाहरण 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) 
संबंधित मुद्दे