pysvn-1.7.8/000755 000771 000771 00000000000 12204167354 013216 5ustar00barrybarry000000 000000 pysvn-1.7.8/Builder/000755 000771 000771 00000000000 12204167354 014604 5ustar00barrybarry000000 000000 pysvn-1.7.8/Docs/000755 000771 000771 00000000000 12204167354 014106 5ustar00barrybarry000000 000000 pysvn-1.7.8/Examples/000755 000771 000771 00000000000 12204167354 014774 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/000755 000771 000771 00000000000 12204167354 014470 5ustar00barrybarry000000 000000 pysvn-1.7.8/INSTALL.html000644 000771 000771 00000007027 12204114361 015206 0ustar00barrybarry000000 000000 Building pysvn Extension

Building pysvn Extension

Prerequisites

To build pysvn you will require:

Some distributions will split python and subversion into more the one package.

You will need to find all the packages that give you the options listed above.

Building on win32

PYSVN sources have been updated to build on Windows 7 64bit version. Expect issues on older windows and 32but windows.

These instructions assume you have Microsoft Visual C++ 2008 (9.0) to compile the code and INNO 5 to create the installation kit.

You must build with MSVC 2008 (9.0) for Python 2.6 or later and python 3.0 or later.

  1. Build subversion (tested with and svn 1.7.11 and 1.8.1)
  2. Fetch and expand the pysvn source code into extdir
  3. Expand pycxx-6.2.4.tar.gz into extdir\Import if not using a source kit
  4. Edit Builder\builder_custom_init.cmd to match the locations of the sources.
  5. cd Builder
  6. builder_custom_init.cmd
  7. cd ..\Source
  8. python setup.py configure ... (add any configure options required to make it find the required libraries).
  9. nmake
  10. cd ..\Test
  11. nmake
  12. cd ..\Kit\Win32-1.7
  13. nmake

To install the built kit

  1. Uninstall any previous kit (control panel's Add/Remove programs)
  2. nmake -f win32.mak install

Building on unix and Mac OS X systems.

  1. Install subversion.
    When installing from packages you will need to install the devel packages as well. For example on Fedora/Redhat subversion-devel, apr-devel, apr-util-devel and their dependancies.
  2. Get the pysvn source code
  3. For Python 2 or Python 3 builds: tar xzf pycxx-6.2.4.tar.gz into extdir/Import if not using a source kit
  4. cd Source
  5. For Python 2.6 or earlier builds: backport the PySVN code using python setup.py backport
  6. Create the Makefile using python setup.py configure
  7. make
  8. cd Tests
  9. Test pysvn by running make

Install pysvn by copying the following from Extension/Source to python site-specific directory.

pysvn-1.7.8/Kit/000755 000771 000771 00000000000 12204167354 013745 5ustar00barrybarry000000 000000 pysvn-1.7.8/LICENSE.txt000644 000771 000771 00000004315 11724430522 015040 0ustar00barrybarry000000 000000 ================================================================= Copyright (C) 2003-2012 Barry A. Scott. All rights reserved. ================================================================= The Apache Software License, Version 1.1 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The end-user documentation included with the redistribution, if any, must include the following acknowledgment: "This product includes software developed by Barry A. Scott http://www.barrys-emacs.org." Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear. 4. The names "PySVN" must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact barry@barrys-emacs.org. 5. Products derived from this software may not be called "PySVN", nor may "PySVN" appear in their name, without prior written permission of Barry Scott. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================================= pysvn-1.7.8/Patches/000755 000771 000771 00000000000 12204167354 014605 5ustar00barrybarry000000 000000 pysvn-1.7.8/setup.cfg000644 000771 000771 00000000014 11411352312 015017 0ustar00barrybarry000000 000000 [egg_info] pysvn-1.7.8/setup.py000644 000771 000771 00000003777 11507075213 014743 0ustar00barrybarry000000 000000 # # ==================================================================== # (c) 2005-2009 Barry A Scott. All rights reserved. # # This software is licensed as described in the file LICENSE.txt, # which you should have received as part of this distribution. # # ==================================================================== # # # setup.py # # make an egg of pysvn # import setuptools import distutils.sysconfig import sys import os import os.path import setuptools.command.bdist_egg pysvn_version_info = {} f = open( 'Builder/version.info', 'r' ) for line in f: key, value = line.strip().split('=') pysvn_version_info[ key ] = value def run(self): # Generate metadata first self.run_command("egg_info") os.chdir('Source') os.system(sys.executable + ' setup.py configure') os.system('make clean') os.system('make') os.system('make egg DISTDIR="%s"' % os.path.abspath(os.path.join('..', self.dist_dir))) os.chdir('..') # Go back in parent directory # Add to 'Distribution.dist_files' so that the "upload" command works getattr( self.distribution, 'dist_files', [] ).append( ('bdist_egg', distutils.sysconfig.get_python_version(), self.egg_output) ) # Monkey patch the building method with our custom one. setuptools.command.bdist_egg.bdist_egg.run = run name = "pysvn" setuptools.setup( name = name, version='%(MAJOR)s.%(MINOR)s.%(PATCH)s' % pysvn_version_info, author="Barry Scott", author_email="barryscott@tigris.org", description="Subversion support for Python", long_description="", url="http://pysvn.tigris.org/", license="Apache Software License", keywords="subversion", ext_modules = [ setuptools.Extension( '_pysvn', []) # This used to tell setuptools that # there is native extension, but # they're not build using setuptools. ], classifiers=[ "Topic :: Software Development :: Version Control", ], ) pysvn-1.7.8/Source/000755 000771 000771 00000000000 12204167352 014454 5ustar00barrybarry000000 000000 pysvn-1.7.8/Tests/000755 000771 000771 00000000000 12204167354 014320 5ustar00barrybarry000000 000000 pysvn-1.7.8/Tests/benchmark_diff.py000644 000771 000771 00000021243 12204140710 017601 0ustar00barrybarry000000 000000 ''' ==================================================================== Copyright (c) 2005-2011 Barry A Scott. All rights reserved. This software is licensed as described in the file LICENSE.txt, which you should have received as part of this distribution. ==================================================================== ''' import sys import os import re import pprint import difflib _debug = False class LiteralMatch: def __init__( self, start, end ): self.start_pos = start self.end_pos = end def start( self ): return self.start_pos def end( self ): return self.end_pos class LiteralSearch: def __init__( self, substring ): self.substring = substring def search( self, line ): try: start_pos = line.index( self.substring ) end_pos = start_pos + len(self.substring) return LiteralMatch( start_pos, end_pos ) except ValueError: return None class LiteralCaseBlindSearch: def __init__( self, substring ): self.substring = substring.lower() def search( self, line ): try: start_pos = line.lower().index( self.substring ) end_pos = start_pos + len(self.substring) return LiteralMatch( start_pos, end_pos ) except ValueError: return None class ReplaceDirtInString: def __init__( self, lines_list, svn_version ): self.lines_list = lines_list self.workdir = self.find( 'WorkDir' ) self.python = self.find( 'PYTHON' ) self.username = self.find( 'Username' ) self.svn_version = svn_version self.txn_replacement = None if self.svn_version is not None: if self.svn_version[0] > 1 or (self.svn_version[0] == 1 and self.svn_version[1] >= 8): self.txn_replacement = 'svn:txn-client-compat-version: %d.%d.%d' % self.svn_version # ------------------------------------------------------------------------ # Version strings: # Date/Timestamps: # 2001-03-27-15-36-10 # 19-Mar-01 14:52:12 # Jan 20 14:35 # Jan 20 2004 # UUID: # 467a5469-d6df-e448-9de8-282096145563 # Directory path: # Drawn from TestRoot: xxxx # Username, Hostname: # Drawn from Username: xxx & Hostname: xxx # dateAlphaNumeric_re = re.compile(r'\d+-[JFMASOND][a-z][a-z]-\d+ [ 0-9]\d:\d\d:\d\d') dateNumeric_re = re.compile(r'\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d(.\d+)?Z?') dateUnixLs1_re = re.compile(r'[JFMASOND][a-z][a-z] \d+ \d\d:\d\d') dateUnixLs2_re = re.compile(r'[JFMASOND][a-z][a-z] \d\d\d\d') uuid_re = re.compile(r'[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}') pristine_re = re.compile( r'pristine[/\\][0-9a-z]{2}[/\\][0-9a-z]{40}' ) checksum_re = re.compile(r'[0-9a-z]{32}') tmpSvnFile_re = re.compile(r'[/\\].svn[/\\]tmp[/\\]tempfile.\d+.tmp|[/\\].svn[/\\]tmp[/\\]svn-[a-zA-Z0-9]+') self.replacement_list = [ (pristine_re, 'pristine/'), (dateAlphaNumeric_re, ''), (dateNumeric_re, ''), (uuid_re, ''), (checksum_re, ''), (dateUnixLs1_re, ''), (dateUnixLs2_re, ''), (tmpSvnFile_re, '/.svn/tmp/'), ] if self.workdir: workdir_re1 = LiteralCaseBlindSearch( self.workdir ) workdir_re2 = LiteralCaseBlindSearch( os.path.realpath( self.workdir ) ) self.replacement_list.append( (workdir_re1, '') ) self.replacement_list.append( (workdir_re2, '') ) if self.python: python_re = LiteralCaseBlindSearch( self.python ) self.replacement_list.append( (python_re, '') ) if True: # must replace username after workdir username_spaces_re = re.compile( r'\b'+self.username+' * ' ) self.replacement_list.append( (username_spaces_re, ' ') ) username_re = re.compile( r': %s\b' % self.username ) self.replacement_list.append( (username_re, ': ') ) username_re = LiteralSearch( '| %s |' % self.username ) self.replacement_list.append( (username_re, '| |') ) def find( self, keyword ): for line in self.lines_list: parts = line.split( ':' ) if parts[0] == keyword: value = (':'.join( parts[1:] ) ).strip() if _debug: print( 'find( %s ) -> %s' % (keyword, value) ) return value return '' def execute( self ): return [self.replace( line ) for line in self.lines_list] def replace( self, line ): if _debug: print( 'Processing: %r' % (line,) ) for re_expr, replacement_text in self.replacement_list: while 1: if _debug: print( '...trying: %r' % (replacement_text,) ) match = re_expr.search( line ) if match == None: break line = line[0:match.start()] + replacement_text + line[match.end():] if _debug: print( '...update line: %r' % (line,) ) x = line.startswith( 'svn:txn-client-compat-version: ' ) if( self.txn_replacement is not None and line.startswith( 'svn:txn-client-compat-version: ' ) ): line = self.txn_replacement if _debug: print( '...update line: %r' % (line,) ) return line def stripDirty( filename, svn_version ): f = open(filename, 'r') contents = f.read() f.close() lines = contents.replace( '\r\n', '\n' ).replace( '\r', '\n' ).split( '\n' ) replace = ReplaceDirtInString( lines, svn_version ) stripped_lines = replace.execute() return stripped_lines # ------------------------------------------------------------------------ # main def main( argv ): try: svn_version = tuple( [int(x) for x in argv[1].split('.')] ) benchmark_file = argv[2] results_file = argv[3] print( 'Info: SVN Version %d.%d.%d' % svn_version ) print( 'Info: Comparing %s' % benchmark_file ) benchmark = stripDirty( benchmark_file, svn_version ) if _debug: print( 'Debug: benchmark after we called stripDirty' ) pprint.pprint( benchmark ) print( 'Info: Against %s' % results_file ) results = stripDirty( results_file, None ) if _debug: print( 'Debug: results after we called stripDirty' ) pprint.pprint( results ) f = open( results_file + '.clean', 'w' ) for line in results: f.write( line + '\n' ) f.close() f = open( benchmark_file + '.clean', 'w' ) for line in benchmark: f.write( line + '\n' ) f.close() if results != benchmark: print( 'Error: Test failed - %s' % results_file ) sm = difflib.SequenceMatcher() sm.set_seq1( benchmark ) sm.set_seq2( results ) opcodes = sm.get_opcodes() for tag, i1, i2, j1, j2 in opcodes: if tag in ['delete','insert','replace']: print( 'Error: --------------------------------------------------------------------------------' ) if tag in ['delete','replace']: for line_index in range(i1,i2): prefix = 'Benchmark(%d) %7s' % (line_index+1, tag) print( 'Error: %26s %s' % (prefix, benchmark[line_index]) ) if tag in ['insert','replace']: for line_index in range(j1,j2): prefix = 'Result(%d) %7s' % (line_index+1, tag) print( 'Error: %26s %s' % (prefix, results[line_index]) ) print( 'Error: --------------------------------------------------------------------------------' ) return 1 else: print( 'Info: Test succeeded' ) return 0 except IOError as e: print( 'Error: %s' % e ) return 2 # ------------------------------------------------------------------------ if __name__ == "__main__": sys.exit( main( sys.argv ) ) pysvn-1.7.8/Tests/find.py000644 000771 000771 00000001130 11615325744 015611 0ustar00barrybarry000000 000000 # # find.py # # It turns out that Mac OS X and linux sort do not use the same # ordering. Python allows for a portable and reliable. # import os import sys all_files = [] def walk( dirname, all_files ): for filename in os.listdir( dirname ): if filename not in ['.svn']: filename = os.path.join( dirname, filename ) if os.path.isdir( filename ): walk( filename, all_files ) else: all_files.append( filename ) walk( sys.argv[1], all_files ) all_files.sort() for filename in all_files: print( filename ) pysvn-1.7.8/Tests/run_test.cmd000644 000771 000771 00000000154 11264403350 016642 0ustar00barrybarry000000 000000 nmake -f win32.mak SVN_VER_MAJ_MIN=%SVN_VER_MAJ_MIN% KNOWN_GOOD_VERSION=py%PY_MAJ%-svn%SVN_VER_MAJ_MIN% %* pysvn-1.7.8/Tests/svn_min_version.py000644 000771 000771 00000001040 11076210000 020062 0ustar00barrybarry000000 000000 import pysvn import sys def main(argv): print( 'Info: Checking for min version: %s against SVN version %s' % ('.'.join(argv[1:]), pysvn.svn_version) ) for index in range(1,len(argv)): if pysvn.svn_version[ index-1 ] > int( argv[ index ] ): break if pysvn.svn_version[ index-1 ] < int( argv[ index ] ): print( 'Warning: SVN version is not new enough' ) return 1 print( 'Info: SVN version is new enough' ) return 0 if __name__ == '__main__': sys.exit( main( sys.argv ) ) pysvn-1.7.8/Tests/test-01.cmd000644 000771 000771 00000021244 11264403350 016177 0ustar00barrybarry000000 000000 @echo off @prompt $P$S$G @echo WorkDir: %WORKDIR% @echo PYTHON: %PYTHON% @echo Username: %USERNAME% setlocal set PYTHONPATH=%WORKDIR%\Source;%WORKDIR%\Examples\Client set PYSVN=%PYTHON% %WORKDIR%\Examples\Client\svn_cmd.py --pysvn-testing 01.01.00 --config-dir b:\configdir echo Info: PYSVN CMD %PYSVN% call :cmd_shell mkdir testroot-01 call :cmd_shell subst b: %CD%\testroot-01 call :cmd_shell cd /d b:\ call :cmd_shell svnadmin create b:\repos echo Info: Test - mkdir call :cmd_pysvn mkdir file:///b:/repos/trunk -m "test-01 add trunk" call :cmd_pysvn mkdir file:///b:/repos/trunk/test -m "test-01 add test" echo Info: Test - ls call :cmd_pysvn ls file:///b:/repos -v -R echo Info: Test - checkout call :cmd_pysvn checkout file:///b:/repos/trunk b:\wc1 call :cmd_shell dir b:\wc1 /s /b /a-h call :cmd_shell cd /d b:\wc1\test echo Info: Test - add call :cmd_createfile file1.txt test add file 1 call :cmd_createfile file2.txt test add file 2 call :cmd_createfile file3.txt test add file 3 call :cmd_createfile file4.txt test add file 4 call :cmd_createfile file5.txt test add file 5 call :cmd_shell mkdir folder1 call :cmd_createfile folder1\file7.txt test add file 7 call :cmd_shell mkdir folder1\folder2 call :cmd_createfile folder1\folder2\file8.txt test add file 8 call :cmd_shell mkdir folder3 call :cmd_createfile folder3\file9.txt test add file 9 call :cmd_shell mkdir folder3\folder4 call :cmd_createfile folder3\folder4\file10.txt test add file 10 call :cmd_pysvn add file1.txt call :cmd_pysvn add file2.txt call :cmd_pysvn add file3.txt call :cmd_pysvn add file4.txt call :cmd_pysvn add --force file5.txt call :cmd_pysvn add folder1 call :cmd_pysvn add --non-recursive folder3 call :cmd_pysvn checkin -m "commit added files" echo Info: Test - update - get a new wc that will update call :cmd_pysvn checkout file:///b:/repos/trunk b:\wc2 echo Info: Test - - checkin a mod from wc1 call :cmd_appendfile b:\wc1\test\file1.txt line 2 call :cmd_pysvn checkin -m "commit modified file" call :cmd_pysvn checkin -m "commit modified file" echo Info: Test - update call :cmd_pysvn update b:\wc2 echo Info: Test - the rest in lexical order echo Info: Test - annotate call :cmd_pysvn annotate b:\wc2\test\file1.txt echo Info: Test - cat call :cmd_pysvn cat -r head file:///b:/repos/trunk/test/file1.txt echo Info: Test - cleanup echo Info: Test - copy call :cmd_pysvn mkdir file:///b:/repos/tags -m "test-01 add tags" call :cmd_createfile msg.tmp tag the trunk call :cmd_pysvn copy file:///b:/repos/trunk file:///b:/repos/tags/version1 %FILENAME% goto :eof :cmd_appendfile set FILENAME=%1 shift echo Info: Append File %FILENAME% - %1 %2 %3 %4 %5 %6 %7 %8 %9 call :cmd__echo %1 %2 %3 %4 %5 %6 %7 %8 %9 >>%FILENAME% goto :eof :cmd__echo echo %* goto :eof pysvn-1.7.8/Tests/test-01.sh000755 000771 000771 00000021075 11507354105 016056 0ustar00barrybarry000000 000000 #!/bin/sh # need to get rid of any symbolic links in the WORKDIR export WORKDIR=$( ${PYTHON} -c 'import os;os.chdir("..");print( os.getcwd() )' ) cd ${WORKDIR}/Tests echo WorkDir: ${WORKDIR} echo PYTHON: ${PYTHON} echo Username: $(id -u -n) cmd () { echo Info: CWD: $(pwd) echo Info: Command: $* "$@" } cmd_pysvn () { echo Info: CWD: $(pwd) echo Info: pysvn command: $* ${PYSVN} "$@" } cmd mkdir testroot-01 cmd cd testroot-01 TESTROOT=${WORKDIR}/Tests/testroot-01 cmd mkdir tmp export TMPDIR=${TESTROOT}/tmp export PYTHONPATH=${WORKDIR}/Source:${WORKDIR}/Examples/Client export PYSVN="${PYTHON} ${WORKDIR}/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir ${TESTROOT}/configdir" echo Info: PYSVN command ${PYSVN} cmd svnadmin create ${TESTROOT}/repos echo Info: Testing - mkdir cmd_pysvn mkdir file://${TESTROOT}/repos/trunk -m "test-01 add trunk" cmd_pysvn mkdir file://${TESTROOT}/repos/trunk/test -m "test-01 add test" echo Info: Testing - ls cmd_pysvn ls file://${TESTROOT}/repos -v -R echo Info: Testing - checkout cmd_pysvn checkout file://${TESTROOT}/repos/trunk ${TESTROOT}/wc1 cmd ${PYTHON} ${WORKDIR}/Tests/find.py ${TESTROOT}/wc1 cmd cd ${TESTROOT}/wc1/test echo Info: Testing - add echo test add file 1 >file1.txt echo test add file 2 >file2.txt echo test add file 3 >file3.txt echo test add file 4 >file4.txt echo test add file 5 >file5.txt echo test add file 6 >file6.txt mkdir folder1 echo test add file 7 >folder1/file7.txt mkdir folder1/folder2 echo test add file 8 >folder1/folder2/file8.txt mkdir folder3 echo test add file 9 >folder3/file9.txt mkdir folder3/folder4 echo test add file 10 >folder3/folder4/file10.txt cmd_pysvn add file1.txt cmd_pysvn add file2.txt cmd_pysvn add file3.txt cmd_pysvn add file4.txt cmd_pysvn add --force file5.txt cmd_pysvn add file6.txt cmd_pysvn add folder1 cmd_pysvn add --non-recursive folder3 cmd_pysvn checkin -m "commit added files" echo Info: Setup to test access to deleted files echo test mod file 6 >>file6.txt cmd_pysvn checkin -m "commit mod file" cmd_pysvn rm file6.txt cmd_pysvn checkin -m "commit delete file" echo Info: Testing - update - get a new wc that will update cmd_pysvn checkout file://${TESTROOT}/repos/trunk ${TESTROOT}/wc2 echo Info: Testing - - checkin a mod from wc1 echo line 2 >>${TESTROOT}/wc1/test/file1.txt cmd_pysvn checkin -m "commit modified file" echo Info: Testing - update cmd_pysvn update ${TESTROOT}/wc2 echo Info: Testing - the rest in lexical order echo Info: Testing - annotate cmd_pysvn annotate ${TESTROOT}/wc2/test/file1.txt cmd_pysvn annotate -r 3:4 file://${TESTROOT}/repos/trunk/test/file6.txt echo Info: Testing - cat cmd_pysvn cat -r head file://${TESTROOT}/repos/trunk/test/file1.txt cmd_pysvn cat -r 4 file://${TESTROOT}/repos/trunk/test/file6.txt echo Info: Testing - cleanup echo Info: Testing - copy cmd_pysvn mkdir file://${TESTROOT}/repos/tags -m "test-01 add tags" echo tag the trunk >msg.tmp cmd_pysvn copy file://${TESTROOT}/repos/trunk file://${TESTROOT}/repos/tags/version1 >${TESTROOT}/wc2/test/file1b.txt cmd_pysvn diff ${TESTROOT}/wc2 echo Info: Testing - export cmd_pysvn export file://${TESTROOT}/repos/trunk/test ${TESTROOT}/export1.native cmd_pysvn export --native-eol CR file://${TESTROOT}/repos/trunk/test ${TESTROOT}/export1.cr cmd_pysvn export --native-eol LF file://${TESTROOT}/repos/trunk/test ${TESTROOT}/export1.lf cmd_pysvn export --native-eol CRLF file://${TESTROOT}/repos/trunk/test ${TESTROOT}/export1.crlf ${PYTHON} ${WORKDIR}/Tests/find.py ${TESTROOT}/export1.native ${PYTHON} ${WORKDIR}/Tests/find.py ${TESTROOT}/export1.cr ${PYTHON} ${WORKDIR}/Tests/find.py ${TESTROOT}/export1.lf ${PYTHON} ${WORKDIR}/Tests/find.py ${TESTROOT}/export1.crlf echo Info: Testing - import echo Info: Testing - info cmd_pysvn info ${TESTROOT}/wc2/test cmd_pysvn info ${TESTROOT}/wc2/test/file1.txt echo Info: Testing - log cmd_pysvn log ${TESTROOT}/wc2 echo Info: Testing - ls cmd_pysvn ls file://${TESTROOT}/repos/trunk/test cmd_pysvn ls -v file://${TESTROOT}/repos/trunk/test cmd_pysvn ls ${TESTROOT}/wc2/test cmd_pysvn ls -v ${TESTROOT}/wc2/test echo Info: Testing - merge - done below echo Info: Testing - mkdir - done above echo Info: Testing - move echo move url test >msg.tmp cmd_pysvn move file://${TESTROOT}/repos/trunk/test/file2.txt file://${TESTROOT}/repos/trunk/test/file2b.txt >${TESTROOT}/wc1/test/file4.txt cmd_pysvn checkin ${TESTROOT}/wc1 -m "change wc1 for status -u to detect" cmd_pysvn status ${TESTROOT}/wc2 cmd_pysvn status --verbose ${TESTROOT}/wc2 cmd_pysvn status --show-updates ${TESTROOT}/wc2 cmd_pysvn status --show-updates --verbose ${TESTROOT}/wc2 cmd_pysvn update cmd_pysvn status --show-updates ${TESTROOT}/wc2 cmd_pysvn status --show-updates --verbose ${TESTROOT}/wc2 cmd_pysvn checkin ${TESTROOT}/wc2 -m "prop change" echo Info: Testing - propdel cd ${TESTROOT}/wc2/test cmd_pysvn propset test:prop1 del_me file4.txt cmd_pysvn proplist -v file4.txt cmd_pysvn propdel test:prop1 file4.txt cmd_pysvn proplist -v file4.txt echo Info: Testing - propget cmd_pysvn propset svn:eol-style native file4.txt cmd_pysvn propget svn:eol-style file4.txt cmd_pysvn propget unknown file4.txt echo Info: Testing - proplist - see above echo Info: Testing - propset cd ${TESTROOT}/wc2/test cmd_pysvn proplist -v file4.txt cmd_pysvn propset svn:eol-style native file4.txt cmd_pysvn proplist -v file4.txt echo Info: Testing - remove cd ${TESTROOT}/wc2/test cmd_pysvn remove file5.txt cmd_pysvn status echo Info: Testing - resolved echo conflict in file4 yes >>${TESTROOT}/wc1/test/file4.txt echo conflict in file4 no >>${TESTROOT}/wc2/test/file4.txt cmd_pysvn checkin ${TESTROOT}/wc1/test -m "make a conflict part 1" cmd_pysvn update ${TESTROOT}/wc2/test cmd_pysvn status cmd cp ${TESTROOT}/wc2/test/file4.txt.mine ${TESTROOT}/wc2/test/file4.txt cmd_pysvn resolved ${TESTROOT}/wc2/test/file4.txt cmd_pysvn checkin ${TESTROOT}/wc2/test/file4.txt -m "resolve a confict part 2" echo Info: Testing - revert cmd_pysvn revert file5.txt cmd_pysvn status echo Info: Testing - revproplist cmd_pysvn revproplist file://${TESTROOT}/repos/trunk echo Info: Testing - revpropget cmd_pysvn revpropget svn:log file://${TESTROOT}/repos/trunk cmd_pysvn revpropget no_such_prop file://${TESTROOT}/repos/trunk echo Info: Testing - revpropset cmd_pysvn revpropset svn:log "Hello world" file://${TESTROOT}/repos/trunk echo Info: Testing - revpropdel cmd_pysvn revpropdel svn:log file://${TESTROOT}/repos/trunk echo Info: Testing - status - see above echo Info: Testing - relocate cmd mkdir ${TESTROOT}/root cmd mv ${TESTROOT}/repos ${TESTROOT}/root cmd_pysvn info ${TESTROOT}/wc1 cmd_pysvn relocate file://${TESTROOT}/repos/trunk file://${TESTROOT}/root/repos/trunk ${TESTROOT}/wc1 cmd_pysvn info ${TESTROOT}/wc1 cmd_pysvn info ${TESTROOT}/wc2 cmd_pysvn relocate file://${TESTROOT}/repos/trunk file://${TESTROOT}/root/repos/trunk ${TESTROOT}/wc2 cmd_pysvn info ${TESTROOT}/wc2 echo Info: Testing - switch cmd_pysvn info ${TESTROOT}/wc2 cmd_pysvn switch ${TESTROOT}/wc2 file://${TESTROOT}/root/repos/tags/version1 cmd_pysvn info ${TESTROOT}/wc2 echo Info: Testing - update - see above echo Info: Testing - merge cmd_pysvn checkout file://${TESTROOT}/root/repos/trunk ${TESTROOT}/wc3 cmd cd ${TESTROOT}/wc3/test echo test add file merge 1 >file-merge-1.txt echo test add file merge 2 >file-merge-2.txt cmd_pysvn add file-merge-1.txt cmd_pysvn add file-merge-2.txt cmd_pysvn commit -m "add test merge files" . echo make a branch >msg.tmp cmd_pysvn copy file://${TESTROOT}/root/repos/trunk/test file://${TESTROOT}/root/repos/trunk/test-branch file-merge-3.txt cmd_pysvn add file-merge-3.txt cmd_pysvn rm file-merge-1.txt echo modify merge 2 >>file-merge-2.txt cmd_pysvn commit -m "change test merge files" . cmd_pysvn merge --dry-run --revision 16:17 file://${TESTROOT}/root/repos/trunk/test ${TESTROOT}/wc3/test-branch cmd_pysvn merge --revision 16:17 file://${TESTROOT}/root/repos/trunk/test ${TESTROOT}/wc3/test-branch cmd_pysvn status ${TESTROOT}/wc3/test-branch cmd_pysvn diff ${TESTROOT}/wc3/test-branch cmd ${PYTHON} ${WORKDIR}/Tests/test_01_set_get_tests.py ${TESTROOT}/configdir pysvn-1.7.8/Tests/test-01.unix.known_good-py2-svn1.4.log000644 000771 000771 00000123325 11253135715 023111 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Users/barry/bin/python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: mkdir tmp Info: PYSVN command /Users/barry/bin/python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos Info: Testing - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk -m test-01 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test -m test-01 add test Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos -v -R 2 barry 0 23-Sep-2006 19:01:20 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk 2 barry 0 23-Sep-2006 19:01:20 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Info: Testing - checkout Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: python /Users/barry/wc/svn/pysvn/Extension/Tests/find.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/.svn/entries /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/.svn/format /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/.svn/entries /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/.svn/format Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: Testing - add Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file3.txt A file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file4.txt A file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --force file5.txt A file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file6.txt A file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit added files A test/file1.txt A test/file2.txt A test/file3.txt A test/file4.txt A test/file5.txt A test/file6.txt Revision 3 Info: Setup to test access to deleted files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit mod file M test/file6.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: rm file6.txt D file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit delete file D test/file6.txt Revision 5 Info: Testing - update - get a new wc that will update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Checked out revision 5 Info: Testing - - checkin a mod from wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit modified file M test/file1.txt Revision 6 Info: Testing - update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Updated to revision 6 Info: Testing - the rest in lexical order Info: Testing - annotate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2006-09-23T18:01:25.696316Z | test add file 1 1| r6 | barry | 2006-09-23T18:01:30.749997Z | line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate -r 3:4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt A /trunk/test/file6.txt A /trunk/test/file6.txt 0| r3 | barry | 2006-09-23T18:01:25.696316Z | test add file 6 1| r4 | barry | 2006-09-23T18:01:26.621185Z | test mod file 6 Info: Testing - cat Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r head file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt test add file 1 line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r 4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt test add file 6 test mod file 6 Info: Testing - cleanup Info: Testing - copy Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags -m test-01 add tags Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags 8 barry 0 23-Sep-2006 19:01:35 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m copy test A wc2/test/file1b.txt Revision 9 Info: Testing - diff Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (revision 9) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Testing - export Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CR file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol LF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CRLF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt Info: Testing - import Info: Testing - info Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Repository UUID: 1d0e2188-69a2-45af-83c4-dd8be320755e Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 23-Sep-2006 19:01:30 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt Repository UUID: 1d0e2188-69a2-45af-83c4-dd8be320755e Revision: 6 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 23-Sep-2006 19:01:30 Text Last Updated: 23-Sep-2006 19:01:31 Checksum: d17a5219a23a23ce7f363b75e09ec043 Info: Testing - log Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: log /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 ------------------------------------------------------------ rev 9: barry | 23-Sep-2006 19:01:38 | 1 lines copy test ------------------------------------------------------------ rev 6: barry | 23-Sep-2006 19:01:30 | 1 lines commit modified file ------------------------------------------------------------ rev 5: barry | 23-Sep-2006 19:01:28 | 1 lines commit delete file ------------------------------------------------------------ rev 4: barry | 23-Sep-2006 19:01:26 | 1 lines commit mod file ------------------------------------------------------------ rev 3: barry | 23-Sep-2006 19:01:25 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 23-Sep-2006 19:01:20 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 23-Sep-2006 19:01:19 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test 6 barry 23 23-Sep-2006 19:01:30 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt 9 barry 23 23-Sep-2006 19:01:38 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt 3 barry 16 23-Sep-2006 19:01:25 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt 3 barry 16 23-Sep-2006 19:01:25 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt 3 barry 16 23-Sep-2006 19:01:25 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt 3 barry 16 23-Sep-2006 19:01:25 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 barry 23 23-Sep-2006 19:01:30 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 9 barry 23 23-Sep-2006 19:01:38 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 3 barry 16 23-Sep-2006 19:01:25 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 3 barry 16 23-Sep-2006 19:01:25 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt 3 barry 16 23-Sep-2006 19:01:25 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 3 barry 16 23-Sep-2006 19:01:25 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt Info: Testing - merge - done below Info: Testing - mkdir - done above Info: Testing - move Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2b.txt Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m move wc test A wc2/test/file3b.txt D wc2/test/file3.txt M wc2/test/file1b.txt Revision 11 Info: Testing - status Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 -m change wc1 for status -u to detect M test/file4.txt Revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update A file1b.txt A file2b.txt A file3b.txt D file2.txt D file3.txt Updated to revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m prop change Nothing to commit Info: Testing - propdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset test:prop1 del_me file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propdel test:prop1 file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Info: Testing - propget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget svn:eol-style file4.txt file4.txt: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget unknown file4.txt Info: Testing - proplist - see above Info: Testing - propset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Testing - remove Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: remove file5.txt D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status M file4.txt D file5.txt Info: Testing - resolved Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test -m make a conflict part 1 M wc1/test/file4.txt Revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Updated to revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status CM file4.txt ? file4.txt.mine ? file4.txt.r13 ? file4.txt.r6 D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.mine /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: resolved /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt R /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt -m resolve a confict part 2 M file4.txt Revision 14 Info: Testing - revert Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revert file5.txt R file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status Info: Testing - revproplist Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revproplist file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:author: barry svn:date: 2006-09-23T18:02:03.809429Z svn:log: resolve a confict part 2 Info: Testing - revpropget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:log: resolve a confict part 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget no_such_prop file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 no_such_prop: None Info: Testing - revpropset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropset svn:log Hello world file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - revpropdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropdel svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - status - see above Info: Testing - relocate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mkdir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mv /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: 1d0e2188-69a2-45af-83c4-dd8be320755e Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 23-Sep-2006 19:01:20 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 1d0e2188-69a2-45af-83c4-dd8be320755e Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 23-Sep-2006 19:01:20 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: 1d0e2188-69a2-45af-83c4-dd8be320755e Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 23-Sep-2006 19:01:30 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 1d0e2188-69a2-45af-83c4-dd8be320755e Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 23-Sep-2006 19:01:30 Info: Testing - switch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 1d0e2188-69a2-45af-83c4-dd8be320755e Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 23-Sep-2006 19:01:30 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: switch /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 Repository UUID: 1d0e2188-69a2-45af-83c4-dd8be320755e Revision: 14 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 8 Last Changed Date: 23-Sep-2006 19:01:35 Info: Testing - update - see above Info: Testing - merge Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file5.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 Checked out revision 14 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-1.txt A file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-2.txt A file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m add test merge files . A test/file-merge-1.txt A test/file-merge-2.txt Revision 15 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test-branch Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Updated to revision 16 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-3.txt A file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: rm file-merge-1.txt D file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m change test merge files . A test/file-merge-3.txt D test/file-merge-1.txt M test/file-merge-2.txt Revision 17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --dry-run --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt skip /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A + /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: Command: /Users/barry/bin/python /Users/barry/wc/svn/pysvn/Extension/Tests/test_01_set_get_tests.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 pysvn-1.7.8/Tests/test-01.unix.known_good-py2-svn1.5.log000644 000771 000771 00000147162 11264412526 023117 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos Info: Testing - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk -m test-01 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test -m test-01 add test Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos -v -R 2 barry 0 11-Oct-2009 18:20:37 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk 2 barry 0 11-Oct-2009 18:20:37 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Info: Testing - checkout Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: python /Users/barry/wc/svn/pysvn/Extension/Tests/find.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/.svn/entries /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/.svn/format /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/.svn/entries /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/.svn/format Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: Testing - add Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file3.txt A file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file4.txt A file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --force file5.txt A file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file6.txt A file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add folder1 A folder1 A folder1/file7.txt A folder1/folder2 A folder1/folder2/file8.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --non-recursive folder3 A folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit added files A test/file1.txt A test/file2.txt A test/file3.txt A test/file4.txt A test/file5.txt A test/file6.txt A test/folder1 A test/folder1/file7.txt A test/folder1/folder2 A test/folder1/folder2/file8.txt A test/folder3 Revision 3 Info: Setup to test access to deleted files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit mod file M test/file6.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: rm file6.txt D file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit delete file D test/file6.txt Revision 5 Info: Testing - update - get a new wc that will update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Checked out revision 5 Info: Testing - - checkin a mod from wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit modified file M test/file1.txt Revision 6 Info: Testing - update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Updated to revision 6 Info: Testing - the rest in lexical order Info: Testing - annotate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2009-10-11T17:20:38.891999Z | test add file 1 1| r6 | barry | 2009-10-11T17:20:42.178592Z | line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate -r 3:4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt A /trunk/test/file6.txt A /trunk/test/file6.txt 0| r3 | barry | 2009-10-11T17:20:38.891999Z | test add file 6 1| r4 | barry | 2009-10-11T17:20:39.209123Z | test mod file 6 Info: Testing - cat Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r head file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt test add file 1 line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r 4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt test add file 6 test mod file 6 Info: Testing - cleanup Info: Testing - copy Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags -m test-01 add tags Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags 8 barry 0 11-Oct-2009 18:20:44 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m copy test A wc2/test/file1b.txt Revision 9 Info: Testing - diff Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (revision 9) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Testing - export Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CR file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol LF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CRLF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder3 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt Info: Testing - import Info: Testing - info Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Repository UUID: 423b75ad-6902-4286-a87d-8ad4aa527903 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 11-Oct-2009 18:20:42 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt Repository UUID: 423b75ad-6902-4286-a87d-8ad4aa527903 Revision: 6 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 11-Oct-2009 18:20:42 Text Last Updated: 11-Oct-2009 18:20:43 Checksum: d17a5219a23a23ce7f363b75e09ec043 Info: Testing - log Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: log /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 ------------------------------------------------------------ rev 9: barry | 11-Oct-2009 18:20:45 | 1 lines copy test ------------------------------------------------------------ rev 6: barry | 11-Oct-2009 18:20:42 | 1 lines commit modified file ------------------------------------------------------------ rev 5: barry | 11-Oct-2009 18:20:40 | 1 lines commit delete file ------------------------------------------------------------ rev 4: barry | 11-Oct-2009 18:20:39 | 1 lines commit mod file ------------------------------------------------------------ rev 3: barry | 11-Oct-2009 18:20:38 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 11-Oct-2009 18:20:37 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 11-Oct-2009 18:20:37 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test 6 barry 23 11-Oct-2009 18:20:42 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt 9 barry 23 11-Oct-2009 18:20:45 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt 3 barry 16 11-Oct-2009 18:20:38 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt 3 barry 16 11-Oct-2009 18:20:38 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt 3 barry 16 11-Oct-2009 18:20:38 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt 3 barry 16 11-Oct-2009 18:20:38 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt 3 barry 0 11-Oct-2009 18:20:38 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 3 barry 0 11-Oct-2009 18:20:38 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 barry 23 11-Oct-2009 18:20:42 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 9 barry 23 11-Oct-2009 18:20:45 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 3 barry 16 11-Oct-2009 18:20:38 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 3 barry 16 11-Oct-2009 18:20:38 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt 3 barry 16 11-Oct-2009 18:20:38 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 3 barry 16 11-Oct-2009 18:20:38 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 3 barry 0 11-Oct-2009 18:20:38 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 3 barry 0 11-Oct-2009 18:20:38 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: Testing - merge - done below Info: Testing - mkdir - done above Info: Testing - move Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2b.txt Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m move wc test A wc2/test/file3b.txt D wc2/test/file3.txt M wc2/test/file1b.txt Revision 11 Info: Testing - status Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 -m change wc1 for status -u to detect M test/file4.txt Revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update A file1b.txt A file2b.txt A file3b.txt D file2.txt D file3.txt Updated to revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m prop change Nothing to commit Info: Testing - propdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset test:prop1 del_me file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propdel test:prop1 file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Info: Testing - propget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget svn:eol-style file4.txt file4.txt: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget unknown file4.txt Info: Testing - proplist - see above Info: Testing - propset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Testing - remove Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: remove file5.txt D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status M file4.txt D file5.txt Info: Testing - resolved Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test -m make a conflict part 1 M wc1/test/file4.txt Revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test callback_conflict_resolver action: base_file: u'/Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/text-base/file4.txt.svn-base' is_binary: False kind: merged_file: u'/Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/tmp/tempfile.3.tmp' mime_type: None my_file: u'/Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/tmp/tempfile.2.tmp' node_kind: path: '/Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt' property_name: None reason: their_file: u'/Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/tmp/text-base/file4.txt.svn-base' A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Updated to revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status CM file4.txt ? file4.txt.mine ? file4.txt.r13 ? file4.txt.r6 D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.mine /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: resolved /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt R /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt -m resolve a confict part 2 M file4.txt Revision 14 Info: Testing - revert Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revert file5.txt R file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status Info: Testing - revproplist Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revproplist file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:author: barry svn:date: 2009-10-11T17:20:54.318633Z svn:log: resolve a confict part 2 Info: Testing - revpropget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:log: resolve a confict part 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget no_such_prop file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 no_such_prop: None Info: Testing - revpropset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropset svn:log Hello world file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - revpropdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropdel svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - status - see above Info: Testing - relocate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mkdir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mv /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: 423b75ad-6902-4286-a87d-8ad4aa527903 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 11-Oct-2009 18:20:37 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 423b75ad-6902-4286-a87d-8ad4aa527903 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 11-Oct-2009 18:20:37 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: 423b75ad-6902-4286-a87d-8ad4aa527903 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 11-Oct-2009 18:20:42 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 423b75ad-6902-4286-a87d-8ad4aa527903 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 11-Oct-2009 18:20:42 Info: Testing - switch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 423b75ad-6902-4286-a87d-8ad4aa527903 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 11-Oct-2009 18:20:42 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: switch /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 Repository UUID: 423b75ad-6902-4286-a87d-8ad4aa527903 Revision: 14 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 8 Last Changed Date: 11-Oct-2009 18:20:44 Info: Testing - update - see above Info: Testing - merge Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 Checked out revision 14 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-1.txt A file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-2.txt A file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m add test merge files . A test/file-merge-1.txt A test/file-merge-2.txt Revision 15 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test-branch Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Updated to revision 16 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-3.txt A file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: rm file-merge-1.txt D file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m change test merge files . A test/file-merge-3.txt D test/file-merge-1.txt M test/file-merge-2.txt Revision 17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --dry-run --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt MM /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A + /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r17* Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1b.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file2b.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file4.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file3b.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file5.txt:r17 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-2.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-3.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1.txt:r17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: Command: /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_01_set_get_tests.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 pysvn-1.7.8/Tests/test-01.unix.known_good-py2-svn1.6.log000644 000771 000771 00000152340 12070137651 023111 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos Info: Testing - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk -m test-01 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test -m test-01 add test Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos -v -R 2 barry 0 30-Dec-2012 22:24:12 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk 2 barry 0 30-Dec-2012 22:24:12 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Info: Testing - checkout Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/find.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: Testing - add Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file3.txt A file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file4.txt A file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --force file5.txt A file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file6.txt A file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add folder1 A folder1 A folder1/file7.txt A folder1/folder2 A folder1/folder2/file8.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --non-recursive folder3 A folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder3 Revision 3 Info: Setup to test access to deleted files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit mod file M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: rm file6.txt D file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit delete file D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Revision 5 Info: Testing - update - get a new wc that will update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Checked out revision 5 Info: Testing - - checkin a mod from wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit modified file M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt Revision 6 Info: Testing - update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Updated to revision 6 Info: Testing - the rest in lexical order Info: Testing - annotate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2012-12-30T22:24:13.512171Z | test add file 1 1| r6 | barry | 2012-12-30T22:24:17.081941Z | line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate -r 3:4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt A /trunk/test/file6.txt A /trunk/test/file6.txt 0| r3 | barry | 2012-12-30T22:24:13.512171Z | test add file 6 1| r4 | barry | 2012-12-30T22:24:14.082196Z | test mod file 6 Info: Testing - cat Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r head file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt test add file 1 line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r 4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt test add file 6 test mod file 6 Info: Testing - cleanup Info: Testing - copy Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags -m test-01 add tags Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags 8 barry 0 30-Dec-2012 22:24:19 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m copy test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Revision 9 Info: Testing - diff Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (revision 9) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Testing - export Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CR file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol LF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CRLF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder3 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt Info: Testing - import Info: Testing - info Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Repository UUID: d64e48db-ce8a-466d-b5fd-aca4ae73dfd5 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 30-Dec-2012 22:24:17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt Repository UUID: d64e48db-ce8a-466d-b5fd-aca4ae73dfd5 Revision: 6 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 30-Dec-2012 22:24:17 Text Last Updated: 30-Dec-2012 22:24:18 Checksum: d17a5219a23a23ce7f363b75e09ec043 Info: Testing - log Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: log /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 ------------------------------------------------------------ rev 9: barry | 30-Dec-2012 22:24:20 | 1 lines copy test ------------------------------------------------------------ rev 6: barry | 30-Dec-2012 22:24:17 | 1 lines commit modified file ------------------------------------------------------------ rev 5: barry | 30-Dec-2012 22:24:15 | 1 lines commit delete file ------------------------------------------------------------ rev 4: barry | 30-Dec-2012 22:24:14 | 1 lines commit mod file ------------------------------------------------------------ rev 3: barry | 30-Dec-2012 22:24:13 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 30-Dec-2012 22:24:12 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 30-Dec-2012 22:24:12 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test 6 barry 23 30-Dec-2012 22:24:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt 9 barry 23 30-Dec-2012 22:24:20 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt 3 barry 16 30-Dec-2012 22:24:13 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt 3 barry 16 30-Dec-2012 22:24:13 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt 3 barry 16 30-Dec-2012 22:24:13 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt 3 barry 16 30-Dec-2012 22:24:13 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt 3 barry 0 30-Dec-2012 22:24:13 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 3 barry 0 30-Dec-2012 22:24:13 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 barry 23 30-Dec-2012 22:24:17 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 9 barry 23 30-Dec-2012 22:24:20 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 3 barry 16 30-Dec-2012 22:24:13 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 3 barry 16 30-Dec-2012 22:24:13 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt 3 barry 16 30-Dec-2012 22:24:13 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 3 barry 16 30-Dec-2012 22:24:13 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 3 barry 0 30-Dec-2012 22:24:13 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 3 barry 0 30-Dec-2012 22:24:13 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: Testing - merge - done below Info: Testing - mkdir - done above Info: Testing - move Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2b.txt Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m move wc test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Revision 11 Info: Testing - status Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 -m change wc1 for status -u to detect M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update A file1b.txt A file2b.txt A file3b.txt D file2.txt D file3.txt Updated to revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m prop change Nothing to commit Info: Testing - propdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset test:prop1 del_me file4.txt property_added file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propdel test:prop1 file4.txt property_deleted file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Info: Testing - propget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt property_added file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget svn:eol-style file4.txt file4.txt: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget unknown file4.txt Info: Testing - proplist - see above Info: Testing - propset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt property_modified file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Testing - remove Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: remove file5.txt D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status M file4.txt D file5.txt Info: Testing - resolved Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test -m make a conflict part 1 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test callback_conflict_resolver action: base_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/text-base/file4.txt.svn-base is_binary: False kind: merged_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/tmp/file4.txt.tmp mime_type: None my_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/tmp/svn-2Anz5J node_kind: operation: path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt property_name: None reason: src_left_version: None src_right_version: None their_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/tmp/text-base/file4.txt.svn-base A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Updated to revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status CM file4.txt ? file4.txt.mine ? file4.txt.r13 ? file4.txt.r6 D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.mine /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: resolved /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt R /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt -m resolve a confict part 2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Revision 14 Info: Testing - revert Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revert file5.txt R file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status Info: Testing - revproplist Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revproplist file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:author: barry svn:date: 2012-12-30T22:24:27.180956Z svn:log: resolve a confict part 2 Info: Testing - revpropget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:log: resolve a confict part 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget no_such_prop file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 no_such_prop: None Info: Testing - revpropset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropset svn:log Hello world file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - revpropdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropdel svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - status - see above Info: Testing - relocate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mkdir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mv /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: d64e48db-ce8a-466d-b5fd-aca4ae73dfd5 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 30-Dec-2012 22:24:12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: d64e48db-ce8a-466d-b5fd-aca4ae73dfd5 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 30-Dec-2012 22:24:12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: d64e48db-ce8a-466d-b5fd-aca4ae73dfd5 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 30-Dec-2012 22:24:17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: d64e48db-ce8a-466d-b5fd-aca4ae73dfd5 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 30-Dec-2012 22:24:17 Info: Testing - switch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: d64e48db-ce8a-466d-b5fd-aca4ae73dfd5 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 30-Dec-2012 22:24:17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: switch /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 Repository UUID: d64e48db-ce8a-466d-b5fd-aca4ae73dfd5 Revision: 14 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 8 Last Changed Date: 30-Dec-2012 22:24:19 Info: Testing - update - see above Info: Testing - merge Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 Checked out revision 14 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-1.txt A file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-2.txt A file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m add test merge files . A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Revision 15 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test-branch Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Updated to revision 16 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-3.txt A file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: rm file-merge-1.txt D file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m change test merge files . A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Revision 17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --dry-run --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_completed /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_completed /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt MM /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A + /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r17* Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1b.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file2b.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file4.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file3b.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file5.txt:r17 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-2.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-3.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1.txt:r17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_01_set_get_tests.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 pysvn-1.7.8/Tests/test-01.unix.known_good-py2-svn1.7.log000644 000771 000771 00000155574 12070641640 023124 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos Info: Testing - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk -m test-01 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test -m test-01 add test Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos -v -R 2 barry 0 01-Jan-2013 20:12:54 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk 2 barry 0 01-Jan-2013 20:12:54 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Info: Testing - checkout Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/find.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: Testing - add Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --force file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file6.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2/file8.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --non-recursive folder3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder3 Revision 3 Info: Setup to test access to deleted files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit mod file M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: rm file6.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit delete file D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Revision 5 Info: Testing - update - get a new wc that will update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Checked out revision 5 Info: Testing - - checkin a mod from wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit modified file M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt Revision 6 Info: Testing - update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Updated to revision 6 Info: Testing - the rest in lexical order Info: Testing - annotate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2013-01-01T20:12:55.565540Z | test add file 1 1| r6 | barry | 2013-01-01T20:12:59.084714Z | line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate -r 3:4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt A /trunk/test/file6.txt A /trunk/test/file6.txt 0| r3 | barry | 2013-01-01T20:12:55.565540Z | test add file 6 1| r4 | barry | 2013-01-01T20:12:56.086174Z | test mod file 6 Info: Testing - cat Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r head file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt test add file 1 line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r 4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt test add file 6 test mod file 6 Info: Testing - cleanup Info: Testing - copy Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags -m test-01 add tags Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags 8 barry 0 01-Jan-2013 20:13:01 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m copy test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Revision 9 Info: Testing - diff Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (revision 9) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Testing - export Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CR file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol LF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CRLF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder3 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt Info: Testing - import Info: Testing - info Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Repository UUID: 57adf7d8-48f0-4ae2-a42a-23b27a6713db Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 01-Jan-2013 20:12:59 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt Repository UUID: 57adf7d8-48f0-4ae2-a42a-23b27a6713db Revision: 6 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 01-Jan-2013 20:12:59 Text Last Updated: 01-Jan-2013 20:13:00 Checksum: d17a5219a23a23ce7f363b75e09ec043 Info: Testing - log Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: log /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 ------------------------------------------------------------ rev 9: barry | 01-Jan-2013 20:13:02 | 1 lines copy test ------------------------------------------------------------ rev 6: barry | 01-Jan-2013 20:12:59 | 1 lines commit modified file ------------------------------------------------------------ rev 5: barry | 01-Jan-2013 20:12:57 | 1 lines commit delete file ------------------------------------------------------------ rev 4: barry | 01-Jan-2013 20:12:56 | 1 lines commit mod file ------------------------------------------------------------ rev 3: barry | 01-Jan-2013 20:12:55 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 01-Jan-2013 20:12:54 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 01-Jan-2013 20:12:54 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test 6 barry 23 01-Jan-2013 20:12:59 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt 9 barry 23 01-Jan-2013 20:13:02 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt 3 barry 16 01-Jan-2013 20:12:55 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt 3 barry 16 01-Jan-2013 20:12:55 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt 3 barry 16 01-Jan-2013 20:12:55 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt 3 barry 16 01-Jan-2013 20:12:55 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt 3 barry 0 01-Jan-2013 20:12:55 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 3 barry 0 01-Jan-2013 20:12:55 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 barry 23 01-Jan-2013 20:12:59 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 9 barry 23 01-Jan-2013 20:13:02 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 3 barry 16 01-Jan-2013 20:12:55 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 3 barry 16 01-Jan-2013 20:12:55 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt 3 barry 16 01-Jan-2013 20:12:55 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 3 barry 16 01-Jan-2013 20:12:55 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 3 barry 0 01-Jan-2013 20:12:55 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 3 barry 0 01-Jan-2013 20:12:55 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: Testing - merge - done below Info: Testing - mkdir - done above Info: Testing - move Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2b.txt Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m move wc test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Revision 11 Info: Testing - status Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 -m change wc1 for status -u to detect M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Updated to revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m prop change Nothing to commit Info: Testing - propdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset test:prop1 del_me file4.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propdel test:prop1 file4.txt property_deleted /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Info: Testing - propget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget svn:eol-style file4.txt file4.txt: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget unknown file4.txt Info: Testing - proplist - see above Info: Testing - propset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt property_modified /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Testing - remove Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: remove file5.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status M file4.txt D file5.txt Info: Testing - resolved Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test -m make a conflict part 1 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test callback_conflict_resolver action: base_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/.svn/pristine/df/df6174c0ddc76db371593ea5ac22d62b9e6276dc.svn-base is_binary: False kind: merged_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/.svn/tmp/file4.txt.tmp mime_type: None my_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/.svn/tmp/svn-j6KJ5O node_kind: operation: path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt property_name: None reason: src_left_version: None src_right_version: None their_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/.svn/pristine/45/4554e019d2005c135cc0e5355b9cdb849ab46ed3.svn-base A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Updated to revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status CM file4.txt ? file4.txt.mine ? file4.txt.r13 ? file4.txt.r6 D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.mine /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: resolved /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt R /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt -m resolve a confict part 2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Revision 14 Info: Testing - revert Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revert file5.txt R /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status Info: Testing - revproplist Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revproplist file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:author: barry svn:date: 2013-01-01T20:13:09.183286Z svn:log: resolve a confict part 2 Info: Testing - revpropget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:log: resolve a confict part 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget no_such_prop file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 no_such_prop: None Info: Testing - revpropset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropset svn:log Hello world file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - revpropdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropdel svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - status - see above Info: Testing - relocate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mkdir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mv /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: 57adf7d8-48f0-4ae2-a42a-23b27a6713db Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 01-Jan-2013 20:12:54 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 57adf7d8-48f0-4ae2-a42a-23b27a6713db Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 01-Jan-2013 20:12:54 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: 57adf7d8-48f0-4ae2-a42a-23b27a6713db Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 01-Jan-2013 20:12:59 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 57adf7d8-48f0-4ae2-a42a-23b27a6713db Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 01-Jan-2013 20:12:59 Info: Testing - switch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 57adf7d8-48f0-4ae2-a42a-23b27a6713db Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 01-Jan-2013 20:12:59 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: switch /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 Repository UUID: 57adf7d8-48f0-4ae2-a42a-23b27a6713db Revision: 14 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 8 Last Changed Date: 01-Jan-2013 20:13:01 Info: Testing - update - see above Info: Testing - merge Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 Checked out revision 14 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m add test merge files . A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Revision 15 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test-branch Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 Updated to revision 16 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: rm file-merge-1.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m change test merge files . A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Revision 17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --dry-run --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_completed /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_record_info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_record_info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_record_info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt merge_record_info_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_record_info_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_completed /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt MM /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A + /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch (working copy) Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r17* Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-2.txt:r17 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt (working copy) Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-3.txt:r17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_01_set_get_tests.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 pysvn-1.7.8/Tests/test-01.unix.known_good-py2-svn1.8.log000644 000771 000771 00000155026 12177517363 023131 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos Info: Testing - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk -m test-01 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test -m test-01 add test Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos -v -R 2 barry 0 04-Aug-2013 19:34:26 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk 2 barry 0 04-Aug-2013 19:34:26 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Info: Testing - checkout Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/find.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: Testing - add Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --force file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file6.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2/file8.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --non-recursive folder3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder3 Revision 3 Info: Setup to test access to deleted files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit mod file M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: rm file6.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit delete file D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Revision 5 Info: Testing - update - get a new wc that will update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Checked out revision 5 Info: Testing - - checkin a mod from wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit modified file M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt Revision 6 Info: Testing - update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Updated to revision 6 Info: Testing - the rest in lexical order Info: Testing - annotate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2013-08-04T18:34:27.621163Z | test add file 1 1| r6 | barry | 2013-08-04T18:34:31.082368Z | line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate -r 3:4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt A /trunk/test/file6.txt A /trunk/test/file6.txt 0| r3 | barry | 2013-08-04T18:34:27.621163Z | test add file 6 1| r4 | barry | 2013-08-04T18:34:28.121480Z | test mod file 6 Info: Testing - cat Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r head file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt test add file 1 line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r 4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt test add file 6 test mod file 6 Info: Testing - cleanup Info: Testing - copy Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags -m test-01 add tags Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags 8 barry 0 04-Aug-2013 19:34:33 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m copy test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Revision 9 Info: Testing - diff Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (revision 9) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Testing - export Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CR file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol LF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CRLF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder3 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt Info: Testing - import Info: Testing - info Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Repository UUID: 21872268-99f7-41cc-a560-2679c7be3639 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 04-Aug-2013 19:34:31 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt Repository UUID: 21872268-99f7-41cc-a560-2679c7be3639 Revision: 6 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 04-Aug-2013 19:34:31 Text Last Updated: 04-Aug-2013 19:34:32 Checksum: d17a5219a23a23ce7f363b75e09ec043 Info: Testing - log Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: log /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 ------------------------------------------------------------ rev 9: barry | 04-Aug-2013 19:34:34 | 1 lines copy test ------------------------------------------------------------ rev 6: barry | 04-Aug-2013 19:34:31 | 1 lines commit modified file ------------------------------------------------------------ rev 5: barry | 04-Aug-2013 19:34:29 | 1 lines commit delete file ------------------------------------------------------------ rev 4: barry | 04-Aug-2013 19:34:28 | 1 lines commit mod file ------------------------------------------------------------ rev 3: barry | 04-Aug-2013 19:34:27 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 04-Aug-2013 19:34:26 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 04-Aug-2013 19:34:25 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test 6 barry 23 04-Aug-2013 19:34:31 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt 9 barry 23 04-Aug-2013 19:34:34 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt 3 barry 16 04-Aug-2013 19:34:27 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt 3 barry 16 04-Aug-2013 19:34:27 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt 3 barry 16 04-Aug-2013 19:34:27 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt 3 barry 16 04-Aug-2013 19:34:27 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt 3 barry 0 04-Aug-2013 19:34:27 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 3 barry 0 04-Aug-2013 19:34:27 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 barry 23 04-Aug-2013 19:34:31 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 9 barry 23 04-Aug-2013 19:34:34 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 3 barry 16 04-Aug-2013 19:34:27 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 3 barry 16 04-Aug-2013 19:34:27 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt 3 barry 16 04-Aug-2013 19:34:27 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 3 barry 16 04-Aug-2013 19:34:27 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 3 barry 0 04-Aug-2013 19:34:27 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 3 barry 0 04-Aug-2013 19:34:27 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: Testing - merge - done below Info: Testing - mkdir - done above Info: Testing - move Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2b.txt Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m move wc test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Revision 11 Info: Testing - status Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 -m change wc1 for status -u to detect M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Updated to revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m prop change Nothing to commit Info: Testing - propdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset test:prop1 del_me file4.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propdel test:prop1 file4.txt property_deleted /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Info: Testing - propget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget svn:eol-style file4.txt file4.txt: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget unknown file4.txt Info: Testing - proplist - see above Info: Testing - propset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt property_modified /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Testing - remove Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: remove file5.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status M file4.txt D file5.txt Info: Testing - resolved Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test -m make a conflict part 1 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test callback_conflict_resolver action: base_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.r6 is_binary: False kind: merged_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt mime_type: None my_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.mine node_kind: operation: path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt property_name: None reason: repos_url: {'node_kind': , 'path_in_repos': u'trunk/test/file4.txt', 'peg_rev': , 'repos_url': u'file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos'} repos_url: {'node_kind': , 'path_in_repos': u'trunk/test/file4.txt', 'peg_rev': , 'repos_url': u'file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos'} their_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.r13 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt conflict_resolver_done /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt conflict_resolver_starting /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Updated to revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status CM file4.txt ? file4.txt.mine ? file4.txt.r13 ? file4.txt.r6 D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.mine /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: resolved /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt R /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt conflict_resolver_done /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt conflict_resolver_starting /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt -m resolve a confict part 2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Revision 14 Info: Testing - revert Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revert file5.txt R /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status Info: Testing - revproplist Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revproplist file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:author: barry svn:date: 2013-08-04T18:34:42.522751Z svn:log: resolve a confict part 2 Info: Testing - revpropget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:log: resolve a confict part 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget no_such_prop file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 no_such_prop: None Info: Testing - revpropset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropset svn:log Hello world file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - revpropdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropdel svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - status - see above Info: Testing - relocate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mkdir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mv /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: 21872268-99f7-41cc-a560-2679c7be3639 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 04-Aug-2013 19:34:26 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 21872268-99f7-41cc-a560-2679c7be3639 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 04-Aug-2013 19:34:26 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: 21872268-99f7-41cc-a560-2679c7be3639 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 04-Aug-2013 19:34:31 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 21872268-99f7-41cc-a560-2679c7be3639 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 04-Aug-2013 19:34:31 Info: Testing - switch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 21872268-99f7-41cc-a560-2679c7be3639 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 04-Aug-2013 19:34:31 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: switch /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 Repository UUID: 21872268-99f7-41cc-a560-2679c7be3639 Revision: 14 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 8 Last Changed Date: 04-Aug-2013 19:34:33 Info: Testing - update - see above Info: Testing - merge Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 Checked out revision 14 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m add test merge files . A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Revision 15 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test-branch Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 Updated to revision 16 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: rm file-merge-1.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m change test merge files . A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Revision 17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --dry-run --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_completed /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_elide_info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_record_info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_record_info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_record_info_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_record_info_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_completed /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A + /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch (working copy) Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_01_set_get_tests.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 pysvn-1.7.8/Tests/test-01.unix.known_good-py3-svn1.5.log000644 000771 000771 00000147156 11264417713 023126 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos Info: Testing - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk -m test-01 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test -m test-01 add test Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos -v -R 2 barry 0 11-Oct-2009 19:01:07 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk 2 barry 0 11-Oct-2009 19:01:07 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Info: Testing - checkout Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: python /Users/barry/wc/svn/pysvn/Extension/Tests/find.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/.svn/entries /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/.svn/format /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/.svn/entries /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/.svn/format Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: Testing - add Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file3.txt A file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file4.txt A file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --force file5.txt A file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file6.txt A file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add folder1 A folder1 A folder1/file7.txt A folder1/folder2 A folder1/folder2/file8.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --non-recursive folder3 A folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit added files A test/file1.txt A test/file2.txt A test/file3.txt A test/file4.txt A test/file5.txt A test/file6.txt A test/folder1 A test/folder1/file7.txt A test/folder1/folder2 A test/folder1/folder2/file8.txt A test/folder3 Revision 3 Info: Setup to test access to deleted files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit mod file M test/file6.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: rm file6.txt D file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit delete file D test/file6.txt Revision 5 Info: Testing - update - get a new wc that will update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Checked out revision 5 Info: Testing - - checkin a mod from wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit modified file M test/file1.txt Revision 6 Info: Testing - update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Updated to revision 6 Info: Testing - the rest in lexical order Info: Testing - annotate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2009-10-11T18:01:09.228264Z | test add file 1 1| r6 | barry | 2009-10-11T18:01:13.188911Z | line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate -r 3:4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt A /trunk/test/file6.txt A /trunk/test/file6.txt 0| r3 | barry | 2009-10-11T18:01:09.228264Z | test add file 6 1| r4 | barry | 2009-10-11T18:01:10.188634Z | test mod file 6 Info: Testing - cat Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r head file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt test add file 1 line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r 4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt test add file 6 test mod file 6 Info: Testing - cleanup Info: Testing - copy Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags -m test-01 add tags Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags 8 barry 0 11-Oct-2009 19:01:15 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m copy test A wc2/test/file1b.txt Revision 9 Info: Testing - diff Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (revision 9) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Testing - export Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CR file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol LF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CRLF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder3 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt Info: Testing - import Info: Testing - info Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Repository UUID: 9a47ed63-78fc-47d8-9eed-4b5ae372f4dc Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 11-Oct-2009 19:01:13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt Repository UUID: 9a47ed63-78fc-47d8-9eed-4b5ae372f4dc Revision: 6 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 11-Oct-2009 19:01:13 Text Last Updated: 11-Oct-2009 19:01:14 Checksum: d17a5219a23a23ce7f363b75e09ec043 Info: Testing - log Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: log /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 ------------------------------------------------------------ rev 9: barry | 11-Oct-2009 19:01:16 | 1 lines copy test ------------------------------------------------------------ rev 6: barry | 11-Oct-2009 19:01:13 | 1 lines commit modified file ------------------------------------------------------------ rev 5: barry | 11-Oct-2009 19:01:11 | 1 lines commit delete file ------------------------------------------------------------ rev 4: barry | 11-Oct-2009 19:01:10 | 1 lines commit mod file ------------------------------------------------------------ rev 3: barry | 11-Oct-2009 19:01:09 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 11-Oct-2009 19:01:07 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 11-Oct-2009 19:01:07 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test 6 barry 23 11-Oct-2009 19:01:13 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt 9 barry 23 11-Oct-2009 19:01:16 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt 3 barry 16 11-Oct-2009 19:01:09 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt 3 barry 16 11-Oct-2009 19:01:09 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt 3 barry 16 11-Oct-2009 19:01:09 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt 3 barry 16 11-Oct-2009 19:01:09 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt 3 barry 0 11-Oct-2009 19:01:09 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 3 barry 0 11-Oct-2009 19:01:09 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 barry 23 11-Oct-2009 19:01:13 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 9 barry 23 11-Oct-2009 19:01:16 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 3 barry 16 11-Oct-2009 19:01:09 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 3 barry 16 11-Oct-2009 19:01:09 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt 3 barry 16 11-Oct-2009 19:01:09 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 3 barry 16 11-Oct-2009 19:01:09 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 3 barry 0 11-Oct-2009 19:01:09 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 3 barry 0 11-Oct-2009 19:01:09 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: Testing - merge - done below Info: Testing - mkdir - done above Info: Testing - move Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2b.txt Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m move wc test A wc2/test/file3b.txt D wc2/test/file3.txt M wc2/test/file1b.txt Revision 11 Info: Testing - status Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 -m change wc1 for status -u to detect M test/file4.txt Revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update A file1b.txt A file2b.txt A file3b.txt D file2.txt D file3.txt Updated to revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m prop change Nothing to commit Info: Testing - propdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset test:prop1 del_me file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propdel test:prop1 file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Info: Testing - propget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget svn:eol-style file4.txt file4.txt: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget unknown file4.txt Info: Testing - proplist - see above Info: Testing - propset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Testing - remove Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: remove file5.txt D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status M file4.txt D file5.txt Info: Testing - resolved Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test -m make a conflict part 1 M wc1/test/file4.txt Revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test callback_conflict_resolver action: base_file: '/Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/text-base/file4.txt.svn-base' is_binary: False kind: merged_file: '/Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/tmp/tempfile.3.tmp' mime_type: None my_file: '/Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/tmp/tempfile.2.tmp' node_kind: path: '/Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt' property_name: None reason: their_file: '/Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/tmp/text-base/file4.txt.svn-base' A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Updated to revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status CM file4.txt ? file4.txt.mine ? file4.txt.r13 ? file4.txt.r6 D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.mine /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: resolved /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt R /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt -m resolve a confict part 2 M file4.txt Revision 14 Info: Testing - revert Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revert file5.txt R file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status Info: Testing - revproplist Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revproplist file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:author: barry svn:date: 2009-10-11T18:01:26.342683Z svn:log: resolve a confict part 2 Info: Testing - revpropget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:log: resolve a confict part 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget no_such_prop file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 no_such_prop: None Info: Testing - revpropset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropset svn:log Hello world file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - revpropdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropdel svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - status - see above Info: Testing - relocate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mkdir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mv /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: 9a47ed63-78fc-47d8-9eed-4b5ae372f4dc Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 11-Oct-2009 19:01:07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 9a47ed63-78fc-47d8-9eed-4b5ae372f4dc Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 11-Oct-2009 19:01:07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: 9a47ed63-78fc-47d8-9eed-4b5ae372f4dc Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 11-Oct-2009 19:01:13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 9a47ed63-78fc-47d8-9eed-4b5ae372f4dc Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 11-Oct-2009 19:01:13 Info: Testing - switch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: 9a47ed63-78fc-47d8-9eed-4b5ae372f4dc Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 11-Oct-2009 19:01:13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: switch /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 Repository UUID: 9a47ed63-78fc-47d8-9eed-4b5ae372f4dc Revision: 14 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 8 Last Changed Date: 11-Oct-2009 19:01:15 Info: Testing - update - see above Info: Testing - merge Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 Checked out revision 14 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-1.txt A file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-2.txt A file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m add test merge files . A test/file-merge-1.txt A test/file-merge-2.txt Revision 15 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test-branch Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Updated to revision 16 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-3.txt A file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: rm file-merge-1.txt D file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m change test merge files . A test/file-merge-3.txt D test/file-merge-1.txt M test/file-merge-2.txt Revision 17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --dry-run --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt MM /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A + /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r17* Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1b.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file2b.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file4.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file3b.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file5.txt:r17 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-2.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-3.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1.txt:r17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_01_set_get_tests.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 pysvn-1.7.8/Tests/test-01.unix.known_good-py3-svn1.6.log000644 000771 000771 00000152214 11722500535 023110 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos Info: Testing - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk -m test-01 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test -m test-01 add test Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos -v -R 2 barry 0 26-Feb-2012 18:43:33 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk 2 barry 0 26-Feb-2012 18:43:33 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Info: Testing - checkout Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/find.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: Testing - add Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file3.txt A file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file4.txt A file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --force file5.txt A file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file6.txt A file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add folder1 A folder1 A folder1/file7.txt A folder1/folder2 A folder1/folder2/file8.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --non-recursive folder3 A folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder3 Revision 3 Info: Setup to test access to deleted files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit mod file M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: rm file6.txt D file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit delete file D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Revision 5 Info: Testing - update - get a new wc that will update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Checked out revision 5 Info: Testing - - checkin a mod from wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit modified file M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt Revision 6 Info: Testing - update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Updated to revision 6 Info: Testing - the rest in lexical order Info: Testing - annotate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2012-02-26T18:43:35.207911Z | test add file 1 1| r6 | barry | 2012-02-26T18:43:39.154629Z | line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate -r 3:4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt A /trunk/test/file6.txt A /trunk/test/file6.txt 0| r3 | barry | 2012-02-26T18:43:35.207911Z | test add file 6 1| r4 | barry | 2012-02-26T18:43:36.154939Z | test mod file 6 Info: Testing - cat Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r head file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt test add file 1 line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r 4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt test add file 6 test mod file 6 Info: Testing - cleanup Info: Testing - copy Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags -m test-01 add tags Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags 8 barry 0 26-Feb-2012 18:43:41 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m copy test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Revision 9 Info: Testing - diff Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (revision 9) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Testing - export Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CR file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol LF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CRLF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder3 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt Info: Testing - import Info: Testing - info Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Repository UUID: cfe626db-dcfd-4eb6-b785-f52740c120f5 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 26-Feb-2012 18:43:39 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt Repository UUID: cfe626db-dcfd-4eb6-b785-f52740c120f5 Revision: 6 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 26-Feb-2012 18:43:39 Text Last Updated: 26-Feb-2012 18:43:40 Checksum: d17a5219a23a23ce7f363b75e09ec043 Info: Testing - log Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: log /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 ------------------------------------------------------------ rev 9: barry | 26-Feb-2012 18:43:43 | 1 lines copy test ------------------------------------------------------------ rev 6: barry | 26-Feb-2012 18:43:39 | 1 lines commit modified file ------------------------------------------------------------ rev 5: barry | 26-Feb-2012 18:43:37 | 1 lines commit delete file ------------------------------------------------------------ rev 4: barry | 26-Feb-2012 18:43:36 | 1 lines commit mod file ------------------------------------------------------------ rev 3: barry | 26-Feb-2012 18:43:35 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 26-Feb-2012 18:43:33 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 26-Feb-2012 18:43:33 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test 6 barry 23 26-Feb-2012 18:43:39 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt 9 barry 23 26-Feb-2012 18:43:43 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt 3 barry 16 26-Feb-2012 18:43:35 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt 3 barry 16 26-Feb-2012 18:43:35 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt 3 barry 16 26-Feb-2012 18:43:35 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt 3 barry 16 26-Feb-2012 18:43:35 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt 3 barry 0 26-Feb-2012 18:43:35 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 3 barry 0 26-Feb-2012 18:43:35 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 barry 23 26-Feb-2012 18:43:39 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 9 barry 23 26-Feb-2012 18:43:43 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 3 barry 16 26-Feb-2012 18:43:35 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 3 barry 16 26-Feb-2012 18:43:35 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt 3 barry 16 26-Feb-2012 18:43:35 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 3 barry 16 26-Feb-2012 18:43:35 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 3 barry 0 26-Feb-2012 18:43:35 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 3 barry 0 26-Feb-2012 18:43:35 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: Testing - merge - done below Info: Testing - mkdir - done above Info: Testing - move Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2b.txt Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m move wc test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Revision 11 Info: Testing - status Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 -m change wc1 for status -u to detect M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update A file1b.txt A file2b.txt A file3b.txt D file2.txt D file3.txt Updated to revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m prop change Nothing to commit Info: Testing - propdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset test:prop1 del_me file4.txt property_added file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propdel test:prop1 file4.txt property_deleted file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Info: Testing - propget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt property_added file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget svn:eol-style file4.txt file4.txt: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget unknown file4.txt Info: Testing - proplist - see above Info: Testing - propset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt property_modified file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Testing - remove Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: remove file5.txt D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status M file4.txt D file5.txt Info: Testing - resolved Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test -m make a conflict part 1 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test callback_conflict_resolver action: base_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/text-base/file4.txt.svn-base is_binary: False kind: merged_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/tmp/file4.txt.tmp mime_type: None my_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/tmp/svn-8ZbhHK node_kind: path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt property_name: None reason: their_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/.svn/tmp/text-base/file4.txt.svn-base A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Updated to revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status CM file4.txt ? file4.txt.mine ? file4.txt.r13 ? file4.txt.r6 D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.mine /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: resolved /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt R /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt -m resolve a confict part 2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Revision 14 Info: Testing - revert Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revert file5.txt R file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status Info: Testing - revproplist Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revproplist file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:author: barry svn:date: 2012-02-26T18:43:53.397717Z svn:log: resolve a confict part 2 Info: Testing - revpropget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:log: resolve a confict part 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget no_such_prop file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 no_such_prop: None Info: Testing - revpropset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropset svn:log Hello world file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - revpropdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropdel svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - status - see above Info: Testing - relocate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mkdir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mv /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: cfe626db-dcfd-4eb6-b785-f52740c120f5 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 26-Feb-2012 18:43:33 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: cfe626db-dcfd-4eb6-b785-f52740c120f5 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 26-Feb-2012 18:43:33 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: cfe626db-dcfd-4eb6-b785-f52740c120f5 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 26-Feb-2012 18:43:39 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: cfe626db-dcfd-4eb6-b785-f52740c120f5 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 26-Feb-2012 18:43:39 Info: Testing - switch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: cfe626db-dcfd-4eb6-b785-f52740c120f5 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 26-Feb-2012 18:43:39 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: switch /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 Repository UUID: cfe626db-dcfd-4eb6-b785-f52740c120f5 Revision: 14 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 8 Last Changed Date: 26-Feb-2012 18:43:41 Info: Testing - update - see above Info: Testing - merge Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 Checked out revision 14 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-1.txt A file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-2.txt A file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m add test merge files . A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Revision 15 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test-branch Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Updated to revision 16 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-3.txt A file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: rm file-merge-1.txt D file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m change test merge files . A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Revision 17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --dry-run --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_completed /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_completed /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt MM /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A + /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r17* Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1b.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file2b.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file4.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file3b.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file5.txt:r17 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-2.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-3.txt:r17 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1.txt:r17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_01_set_get_tests.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 pysvn-1.7.8/Tests/test-01.unix.known_good-py3-svn1.7.log000644 000771 000771 00000155154 12070634757 023132 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/local/bin/python3.3 Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: mkdir tmp Info: PYSVN command /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos Info: Testing - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk -m test-01 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test -m test-01 add test Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos -v -R 2 barry 0 01-Jan-2013 19:27:32 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk 2 barry 0 01-Jan-2013 19:27:32 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Info: Testing - checkout Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/find.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: Testing - add Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --force file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file6.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2/file8.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --non-recursive folder3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder3 Revision 3 Info: Setup to test access to deleted files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit mod file M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: rm file6.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit delete file D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Revision 5 Info: Testing - update - get a new wc that will update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Checked out revision 5 Info: Testing - - checkin a mod from wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit modified file M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt Revision 6 Info: Testing - update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Updated to revision 6 Info: Testing - the rest in lexical order Info: Testing - annotate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2013-01-01T19:27:34.696280Z | test add file 1 1| r6 | barry | 2013-01-01T19:27:38.174811Z | line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate -r 3:4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt A /trunk/test/file6.txt A /trunk/test/file6.txt 0| r3 | barry | 2013-01-01T19:27:34.696280Z | test add file 6 1| r4 | barry | 2013-01-01T19:27:35.095089Z | test mod file 6 Info: Testing - cat Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r head file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt test add file 1 line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r 4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt test add file 6 test mod file 6 Info: Testing - cleanup Info: Testing - copy Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags -m test-01 add tags Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags 8 barry 0 01-Jan-2013 19:27:40 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m copy test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Revision 9 Info: Testing - diff Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (revision 9) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Testing - export Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CR file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol LF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CRLF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder3 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt Info: Testing - import Info: Testing - info Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Repository UUID: ec2358a9-deca-44b4-9741-c46cd4376d80 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 01-Jan-2013 19:27:38 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt Repository UUID: ec2358a9-deca-44b4-9741-c46cd4376d80 Revision: 6 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 01-Jan-2013 19:27:38 Text Last Updated: 01-Jan-2013 19:27:39 Checksum: d17a5219a23a23ce7f363b75e09ec043 Info: Testing - log Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: log /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 ------------------------------------------------------------ rev 9: barry | 01-Jan-2013 19:27:41 | 1 lines copy test ------------------------------------------------------------ rev 6: barry | 01-Jan-2013 19:27:38 | 1 lines commit modified file ------------------------------------------------------------ rev 5: barry | 01-Jan-2013 19:27:36 | 1 lines commit delete file ------------------------------------------------------------ rev 4: barry | 01-Jan-2013 19:27:35 | 1 lines commit mod file ------------------------------------------------------------ rev 3: barry | 01-Jan-2013 19:27:34 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 01-Jan-2013 19:27:32 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 01-Jan-2013 19:27:32 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test 6 barry 23 01-Jan-2013 19:27:38 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt 9 barry 23 01-Jan-2013 19:27:41 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt 3 barry 16 01-Jan-2013 19:27:34 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt 3 barry 16 01-Jan-2013 19:27:34 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt 3 barry 16 01-Jan-2013 19:27:34 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt 3 barry 16 01-Jan-2013 19:27:34 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt 3 barry 0 01-Jan-2013 19:27:34 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 3 barry 0 01-Jan-2013 19:27:34 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 barry 23 01-Jan-2013 19:27:38 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 9 barry 23 01-Jan-2013 19:27:41 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 3 barry 16 01-Jan-2013 19:27:34 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 3 barry 16 01-Jan-2013 19:27:34 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt 3 barry 16 01-Jan-2013 19:27:34 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 3 barry 16 01-Jan-2013 19:27:34 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 3 barry 0 01-Jan-2013 19:27:34 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 3 barry 0 01-Jan-2013 19:27:34 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: Testing - merge - done below Info: Testing - mkdir - done above Info: Testing - move Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2b.txt Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m move wc test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Revision 11 Info: Testing - status Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 -m change wc1 for status -u to detect M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Updated to revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m prop change Nothing to commit Info: Testing - propdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset test:prop1 del_me file4.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propdel test:prop1 file4.txt property_deleted /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Info: Testing - propget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget svn:eol-style file4.txt file4.txt: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget unknown file4.txt Info: Testing - proplist - see above Info: Testing - propset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt property_modified /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Testing - remove Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: remove file5.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status M file4.txt D file5.txt Info: Testing - resolved Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test -m make a conflict part 1 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test callback_conflict_resolver action: base_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/.svn/pristine/df/df6174c0ddc76db371593ea5ac22d62b9e6276dc.svn-base is_binary: False kind: merged_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/.svn/tmp/file4.txt.tmp mime_type: None my_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/.svn/tmp/svn-tzqMrb node_kind: operation: path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt property_name: None reason: src_left_version: None src_right_version: None their_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/.svn/pristine/45/4554e019d2005c135cc0e5355b9cdb849ab46ed3.svn-base A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Updated to revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status CM file4.txt ? file4.txt.mine ? file4.txt.r13 ? file4.txt.r6 D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.mine /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: resolved /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt R /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt -m resolve a confict part 2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Revision 14 Info: Testing - revert Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revert file5.txt R /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status Info: Testing - revproplist Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revproplist file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:author: barry svn:date: 2013-01-01T19:27:49.212805Z svn:log: resolve a confict part 2 Info: Testing - revpropget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:log: resolve a confict part 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget no_such_prop file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 no_such_prop: None Info: Testing - revpropset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropset svn:log Hello world file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - revpropdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropdel svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - status - see above Info: Testing - relocate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mkdir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mv /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: ec2358a9-deca-44b4-9741-c46cd4376d80 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 01-Jan-2013 19:27:32 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: ec2358a9-deca-44b4-9741-c46cd4376d80 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 01-Jan-2013 19:27:32 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: ec2358a9-deca-44b4-9741-c46cd4376d80 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 01-Jan-2013 19:27:38 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: ec2358a9-deca-44b4-9741-c46cd4376d80 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 01-Jan-2013 19:27:38 Info: Testing - switch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: ec2358a9-deca-44b4-9741-c46cd4376d80 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 01-Jan-2013 19:27:38 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: switch /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 Repository UUID: ec2358a9-deca-44b4-9741-c46cd4376d80 Revision: 14 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 8 Last Changed Date: 01-Jan-2013 19:27:40 Info: Testing - update - see above Info: Testing - merge Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 Checked out revision 14 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m add test merge files . A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Revision 15 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test-branch Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 Updated to revision 16 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: rm file-merge-1.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m change test merge files . A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Revision 17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --dry-run --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_completed /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_record_info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_record_info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_record_info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt merge_record_info_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_record_info_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_completed /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt MM /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A + /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch (working copy) Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r17* Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-2.txt:r17 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt (working copy) Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-3.txt:r17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/test_01_set_get_tests.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 pysvn-1.7.8/Tests/test-01.unix.known_good-py3-svn1.8.log000644 000771 000771 00000154421 12177545222 023123 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/local/bin/python3.3 Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-01 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: mkdir tmp Info: PYSVN command /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos Info: Testing - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk -m test-01 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test -m test-01 add test Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos -v -R 2 barry 0 04-Aug-2013 21:52:35 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk 2 barry 0 04-Aug-2013 21:52:35 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Info: Testing - checkout Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/find.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: Testing - add Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --force file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add file6.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2/file8.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: add --non-recursive folder3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/folder3 Revision 3 Info: Setup to test access to deleted files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit mod file M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: rm file6.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit delete file D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file6.txt Revision 5 Info: Testing - update - get a new wc that will update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Checked out revision 5 Info: Testing - - checkin a mod from wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin -m commit modified file M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1.txt Revision 6 Info: Testing - update Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Updated to revision 6 Info: Testing - the rest in lexical order Info: Testing - annotate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2013-08-04T20:52:36.803609Z | test add file 1 1| r6 | barry | 2013-08-04T20:52:40.094588Z | line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: annotate -r 3:4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt A /trunk/test/file6.txt A /trunk/test/file6.txt 0| r3 | barry | 2013-08-04T20:52:36.803609Z | test add file 6 1| r4 | barry | 2013-08-04T20:52:37.130054Z | test mod file 6 Info: Testing - cat Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r head file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt test add file 1 line 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: cat -r 4 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file6.txt test add file 6 test mod file 6 Info: Testing - cleanup Info: Testing - copy Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags -m test-01 add tags Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags 8 barry 0 04-Aug-2013 21:52:42 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/tags/version1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: copy /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m copy test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Revision 9 Info: Testing - diff Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (revision 9) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Testing - export Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CR file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol LF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: export --native-eol CRLF file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder3 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.native/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.cr/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.lf/folder1/folder2/file8.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/file7.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/export1.crlf/folder1/folder2/file8.txt Info: Testing - import Info: Testing - info Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test Repository UUID: a725e9e1-05ce-4aee-bc2f-739fe572ced8 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 04-Aug-2013 21:52:40 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt Repository UUID: a725e9e1-05ce-4aee-bc2f-739fe572ced8 Revision: 6 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 04-Aug-2013 21:52:40 Text Last Updated: 04-Aug-2013 21:52:41 Checksum: d17a5219a23a23ce7f363b75e09ec043 Info: Testing - log Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: log /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 ------------------------------------------------------------ rev 9: barry | 04-Aug-2013 21:52:43 | 1 lines copy test ------------------------------------------------------------ rev 6: barry | 04-Aug-2013 21:52:40 | 1 lines commit modified file ------------------------------------------------------------ rev 5: barry | 04-Aug-2013 21:52:38 | 1 lines commit delete file ------------------------------------------------------------ rev 4: barry | 04-Aug-2013 21:52:37 | 1 lines commit mod file ------------------------------------------------------------ rev 3: barry | 04-Aug-2013 21:52:36 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 04-Aug-2013 21:52:35 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 04-Aug-2013 21:52:35 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Testing - ls Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test 6 barry 23 04-Aug-2013 21:52:40 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1.txt 9 barry 23 04-Aug-2013 21:52:43 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file1b.txt 3 barry 16 04-Aug-2013 21:52:36 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt 3 barry 16 04-Aug-2013 21:52:36 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file3.txt 3 barry 16 04-Aug-2013 21:52:36 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file4.txt 3 barry 16 04-Aug-2013 21:52:36 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file5.txt 3 barry 0 04-Aug-2013 21:52:36 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder1 3 barry 0 04-Aug-2013 21:52:36 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: ls -v /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 barry 23 04-Aug-2013 21:52:40 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 9 barry 23 04-Aug-2013 21:52:43 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 3 barry 16 04-Aug-2013 21:52:36 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 3 barry 16 04-Aug-2013 21:52:36 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt 3 barry 16 04-Aug-2013 21:52:36 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 3 barry 16 04-Aug-2013 21:52:36 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 3 barry 0 04-Aug-2013 21:52:36 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 3 barry 0 04-Aug-2013 21:52:36 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: Testing - merge - done below Info: Testing - mkdir - done above Info: Testing - move Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2.txt file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk/test/file2b.txt Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: move /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m move wc test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt Revision 11 Info: Testing - status Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 -m change wc1 for status -u to detect M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: update A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file2.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file3.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Updated to revision 12 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: status --show-updates --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 M 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt 11 11 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt M 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/file7.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder1/folder2/file8.txt 6 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/folder3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 -m prop change Nothing to commit Info: Testing - propdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset test:prop1 del_me file4.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propdel test:prop1 file4.txt property_deleted /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Info: Testing - propget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget svn:eol-style file4.txt file4.txt: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propget unknown file4.txt Info: Testing - proplist - see above Info: Testing - propset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: propset svn:eol-style native file4.txt property_modified /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Testing - remove Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: remove file5.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status M file4.txt D file5.txt Info: Testing - resolved Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test -m make a conflict part 1 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1/test/file4.txt Revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test callback_conflict_resolver action: base_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.r6 is_binary: False kind: merged_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt mime_type: None my_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.mine node_kind: operation: path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt property_name: None reason: src_left_version: {'node_kind': , 'path_in_repos': 'trunk/test/file4.txt', 'peg_rev': , 'repos_url': 'file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos'} src_right_version: {'node_kind': , 'path_in_repos': 'trunk/test/file4.txt', 'peg_rev': , 'repos_url': 'file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos'} their_file: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.r13 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt conflict_resolver_done /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt conflict_resolver_starting /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Updated to revision 13 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status CM file4.txt ? file4.txt.mine ? file4.txt.r13 ? file4.txt.r6 D file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt.mine /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: resolved /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt R /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt conflict_resolver_done /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt conflict_resolver_starting /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt -m resolve a confict part 2 M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Revision 14 Info: Testing - revert Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revert file5.txt R /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file5.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: status Info: Testing - revproplist Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revproplist file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:author: barry svn:date: 2013-08-04T20:52:53.113077Z svn:log: resolve a confict part 2 Info: Testing - revpropget Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 svn:log: resolve a confict part 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropget no_such_prop file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Revision: 14 no_such_prop: None Info: Testing - revpropset Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropset svn:log Hello world file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - revpropdel Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: revpropdel svn:log file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Testing - status - see above Info: Testing - relocate Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mkdir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: mv /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: a725e9e1-05ce-4aee-bc2f-739fe572ced8 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 04-Aug-2013 21:52:35 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc1 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: a725e9e1-05ce-4aee-bc2f-739fe572ced8 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 04-Aug-2013 21:52:35 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk Repository UUID: a725e9e1-05ce-4aee-bc2f-739fe572ced8 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 04-Aug-2013 21:52:40 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: relocate file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/repos/trunk file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: a725e9e1-05ce-4aee-bc2f-739fe572ced8 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 04-Aug-2013 21:52:40 Info: Testing - switch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk Repository UUID: a725e9e1-05ce-4aee-bc2f-739fe572ced8 Revision: 6 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 04-Aug-2013 21:52:40 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: switch /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file1b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file2b.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file3b.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test/file4.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2 Name: . Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/tags/version1 Repository UUID: a725e9e1-05ce-4aee-bc2f-739fe572ced8 Revision: 14 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 8 Last Changed Date: 04-Aug-2013 21:52:42 Info: Testing - update - see above Info: Testing - merge Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 Checked out revision 14 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc2/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m add test merge files . A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Revision 15 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: copy file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test-branch Log message --- ------- Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file1b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file2b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file3b.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file4.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file5.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/file7.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder1/folder2/file8.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/folder3 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3 Updated to revision 16 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: add file-merge-3.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: rm file-merge-1.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: commit -m change test merge files . A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test/file-merge-2.txt Revision 17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --dry-run --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_completed /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_elide_info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_record_info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_record_info /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt merge_record_info_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_record_info_begin /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: merge --revision 16:17 file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/root/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch merge_completed /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: status /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt A + /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-3.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: pysvn command: diff /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Index: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch =================================================================== --- /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch (revision 16) +++ /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch (working copy) Property changes on: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r17 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/wc3/test Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/test_01_set_get_tests.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-01/configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 pysvn-1.7.8/Tests/test-01.win32.known_good-py2-svn1.4.log000644 000771 000771 00000050253 11253135715 023067 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python24\python.exe Info: PYSVN CMD c:\python24\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.01.00 --config-dir b:\configdir Info: CMD mkdir testroot-01 Info: CMD subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-01 Info: CMD cd /d b:\ Info: CMD svnadmin create b:\repos Info: Test - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-01 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-01 add test" Info: Test - ls Info: PYSVN CMD ls file:///b:/repos -v -R 2 barry 0 23-Sep-2006 16:04:57 file:///b:/repos/trunk 2 barry 0 23-Sep-2006 16:04:57 file:///b:/repos/trunk/test Info: Test - checkout Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD dir b:\wc1 /s /b /a-h b:\wc1\test b:\wc1\.svn\entries b:\wc1\.svn\format b:\wc1\.svn\prop-base b:\wc1\.svn\props b:\wc1\.svn\text-base b:\wc1\.svn\tmp b:\wc1\.svn\tmp\prop-base b:\wc1\.svn\tmp\props b:\wc1\.svn\tmp\text-base b:\wc1\test\.svn\entries b:\wc1\test\.svn\format b:\wc1\test\.svn\prop-base b:\wc1\test\.svn\props b:\wc1\test\.svn\text-base b:\wc1\test\.svn\tmp b:\wc1\test\.svn\tmp\prop-base b:\wc1\test\.svn\tmp\props b:\wc1\test\.svn\tmp\text-base Info: CMD cd /d b:\wc1\test Info: Test - add Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: Create File file3.txt - test add file 3 Info: Create File file4.txt - test add file 4 Info: Create File file5.txt - test add file 5 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD add file3.txt A file3.txt Info: PYSVN CMD add file4.txt A file4.txt Info: PYSVN CMD add --force file5.txt A file5.txt Info: PYSVN CMD checkin -m "commit added files" A test/file1.txt A test/file2.txt A test/file3.txt A test/file4.txt A test/file5.txt Revision 3 Info: Test - update - get a new wc that will update Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A b:/wc2/test A b:/wc2/test/file1.txt A b:/wc2/test/file2.txt A b:/wc2/test/file3.txt A b:/wc2/test/file4.txt A b:/wc2/test/file5.txt U b:/wc2 Checked out revision 3 Info: Test - - checkin a mod from wc1 Info: Append File b:\wc1\test\file1.txt - line 2 Info: PYSVN CMD checkin -m "commit modified file" M test/file1.txt Revision 4 Info: PYSVN CMD checkin -m "commit modified file" Nothing to commit Info: Test - update Info: PYSVN CMD update b:\wc2 U b:/wc2 U b:/wc2/test U b:/wc2/test/file1.txt Updated to revision 4 Info: Test - the rest in lexical order Info: Test - annotate Info: PYSVN CMD annotate b:\wc2\test\file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2006-09-23T15:05:00.862883Z | test add file 1 1| r4 | barry | 2006-09-23T15:05:02.665475Z | line 2 Info: Test - cat Info: PYSVN CMD cat -r head file:///b:/repos/trunk/test/file1.txt test add file 1 line 2 Info: Test - cleanup Info: Test - copy Info: PYSVN CMD mkdir file:///b:/repos/tags -m "test-01 add tags" Info: Create File msg.tmp - tag the trunk Info: PYSVN CMD copy file:///b:/repos/trunk file:///b:/repos/tags/version1 Log message --- ------- Info: PYSVN CMD ls -v file:///b:/repos/tags 6 barry 0 23-Sep-2006 16:05:05 file:///b:/repos/tags/version1 Info: PYSVN CMD copy b:\wc2\test\file1.txt b:\wc2\test\file1b.txt A b:/wc2/test/file1b.txt Info: PYSVN CMD propset svn:eol-style native b:\wc2\test\file1b.txt Info: PYSVN CMD checkin b:\wc2 -m "copy test" A wc2/test/file1b.txt Revision 7 Info: Test - diff Info: Append File b:\wc2\test\file1b.txt - new line Info: PYSVN CMD diff b:\wc2 Index: b:/wc2/test/file1b.txt =================================================================== --- b:/wc2/test/file1b.txt (revision 7) +++ b:/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Test - export Info: PYSVN CMD export file:///b:/repos/trunk/test b:\export1.native A b:\export1.native A b:\export1.native/file1.txt A b:\export1.native/file1b.txt A b:\export1.native/file2.txt A b:\export1.native/file3.txt A b:\export1.native/file4.txt A b:\export1.native/file5.txt Info: PYSVN CMD export --native-eol CR file:///b:/repos/trunk/test b:\export1.cr A b:\export1.cr A b:\export1.cr/file1.txt A b:\export1.cr/file1b.txt A b:\export1.cr/file2.txt A b:\export1.cr/file3.txt A b:\export1.cr/file4.txt A b:\export1.cr/file5.txt Info: PYSVN CMD export --native-eol LF file:///b:/repos/trunk/test b:\export1.lf A b:\export1.lf A b:\export1.lf/file1.txt A b:\export1.lf/file1b.txt A b:\export1.lf/file2.txt A b:\export1.lf/file3.txt A b:\export1.lf/file4.txt A b:\export1.lf/file5.txt Info: PYSVN CMD export --native-eol CRLF file:///b:/repos/trunk/test b:\export1.crlf A b:\export1.crlf A b:\export1.crlf/file1.txt A b:\export1.crlf/file1b.txt A b:\export1.crlf/file2.txt A b:\export1.crlf/file3.txt A b:\export1.crlf/file4.txt A b:\export1.crlf/file5.txt Info: CMD dir /s /b b:\export1.native b:\export1.native\file1.txt b:\export1.native\file1b.txt b:\export1.native\file2.txt b:\export1.native\file3.txt b:\export1.native\file4.txt b:\export1.native\file5.txt Info: CMD dir /s /b b:\export1.cr b:\export1.cr\file1.txt b:\export1.cr\file1b.txt b:\export1.cr\file2.txt b:\export1.cr\file3.txt b:\export1.cr\file4.txt b:\export1.cr\file5.txt Info: CMD dir /s /b b:\export1.lf b:\export1.lf\file1.txt b:\export1.lf\file1b.txt b:\export1.lf\file2.txt b:\export1.lf\file3.txt b:\export1.lf\file4.txt b:\export1.lf\file5.txt Info: CMD dir /s /b b:\export1.crlf b:\export1.crlf\file1.txt b:\export1.crlf\file1b.txt b:\export1.crlf\file2.txt b:\export1.crlf\file3.txt b:\export1.crlf\file4.txt b:\export1.crlf\file5.txt Info: Test - import Info: Test - info Info: PYSVN CMD info b:\wc2\test Path: b:\wc2\test Name: . Url: file:///b:/repos/trunk/test Repository UUID: 83564c9e-9371-b04b-982f-e947ec829d1d Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 23-Sep-2006 16:05:02 Info: PYSVN CMD info b:\wc2\test\file1.txt Path: b:\wc2\test\file1.txt Name: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Repository UUID: 83564c9e-9371-b04b-982f-e947ec829d1d Revision: 4 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 23-Sep-2006 16:05:02 Text Last Updated: 23-Sep-2006 16:05:03 Checksum: cb0b37e264ebcc467e9f37a069e034d7 Info: Test - log Info: PYSVN CMD log b:\wc2 ------------------------------------------------------------ rev 7: barry | 23-Sep-2006 16:05:06 | 1 lines copy test ------------------------------------------------------------ rev 4: barry | 23-Sep-2006 16:05:02 | 1 lines commit modified file ------------------------------------------------------------ rev 3: barry | 23-Sep-2006 16:05:00 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 23-Sep-2006 16:04:57 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 23-Sep-2006 16:04:57 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Test - ls Info: PYSVN CMD ls file:///b:/repos/trunk/test file:///b:/repos/trunk/test/file1.txt file:///b:/repos/trunk/test/file1b.txt file:///b:/repos/trunk/test/file2.txt file:///b:/repos/trunk/test/file3.txt file:///b:/repos/trunk/test/file4.txt file:///b:/repos/trunk/test/file5.txt Info: PYSVN CMD ls -v file:///b:/repos/trunk/test 4 barry 25 23-Sep-2006 16:05:02 file:///b:/repos/trunk/test/file1.txt 7 barry 23 23-Sep-2006 16:05:06 file:///b:/repos/trunk/test/file1b.txt 3 barry 17 23-Sep-2006 16:05:00 file:///b:/repos/trunk/test/file2.txt 3 barry 17 23-Sep-2006 16:05:00 file:///b:/repos/trunk/test/file3.txt 3 barry 17 23-Sep-2006 16:05:00 file:///b:/repos/trunk/test/file4.txt 3 barry 17 23-Sep-2006 16:05:00 file:///b:/repos/trunk/test/file5.txt Info: PYSVN CMD ls b:\wc2\test b:/wc2/test/file1.txt b:/wc2/test/file1b.txt b:/wc2/test/file2.txt b:/wc2/test/file3.txt b:/wc2/test/file4.txt b:/wc2/test/file5.txt Info: PYSVN CMD ls -v b:\wc2\test 4 barry 25 23-Sep-2006 16:05:02 b:/wc2/test/file1.txt 7 barry 23 23-Sep-2006 16:05:06 b:/wc2/test/file1b.txt 3 barry 17 23-Sep-2006 16:05:00 b:/wc2/test/file2.txt 3 barry 17 23-Sep-2006 16:05:00 b:/wc2/test/file3.txt 3 barry 17 23-Sep-2006 16:05:00 b:/wc2/test/file4.txt 3 barry 17 23-Sep-2006 16:05:00 b:/wc2/test/file5.txt Info: Test - merge - see below Info: Test - mkdir - done above Info: Test - move Info: Create File msg.tmp - move url test Info: PYSVN CMD move file:///b:/repos/trunk/test/file2.txt file:///b:/repos/trunk/test/file2b.txt Log message --- ------- Info: PYSVN CMD move b:\wc2\test\file3.txt b:\wc2\test\file3b.txt A b:/wc2/test/file3b.txt D b:/wc2/test/file3.txt Info: PYSVN CMD checkin b:\wc2 -m "move wc test" A wc2/test/file3b.txt D wc2/test/file3.txt M wc2/test/file1b.txt Revision 9 Info: Test - status Info: Append File b:\wc1\test\file4.txt - file 4 is changing Info: PYSVN CMD checkin b:\wc1 -m "change wc1 for status -u to detect" M test/file4.txt Revision 10 Info: PYSVN CMD status b:\wc2 Info: PYSVN CMD status --verbose b:\wc2 4 4 barry b:\wc2 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt 4 3 barry b:\wc2\test\file2.txt 9 9 barry b:\wc2\test\file3b.txt 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt Info: PYSVN CMD status --show-updates b:\wc2 M b:\wc2\test D b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt M b:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry b:\wc2 M 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt D 4 3 barry b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt 9 9 barry b:\wc2\test\file3b.txt M 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt Info: PYSVN CMD update A file1b.txt A file2b.txt A file3b.txt D file2.txt D file3.txt Updated to revision 10 Info: PYSVN CMD status --show-updates b:\wc2 M b:\wc2\test D b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt M b:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry b:\wc2 M 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt D 4 3 barry b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt 9 9 barry b:\wc2\test\file3b.txt M 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt Info: PYSVN CMD checkin b:\wc2 -m "prop change" Nothing to commit Info: Test - propdel Info: CMD cd /d b:\wc2\test Info: PYSVN CMD propset test:prop1 del_me file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: PYSVN CMD propdel test:prop1 file4.txt Info: PYSVN CMD proplist -v file4.txt Info: Test - propget Info: PYSVN CMD propget svn:eol-style file4.txt Info: Test - proplist - see above Info: Test - propset Info: CMD cd /d b:\wc2\test Info: PYSVN CMD proplist -v file4.txt Info: PYSVN CMD propset svn:eol-style native file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Test - remove Info: CMD cd /d b:\wc2\test Info: PYSVN CMD remove file5.txt D file5.txt Info: PYSVN CMD status M file4.txt D file5.txt Info: Test - resolved Info: Append File b:\wc1\test\file4.txt - conflict in file4 yes Info: Append File b:\wc2\test\file4.txt - conflict in file4 no Info: PYSVN CMD checkin b:\wc1\test -m "make a conflict part 1" M wc1/test/file4.txt Revision 11 Info: PYSVN CMD update b:\wc2\test A b:/wc2/test/file2b.txt D b:/wc2/test/file2.txt U b:/wc2 U b:/wc2/test U b:/wc2/test/file4.txt Updated to revision 11 Info: PYSVN CMD status CM file4.txt ? file4.txt.mine ? file4.txt.r11 ? file4.txt.r4 D file5.txt Info: CMD copy b:\wc2\test\file4.txt.mine b:\wc2\test\file4.txt 1 file(s) copied. Info: PYSVN CMD resolved b:\wc2\test\file4.txt R b:/wc2/test/file4.txt Info: PYSVN CMD checkin b:\wc2\test\file4.txt -m "resolve a confict part 2" M file4.txt Revision 12 Info: Test - revert Info: PYSVN CMD revert file5.txt R file5.txt Info: PYSVN CMD status Info: Test - revproplist Info: PYSVN CMD revproplist file:///b:/repos/trunk Revision: 12 svn:author: barry svn:date: 2006-09-23T15:05:21.973238Z svn:log: resolve a confict part 2 Info: Test - revpropget Info: PYSVN CMD revpropget svn:log file:///b:/repos/trunk Revision: 12 svn:log: resolve a confict part 2 Info: PYSVN CMD revpropget no_such_prop file:///b:/repos/trunk Revision: 12 no_such_prop: None Info: Test - revpropset Info: PYSVN CMD revpropset svn:log "Hello world" file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - revpropdel Info: PYSVN CMD revpropdel svn:log file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - status - see above Info: Test - relocate Info: CMD mkdir b:\root Info: CMD move b:\repos b:\root Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///b:/repos/trunk Repository UUID: 83564c9e-9371-b04b-982f-e947ec829d1d Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 23-Sep-2006 16:04:57 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc1 Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///b:/root/repos/trunk Repository UUID: 83564c9e-9371-b04b-982f-e947ec829d1d Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 23-Sep-2006 16:04:57 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///b:/repos/trunk Repository UUID: 83564c9e-9371-b04b-982f-e947ec829d1d Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 23-Sep-2006 16:05:02 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc2 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///b:/root/repos/trunk Repository UUID: 83564c9e-9371-b04b-982f-e947ec829d1d Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 23-Sep-2006 16:05:02 Info: Test - switch Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///b:/root/repos/trunk Repository UUID: 83564c9e-9371-b04b-982f-e947ec829d1d Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 23-Sep-2006 16:05:02 Info: PYSVN CMD switch b:\wc2 file:///b:/root/repos/tags/version1 A b:/wc2/test/file2.txt A b:/wc2/test/file3.txt D b:/wc2/test/file1b.txt D b:/wc2/test/file2b.txt D b:/wc2/test/file3b.txt U b:/wc2 U b:/wc2/test U b:/wc2/test/file4.txt Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///b:/root/repos/tags/version1 Repository UUID: 83564c9e-9371-b04b-982f-e947ec829d1d Revision: 12 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 23-Sep-2006 16:05:05 Info: Test - update - see above Info: Test - Info: Testing - merge Info: PYSVN CMD checkout file:///b:/root/repos/trunk b:\wc3 A b:/wc3/test A b:/wc3/test/file1.txt A b:/wc3/test/file1b.txt A b:/wc3/test/file2b.txt A b:/wc3/test/file3b.txt A b:/wc3/test/file4.txt A b:/wc3/test/file5.txt U b:/wc3 Checked out revision 12 Info: CMD cd b:\wc3\test Info: Create File file-merge-1.txt - test add file merge 1 Info: Create File file-merge-2.txt - test add file merge 2 Info: PYSVN CMD add file-merge-1.txt A file-merge-1.txt Info: PYSVN CMD add file-merge-2.txt A file-merge-2.txt Info: PYSVN CMD commit -m "add test merge files" . A test/file-merge-1.txt A test/file-merge-2.txt Revision 13 Info: Create File msg.tmp - make a branch Info: PYSVN CMD copy file:///b:/root/repos/trunk/test file:///b:/root/repos/trunk/test-branch Log message --- ------- Info: PYSVN CMD update b:\wc3 A b:/wc3/test-branch A b:/wc3/test-branch/file-merge-1.txt A b:/wc3/test-branch/file-merge-2.txt A b:/wc3/test-branch/file1.txt A b:/wc3/test-branch/file1b.txt A b:/wc3/test-branch/file2b.txt A b:/wc3/test-branch/file3b.txt A b:/wc3/test-branch/file4.txt A b:/wc3/test-branch/file5.txt U b:/wc3 U b:/wc3/test Updated to revision 14 Info: Create File file-merge-3.txt - test add file merge 3 Info: PYSVN CMD add file-merge-3.txt A file-merge-3.txt Info: PYSVN CMD rm file-merge-1.txt D file-merge-1.txt Info: Append File file-merge-2.txt - modify merge 2 Info: PYSVN CMD commit -m "change test merge files" . A test/file-merge-3.txt D test/file-merge-1.txt M test/file-merge-2.txt Revision 15 Info: PYSVN CMD merge --dry-run --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch A b:/wc3/test-branch/file-merge-3.txt D b:/wc3/test-branch/file-merge-1.txt U b:/wc3/test-branch U b:/wc3/test-branch/file-merge-2.txt Info: PYSVN CMD merge --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch A b:/wc3/test-branch/file-merge-3.txt U b:/wc3/test-branch U b:/wc3/test-branch/file-merge-2.txt skip b:/wc3/test-branch/file-merge-1.txt Info: PYSVN CMD status b:\wc3\test-branch D b:\wc3\test-branch\file-merge-1.txt M b:\wc3\test-branch\file-merge-2.txt A + b:\wc3\test-branch\file-merge-3.txt Info: PYSVN CMD diff b:\wc3\test-branch Index: b:/wc3/test-branch/file-merge-1.txt =================================================================== --- b:/wc3/test-branch/file-merge-1.txt (revision 14) +++ b:/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: b:/wc3/test-branch/file-merge-2.txt =================================================================== --- b:/wc3/test-branch/file-merge-2.txt (revision 14) +++ b:/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Info: CMD c:\python24\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_01_set_get_tests.py b:\configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Test - end pysvn-1.7.8/Tests/test-01.win32.known_good-py2-svn1.5.log000644 000771 000771 00000064570 11264414514 023076 0ustar00barrybarry000000 000000 WorkDir: C:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python26\python.exe Username: barry Info: PYSVN CMD c:\python26\python.exe C:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.01.00 --config-dir b:\configdir Info: CMD mkdir testroot-01 Info: CMD subst b: C:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-01 Info: CMD cd /d b:\ Info: CMD svnadmin create b:\repos Info: Test - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-01 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-01 add test" Info: Test - ls Info: PYSVN CMD ls file:///b:/repos -v -R 2 barry 0 11-Oct-2009 18:15:41 file:///b:/repos/trunk 2 barry 0 11-Oct-2009 18:15:41 file:///b:/repos/trunk/test Info: Test - checkout Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD dir b:\wc1 /s /b /a-h b:\wc1\test b:\wc1\.svn\entries b:\wc1\.svn\format b:\wc1\.svn\prop-base b:\wc1\.svn\props b:\wc1\.svn\text-base b:\wc1\.svn\tmp b:\wc1\.svn\tmp\prop-base b:\wc1\.svn\tmp\props b:\wc1\.svn\tmp\text-base b:\wc1\test\.svn\entries b:\wc1\test\.svn\format b:\wc1\test\.svn\prop-base b:\wc1\test\.svn\props b:\wc1\test\.svn\text-base b:\wc1\test\.svn\tmp b:\wc1\test\.svn\tmp\prop-base b:\wc1\test\.svn\tmp\props b:\wc1\test\.svn\tmp\text-base Info: CMD cd /d b:\wc1\test Info: Test - add Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: Create File file3.txt - test add file 3 Info: Create File file4.txt - test add file 4 Info: Create File file5.txt - test add file 5 Info: CMD mkdir folder1 Info: Create File folder1\file7.txt - test add file 7 Info: CMD mkdir folder1\folder2 Info: Create File folder1\folder2\file8.txt - test add file 8 Info: CMD mkdir folder3 Info: Create File folder3\file9.txt - test add file 9 Info: CMD mkdir folder3\folder4 Info: Create File folder3\folder4\file10.txt - test add file 10 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD add file3.txt A file3.txt Info: PYSVN CMD add file4.txt A file4.txt Info: PYSVN CMD add --force file5.txt A file5.txt Info: PYSVN CMD add folder1 A folder1 A folder1/file7.txt A folder1/folder2 A folder1/folder2/file8.txt Info: PYSVN CMD add --non-recursive folder3 A folder3 Info: PYSVN CMD checkin -m "commit added files" A test/file1.txt A test/file2.txt A test/file3.txt A test/file4.txt A test/file5.txt A test/folder1 A test/folder1/file7.txt A test/folder1/folder2 A test/folder1/folder2/file8.txt A test/folder3 Revision 3 Info: Test - update - get a new wc that will update Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A b:/wc2/test A b:/wc2/test/file1.txt A b:/wc2/test/file2.txt A b:/wc2/test/file3.txt A b:/wc2/test/file4.txt A b:/wc2/test/file5.txt A b:/wc2/test/folder1 A b:/wc2/test/folder1/file7.txt A b:/wc2/test/folder1/folder2 A b:/wc2/test/folder1/folder2/file8.txt A b:/wc2/test/folder3 U b:/wc2 Checked out revision 3 Info: Test - - checkin a mod from wc1 Info: Append File b:\wc1\test\file1.txt - line 2 Info: PYSVN CMD checkin -m "commit modified file" M test/file1.txt Revision 4 Info: PYSVN CMD checkin -m "commit modified file" Nothing to commit Info: Test - update Info: PYSVN CMD update b:\wc2 U b:/wc2 U b:/wc2/test U b:/wc2/test/file1.txt Updated to revision 4 Info: Test - the rest in lexical order Info: Test - annotate Info: PYSVN CMD annotate b:\wc2\test\file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2009-10-11T17:15:47.458500Z | test add file 1 1| r4 | barry | 2009-10-11T17:15:49.692875Z | line 2 Info: Test - cat Info: PYSVN CMD cat -r head file:///b:/repos/trunk/test/file1.txt test add file 1 line 2 Info: Test - cleanup Info: Test - copy Info: PYSVN CMD mkdir file:///b:/repos/tags -m "test-01 add tags" Info: Create File msg.tmp - tag the trunk Info: PYSVN CMD copy file:///b:/repos/trunk file:///b:/repos/tags/version1 Log message --- ------- Info: PYSVN CMD ls -v file:///b:/repos/tags 6 barry 0 11-Oct-2009 18:15:54 file:///b:/repos/tags/version1 Info: PYSVN CMD copy b:\wc2\test\file1.txt b:\wc2\test\file1b.txt A b:/wc2/test/file1b.txt Info: PYSVN CMD propset svn:eol-style native b:\wc2\test\file1b.txt Info: PYSVN CMD checkin b:\wc2 -m "copy test" A wc2/test/file1b.txt Revision 7 Info: Test - diff Info: Append File b:\wc2\test\file1b.txt - new line Info: PYSVN CMD diff b:\wc2 Index: b:/wc2/test/file1b.txt =================================================================== --- b:/wc2/test/file1b.txt (revision 7) +++ b:/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Test - export Info: PYSVN CMD export file:///b:/repos/trunk/test b:\export1.native A b:\export1.native A b:\export1.native/file1.txt A b:\export1.native/file1b.txt A b:\export1.native/file2.txt A b:\export1.native/file3.txt A b:\export1.native/file4.txt A b:\export1.native/file5.txt A b:\export1.native/folder1 A b:\export1.native/folder1/file7.txt A b:\export1.native/folder1/folder2 A b:\export1.native/folder1/folder2/file8.txt A b:\export1.native/folder3 Info: PYSVN CMD export --native-eol CR file:///b:/repos/trunk/test b:\export1.cr A b:\export1.cr A b:\export1.cr/file1.txt A b:\export1.cr/file1b.txt A b:\export1.cr/file2.txt A b:\export1.cr/file3.txt A b:\export1.cr/file4.txt A b:\export1.cr/file5.txt A b:\export1.cr/folder1 A b:\export1.cr/folder1/file7.txt A b:\export1.cr/folder1/folder2 A b:\export1.cr/folder1/folder2/file8.txt A b:\export1.cr/folder3 Info: PYSVN CMD export --native-eol LF file:///b:/repos/trunk/test b:\export1.lf A b:\export1.lf A b:\export1.lf/file1.txt A b:\export1.lf/file1b.txt A b:\export1.lf/file2.txt A b:\export1.lf/file3.txt A b:\export1.lf/file4.txt A b:\export1.lf/file5.txt A b:\export1.lf/folder1 A b:\export1.lf/folder1/file7.txt A b:\export1.lf/folder1/folder2 A b:\export1.lf/folder1/folder2/file8.txt A b:\export1.lf/folder3 Info: PYSVN CMD export --native-eol CRLF file:///b:/repos/trunk/test b:\export1.crlf A b:\export1.crlf A b:\export1.crlf/file1.txt A b:\export1.crlf/file1b.txt A b:\export1.crlf/file2.txt A b:\export1.crlf/file3.txt A b:\export1.crlf/file4.txt A b:\export1.crlf/file5.txt A b:\export1.crlf/folder1 A b:\export1.crlf/folder1/file7.txt A b:\export1.crlf/folder1/folder2 A b:\export1.crlf/folder1/folder2/file8.txt A b:\export1.crlf/folder3 Info: CMD dir /s /b b:\export1.native b:\export1.native\file1.txt b:\export1.native\file1b.txt b:\export1.native\file2.txt b:\export1.native\file3.txt b:\export1.native\file4.txt b:\export1.native\file5.txt b:\export1.native\folder1 b:\export1.native\folder3 b:\export1.native\folder1\file7.txt b:\export1.native\folder1\folder2 b:\export1.native\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.cr b:\export1.cr\file1.txt b:\export1.cr\file1b.txt b:\export1.cr\file2.txt b:\export1.cr\file3.txt b:\export1.cr\file4.txt b:\export1.cr\file5.txt b:\export1.cr\folder1 b:\export1.cr\folder3 b:\export1.cr\folder1\file7.txt b:\export1.cr\folder1\folder2 b:\export1.cr\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.lf b:\export1.lf\file1.txt b:\export1.lf\file1b.txt b:\export1.lf\file2.txt b:\export1.lf\file3.txt b:\export1.lf\file4.txt b:\export1.lf\file5.txt b:\export1.lf\folder1 b:\export1.lf\folder3 b:\export1.lf\folder1\file7.txt b:\export1.lf\folder1\folder2 b:\export1.lf\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.crlf b:\export1.crlf\file1.txt b:\export1.crlf\file1b.txt b:\export1.crlf\file2.txt b:\export1.crlf\file3.txt b:\export1.crlf\file4.txt b:\export1.crlf\file5.txt b:\export1.crlf\folder1 b:\export1.crlf\folder3 b:\export1.crlf\folder1\file7.txt b:\export1.crlf\folder1\folder2 b:\export1.crlf\folder1\folder2\file8.txt Info: Test - import Info: Test - info Info: PYSVN CMD info b:\wc2\test Path: b:\wc2\test Name: . Url: file:///b:/repos/trunk/test Repository UUID: eb499e03-42bf-7843-84eb-c566f1c06fca Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 11-Oct-2009 18:15:49 Info: PYSVN CMD info b:\wc2\test\file1.txt Path: b:\wc2\test\file1.txt Name: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Repository UUID: eb499e03-42bf-7843-84eb-c566f1c06fca Revision: 4 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 11-Oct-2009 18:15:49 Text Last Updated: 11-Oct-2009 18:15:51 Checksum: cb0b37e264ebcc467e9f37a069e034d7 Info: Test - log Info: PYSVN CMD log b:\wc2 ------------------------------------------------------------ rev 7: barry | 11-Oct-2009 18:15:57 | 1 lines copy test ------------------------------------------------------------ rev 4: barry | 11-Oct-2009 18:15:49 | 1 lines commit modified file ------------------------------------------------------------ rev 3: barry | 11-Oct-2009 18:15:47 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 11-Oct-2009 18:15:41 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 11-Oct-2009 18:15:41 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Test - ls Info: PYSVN CMD ls file:///b:/repos/trunk/test file:///b:/repos/trunk/test/file1.txt file:///b:/repos/trunk/test/file1b.txt file:///b:/repos/trunk/test/file2.txt file:///b:/repos/trunk/test/file3.txt file:///b:/repos/trunk/test/file4.txt file:///b:/repos/trunk/test/file5.txt file:///b:/repos/trunk/test/folder1 file:///b:/repos/trunk/test/folder3 Info: PYSVN CMD ls -v file:///b:/repos/trunk/test 4 barry 25 11-Oct-2009 18:15:49 file:///b:/repos/trunk/test/file1.txt 7 barry 23 11-Oct-2009 18:15:57 file:///b:/repos/trunk/test/file1b.txt 3 barry 17 11-Oct-2009 18:15:47 file:///b:/repos/trunk/test/file2.txt 3 barry 17 11-Oct-2009 18:15:47 file:///b:/repos/trunk/test/file3.txt 3 barry 17 11-Oct-2009 18:15:47 file:///b:/repos/trunk/test/file4.txt 3 barry 17 11-Oct-2009 18:15:47 file:///b:/repos/trunk/test/file5.txt 3 barry 0 11-Oct-2009 18:15:47 file:///b:/repos/trunk/test/folder1 3 barry 0 11-Oct-2009 18:15:47 file:///b:/repos/trunk/test/folder3 Info: PYSVN CMD ls b:\wc2\test b:/wc2/test/file1.txt b:/wc2/test/file1b.txt b:/wc2/test/file2.txt b:/wc2/test/file3.txt b:/wc2/test/file4.txt b:/wc2/test/file5.txt b:/wc2/test/folder1 b:/wc2/test/folder3 Info: PYSVN CMD ls -v b:\wc2\test 4 barry 25 11-Oct-2009 18:15:49 b:/wc2/test/file1.txt 7 barry 23 11-Oct-2009 18:15:57 b:/wc2/test/file1b.txt 3 barry 17 11-Oct-2009 18:15:47 b:/wc2/test/file2.txt 3 barry 17 11-Oct-2009 18:15:47 b:/wc2/test/file3.txt 3 barry 17 11-Oct-2009 18:15:47 b:/wc2/test/file4.txt 3 barry 17 11-Oct-2009 18:15:47 b:/wc2/test/file5.txt 3 barry 0 11-Oct-2009 18:15:47 b:/wc2/test/folder1 3 barry 0 11-Oct-2009 18:15:47 b:/wc2/test/folder3 Info: Test - merge - see below Info: Test - mkdir - done above Info: Test - move Info: Create File msg.tmp - move url test Info: PYSVN CMD move file:///b:/repos/trunk/test/file2.txt file:///b:/repos/trunk/test/file2b.txt Log message --- ------- Info: PYSVN CMD move b:\wc2\test\file3.txt b:\wc2\test\file3b.txt A b:/wc2/test/file3b.txt D b:/wc2/test/file3.txt Info: PYSVN CMD checkin b:\wc2 -m "move wc test" A wc2/test/file3b.txt D wc2/test/file3.txt M wc2/test/file1b.txt Revision 9 Info: Test - status Info: Append File b:\wc1\test\file4.txt - file 4 is changing Info: PYSVN CMD checkin b:\wc1 -m "change wc1 for status -u to detect" M test/file4.txt Revision 10 Info: PYSVN CMD status b:\wc2 Info: PYSVN CMD status --verbose b:\wc2 4 4 barry b:\wc2 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt 4 3 barry b:\wc2\test\file2.txt 9 9 barry b:\wc2\test\file3b.txt 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt 4 3 barry b:\wc2\test\folder1 4 3 barry b:\wc2\test\folder1\file7.txt 4 3 barry b:\wc2\test\folder1\folder2 4 3 barry b:\wc2\test\folder1\folder2\file8.txt 4 3 barry b:\wc2\test\folder3 Info: PYSVN CMD status --show-updates b:\wc2 M b:\wc2\test D b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt M b:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry b:\wc2 M 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt D 4 3 barry b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt 9 9 barry b:\wc2\test\file3b.txt M 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt 4 3 barry b:\wc2\test\folder1 4 3 barry b:\wc2\test\folder1\file7.txt 4 3 barry b:\wc2\test\folder1\folder2 4 3 barry b:\wc2\test\folder1\folder2\file8.txt 4 3 barry b:\wc2\test\folder3 Info: PYSVN CMD update A file1b.txt A file2b.txt A file3b.txt D file2.txt D file3.txt Updated to revision 10 Info: PYSVN CMD status --show-updates b:\wc2 M b:\wc2\test D b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt M b:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry b:\wc2 M 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt D 4 3 barry b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt 9 9 barry b:\wc2\test\file3b.txt M 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt 4 3 barry b:\wc2\test\folder1 4 3 barry b:\wc2\test\folder1\file7.txt 4 3 barry b:\wc2\test\folder1\folder2 4 3 barry b:\wc2\test\folder1\folder2\file8.txt 4 3 barry b:\wc2\test\folder3 Info: PYSVN CMD checkin b:\wc2 -m "prop change" Nothing to commit Info: Test - propdel Info: CMD cd /d b:\wc2\test Info: PYSVN CMD propset test:prop1 del_me file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: PYSVN CMD propdel test:prop1 file4.txt Info: PYSVN CMD proplist -v file4.txt Info: Test - propget Info: PYSVN CMD propget svn:eol-style file4.txt Info: Test - proplist - see above Info: Test - propset Info: CMD cd /d b:\wc2\test Info: PYSVN CMD proplist -v file4.txt Info: PYSVN CMD propset svn:eol-style native file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Test - remove Info: CMD cd /d b:\wc2\test Info: PYSVN CMD remove file5.txt D file5.txt Info: PYSVN CMD status M file4.txt D file5.txt Info: Test - resolved Info: Append File b:\wc1\test\file4.txt - conflict in file4 yes Info: Append File b:\wc2\test\file4.txt - conflict in file4 no Info: PYSVN CMD checkin b:\wc1\test -m "make a conflict part 1" M wc1/test/file4.txt Revision 11 Info: PYSVN CMD update b:\wc2\test callback_conflict_resolver action: base_file: u'b:\\wc2\\test\\.svn\\text-base\\file4.txt.svn-base' is_binary: False kind: merged_file: u'b:\\wc2\\test\\.svn\\tmp\\tempfile.3.tmp' mime_type: None my_file: u'b:\\wc2\\test\\.svn\\tmp\\tempfile.2.tmp' node_kind: path: 'b:/wc2/test/file4.txt' property_name: None reason: their_file: u'b:\\wc2\\test\\.svn\\tmp\\text-base\\file4.txt.svn-base' A b:/wc2/test/file2b.txt D b:/wc2/test/file2.txt U b:/wc2 U b:/wc2/test U b:/wc2/test/file4.txt Updated to revision 11 Info: PYSVN CMD status CM file4.txt ? file4.txt.mine ? file4.txt.r11 ? file4.txt.r4 D file5.txt Info: CMD copy b:\wc2\test\file4.txt.mine b:\wc2\test\file4.txt 1 file(s) copied. Info: PYSVN CMD resolved b:\wc2\test\file4.txt R b:/wc2/test/file4.txt Info: PYSVN CMD checkin b:\wc2\test\file4.txt -m "resolve a confict part 2" M file4.txt Revision 12 Info: Test - revert Info: PYSVN CMD revert file5.txt R file5.txt Info: PYSVN CMD status Info: Test - revproplist Info: PYSVN CMD revproplist file:///b:/repos/trunk Revision: 12 svn:author: barry svn:date: 2009-10-11T17:16:21.646000Z svn:log: resolve a confict part 2 Info: Test - revpropget Info: PYSVN CMD revpropget svn:log file:///b:/repos/trunk Revision: 12 svn:log: resolve a confict part 2 Info: PYSVN CMD revpropget no_such_prop file:///b:/repos/trunk Revision: 12 no_such_prop: None Info: Test - revpropset Info: PYSVN CMD revpropset svn:log "Hello world" file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - revpropdel Info: PYSVN CMD revpropdel svn:log file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - status - see above Info: Test - relocate Info: CMD mkdir b:\root Info: CMD move b:\repos b:\root Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///b:/repos/trunk Repository UUID: eb499e03-42bf-7843-84eb-c566f1c06fca Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 11-Oct-2009 18:15:41 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc1 Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///b:/root/repos/trunk Repository UUID: eb499e03-42bf-7843-84eb-c566f1c06fca Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 11-Oct-2009 18:15:41 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///b:/repos/trunk Repository UUID: eb499e03-42bf-7843-84eb-c566f1c06fca Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 11-Oct-2009 18:15:49 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc2 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///b:/root/repos/trunk Repository UUID: eb499e03-42bf-7843-84eb-c566f1c06fca Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 11-Oct-2009 18:15:49 Info: Test - switch Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///b:/root/repos/trunk Repository UUID: eb499e03-42bf-7843-84eb-c566f1c06fca Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 11-Oct-2009 18:15:49 Info: PYSVN CMD switch b:\wc2 file:///b:/root/repos/tags/version1 A b:/wc2/test/file2.txt A b:/wc2/test/file3.txt D b:/wc2/test/file1b.txt D b:/wc2/test/file2b.txt D b:/wc2/test/file3b.txt U b:/wc2 U b:/wc2/test U b:/wc2/test/file4.txt Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///b:/root/repos/tags/version1 Repository UUID: eb499e03-42bf-7843-84eb-c566f1c06fca Revision: 12 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 11-Oct-2009 18:15:54 Info: Test - update - see above Info: Test - Info: Testing - merge Info: PYSVN CMD checkout file:///b:/root/repos/trunk b:\wc3 A b:/wc3/test A b:/wc3/test/file1.txt A b:/wc3/test/file1b.txt A b:/wc3/test/file2b.txt A b:/wc3/test/file3b.txt A b:/wc3/test/file4.txt A b:/wc3/test/file5.txt A b:/wc3/test/folder1 A b:/wc3/test/folder1/file7.txt A b:/wc3/test/folder1/folder2 A b:/wc3/test/folder1/folder2/file8.txt A b:/wc3/test/folder3 U b:/wc3 Checked out revision 12 Info: CMD cd b:\wc3\test Info: Create File file-merge-1.txt - test add file merge 1 Info: Create File file-merge-2.txt - test add file merge 2 Info: PYSVN CMD add file-merge-1.txt A file-merge-1.txt Info: PYSVN CMD add file-merge-2.txt A file-merge-2.txt Info: PYSVN CMD commit -m "add test merge files" . A test/file-merge-1.txt A test/file-merge-2.txt Revision 13 Info: Create File msg.tmp - make a branch Info: PYSVN CMD copy file:///b:/root/repos/trunk/test file:///b:/root/repos/trunk/test-branch Log message --- ------- Info: PYSVN CMD update b:\wc3 A b:/wc3/test-branch A b:/wc3/test-branch/file-merge-1.txt A b:/wc3/test-branch/file-merge-2.txt A b:/wc3/test-branch/file1.txt A b:/wc3/test-branch/file1b.txt A b:/wc3/test-branch/file2b.txt A b:/wc3/test-branch/file3b.txt A b:/wc3/test-branch/file4.txt A b:/wc3/test-branch/file5.txt A b:/wc3/test-branch/folder1 A b:/wc3/test-branch/folder1/file7.txt A b:/wc3/test-branch/folder1/folder2 A b:/wc3/test-branch/folder1/folder2/file8.txt A b:/wc3/test-branch/folder3 U b:/wc3 U b:/wc3/test Updated to revision 14 Info: Create File file-merge-3.txt - test add file merge 3 Info: PYSVN CMD add file-merge-3.txt A file-merge-3.txt Info: PYSVN CMD rm file-merge-1.txt D file-merge-1.txt Info: Append File file-merge-2.txt - modify merge 2 Info: PYSVN CMD commit -m "change test merge files" . A test/file-merge-3.txt D test/file-merge-1.txt M test/file-merge-2.txt Revision 15 Info: PYSVN CMD merge --dry-run --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch A b:/wc3/test-branch/file-merge-3.txt D b:/wc3/test-branch/file-merge-1.txt U b:/wc3/test-branch U b:/wc3/test-branch/file-merge-2.txt merge_begin b:/wc3/test-branch merge_begin b:/wc3/test-branch/file-merge-2.txt Info: PYSVN CMD merge --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch U b:/wc3/test-branch Info: PYSVN CMD status b:\wc3\test-branch M b:\wc3\test-branch D b:\wc3\test-branch\file-merge-1.txt MM b:\wc3\test-branch\file-merge-2.txt A + b:\wc3\test-branch\file-merge-3.txt M b:\wc3\test-branch\file1.txt M b:\wc3\test-branch\file1b.txt M b:\wc3\test-branch\file2b.txt M b:\wc3\test-branch\file3b.txt M b:\wc3\test-branch\file4.txt M b:\wc3\test-branch\file5.txt Info: PYSVN CMD diff b:\wc3\test-branch Property changes on: b:\wc3\test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r15* Property changes on: b:\wc3\test-branch\file1b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1b.txt:r15 Property changes on: b:\wc3\test-branch\file2b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file2b.txt:r15 Property changes on: b:\wc3\test-branch\file4.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file4.txt:r15 Property changes on: b:\wc3\test-branch\file3b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file3b.txt:r15 Property changes on: b:\wc3\test-branch\file5.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file5.txt:r15 Index: b:/wc3/test-branch/file-merge-1.txt =================================================================== --- b:/wc3/test-branch/file-merge-1.txt (revision 14) +++ b:/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: b:/wc3/test-branch/file-merge-2.txt =================================================================== --- b:/wc3/test-branch/file-merge-2.txt (revision 14) +++ b:/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Property changes on: b:\wc3\test-branch\file-merge-2.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-2.txt:r15 Property changes on: b:\wc3\test-branch\file-merge-3.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-3.txt:r15 Property changes on: b:\wc3\test-branch\file1.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1.txt:r15 Info: CMD c:\python26\python.exe C:\wc\pysvn\trunk\pysvn\Extension\Tests\test_01_set_get_tests.py b:\configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Test - end pysvn-1.7.8/Tests/test-01.win32.known_good-py2-svn1.6.log000644 000771 000771 00000065302 12052506061 023064 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python27.win32\python.exe Username: barry Info: PYSVN CMD c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.01.00 --config-dir b:\configdir Info: CMD mkdir testroot-01 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-01 Info: CMD cd /d b:\ Info: CMD svnadmin create b:\repos Info: Test - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-01 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-01 add test" Info: Test - ls Info: PYSVN CMD ls file:///b:/repos -v -R 2 barry 0 19-Nov-2012 19:40:28 file:///B:/repos/trunk 2 barry 0 19-Nov-2012 19:40:28 file:///B:/repos/trunk/test Info: Test - checkout Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD dir b:\wc1 /s /b /a-h b:\wc1\test b:\wc1\.svn\entries b:\wc1\.svn\prop-base b:\wc1\.svn\props b:\wc1\.svn\text-base b:\wc1\.svn\tmp b:\wc1\.svn\tmp\prop-base b:\wc1\.svn\tmp\props b:\wc1\.svn\tmp\text-base b:\wc1\test\.svn\entries b:\wc1\test\.svn\prop-base b:\wc1\test\.svn\props b:\wc1\test\.svn\text-base b:\wc1\test\.svn\tmp b:\wc1\test\.svn\tmp\prop-base b:\wc1\test\.svn\tmp\props b:\wc1\test\.svn\tmp\text-base Info: CMD cd /d b:\wc1\test Info: Test - add Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: Create File file3.txt - test add file 3 Info: Create File file4.txt - test add file 4 Info: Create File file5.txt - test add file 5 Info: CMD mkdir folder1 Info: Create File folder1\file7.txt - test add file 7 Info: CMD mkdir folder1\folder2 Info: Create File folder1\folder2\file8.txt - test add file 8 Info: CMD mkdir folder3 Info: Create File folder3\file9.txt - test add file 9 Info: CMD mkdir folder3\folder4 Info: Create File folder3\folder4\file10.txt - test add file 10 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD add file3.txt A file3.txt Info: PYSVN CMD add file4.txt A file4.txt Info: PYSVN CMD add --force file5.txt A file5.txt Info: PYSVN CMD add folder1 A folder1 A folder1/file7.txt A folder1/folder2 A folder1/folder2/file8.txt Info: PYSVN CMD add --non-recursive folder3 A folder3 Info: PYSVN CMD checkin -m "commit added files" A b:/wc1/test/file1.txt A b:/wc1/test/file2.txt A b:/wc1/test/file3.txt A b:/wc1/test/file4.txt A b:/wc1/test/file5.txt A b:/wc1/test/folder1 A b:/wc1/test/folder1/file7.txt A b:/wc1/test/folder1/folder2 A b:/wc1/test/folder1/folder2/file8.txt A b:/wc1/test/folder3 Revision 3 Info: Test - update - get a new wc that will update Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A b:/wc2/test A b:/wc2/test/file1.txt A b:/wc2/test/file2.txt A b:/wc2/test/file3.txt A b:/wc2/test/file4.txt A b:/wc2/test/file5.txt A b:/wc2/test/folder1 A b:/wc2/test/folder1/file7.txt A b:/wc2/test/folder1/folder2 A b:/wc2/test/folder1/folder2/file8.txt A b:/wc2/test/folder3 U b:/wc2 Checked out revision 3 Info: Test - - checkin a mod from wc1 Info: Append File b:\wc1\test\file1.txt - line 2 Info: PYSVN CMD checkin -m "commit modified file" M b:/wc1/test/file1.txt Revision 4 Info: PYSVN CMD checkin -m "commit modified file" Nothing to commit Info: Test - update Info: PYSVN CMD update b:\wc2 U b:/wc2 U b:/wc2/test U b:/wc2/test/file1.txt Updated to revision 4 Info: Test - the rest in lexical order Info: Test - annotate Info: PYSVN CMD annotate b:\wc2\test\file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2012-11-19T19:40:29.036834Z | test add file 1 1| r4 | barry | 2012-11-19T19:40:29.395599Z | line 2 Info: Test - cat Info: PYSVN CMD cat -r head file:///b:/repos/trunk/test/file1.txt test add file 1 line 2 Info: Test - cleanup Info: Test - copy Info: PYSVN CMD mkdir file:///b:/repos/tags -m "test-01 add tags" Info: Create File msg.tmp - tag the trunk Info: PYSVN CMD copy file:///b:/repos/trunk file:///b:/repos/tags/version1 Log message --- ------- Info: PYSVN CMD ls -v file:///b:/repos/tags 6 barry 0 19-Nov-2012 19:40:29 file:///B:/repos/tags/version1 Info: PYSVN CMD copy b:\wc2\test\file1.txt b:\wc2\test\file1b.txt A b:/wc2/test/file1b.txt Info: PYSVN CMD propset svn:eol-style native b:\wc2\test\file1b.txt property_added b:/wc2/test/file1b.txt Info: PYSVN CMD checkin b:\wc2 -m "copy test" A B:/wc2/test/file1b.txt Revision 7 Info: Test - diff Info: Append File b:\wc2\test\file1b.txt - new line Info: PYSVN CMD diff b:\wc2 Index: b:/wc2/test/file1b.txt =================================================================== --- b:/wc2/test/file1b.txt (revision 7) +++ b:/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Test - export Info: PYSVN CMD export file:///b:/repos/trunk/test b:\export1.native A b:\export1.native A b:\export1.native/file1.txt A b:\export1.native/file1b.txt A b:\export1.native/file2.txt A b:\export1.native/file3.txt A b:\export1.native/file4.txt A b:\export1.native/file5.txt A b:\export1.native/folder1 A b:\export1.native/folder1/file7.txt A b:\export1.native/folder1/folder2 A b:\export1.native/folder1/folder2/file8.txt A b:\export1.native/folder3 Info: PYSVN CMD export --native-eol CR file:///b:/repos/trunk/test b:\export1.cr A b:\export1.cr A b:\export1.cr/file1.txt A b:\export1.cr/file1b.txt A b:\export1.cr/file2.txt A b:\export1.cr/file3.txt A b:\export1.cr/file4.txt A b:\export1.cr/file5.txt A b:\export1.cr/folder1 A b:\export1.cr/folder1/file7.txt A b:\export1.cr/folder1/folder2 A b:\export1.cr/folder1/folder2/file8.txt A b:\export1.cr/folder3 Info: PYSVN CMD export --native-eol LF file:///b:/repos/trunk/test b:\export1.lf A b:\export1.lf A b:\export1.lf/file1.txt A b:\export1.lf/file1b.txt A b:\export1.lf/file2.txt A b:\export1.lf/file3.txt A b:\export1.lf/file4.txt A b:\export1.lf/file5.txt A b:\export1.lf/folder1 A b:\export1.lf/folder1/file7.txt A b:\export1.lf/folder1/folder2 A b:\export1.lf/folder1/folder2/file8.txt A b:\export1.lf/folder3 Info: PYSVN CMD export --native-eol CRLF file:///b:/repos/trunk/test b:\export1.crlf A b:\export1.crlf A b:\export1.crlf/file1.txt A b:\export1.crlf/file1b.txt A b:\export1.crlf/file2.txt A b:\export1.crlf/file3.txt A b:\export1.crlf/file4.txt A b:\export1.crlf/file5.txt A b:\export1.crlf/folder1 A b:\export1.crlf/folder1/file7.txt A b:\export1.crlf/folder1/folder2 A b:\export1.crlf/folder1/folder2/file8.txt A b:\export1.crlf/folder3 Info: CMD dir /s /b b:\export1.native b:\export1.native\file1.txt b:\export1.native\file1b.txt b:\export1.native\file2.txt b:\export1.native\file3.txt b:\export1.native\file4.txt b:\export1.native\file5.txt b:\export1.native\folder1 b:\export1.native\folder3 b:\export1.native\folder1\file7.txt b:\export1.native\folder1\folder2 b:\export1.native\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.cr b:\export1.cr\file1.txt b:\export1.cr\file1b.txt b:\export1.cr\file2.txt b:\export1.cr\file3.txt b:\export1.cr\file4.txt b:\export1.cr\file5.txt b:\export1.cr\folder1 b:\export1.cr\folder3 b:\export1.cr\folder1\file7.txt b:\export1.cr\folder1\folder2 b:\export1.cr\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.lf b:\export1.lf\file1.txt b:\export1.lf\file1b.txt b:\export1.lf\file2.txt b:\export1.lf\file3.txt b:\export1.lf\file4.txt b:\export1.lf\file5.txt b:\export1.lf\folder1 b:\export1.lf\folder3 b:\export1.lf\folder1\file7.txt b:\export1.lf\folder1\folder2 b:\export1.lf\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.crlf b:\export1.crlf\file1.txt b:\export1.crlf\file1b.txt b:\export1.crlf\file2.txt b:\export1.crlf\file3.txt b:\export1.crlf\file4.txt b:\export1.crlf\file5.txt b:\export1.crlf\folder1 b:\export1.crlf\folder3 b:\export1.crlf\folder1\file7.txt b:\export1.crlf\folder1\folder2 b:\export1.crlf\folder1\folder2\file8.txt Info: Test - import Info: Test - info Info: PYSVN CMD info b:\wc2\test Path: b:\wc2\test Name: . Url: file:///B:/repos/trunk/test Repository UUID: 9eb97a17-a9fb-4948-9ff9-1a389399bc26 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 19-Nov-2012 19:40:29 Info: PYSVN CMD info b:\wc2\test\file1.txt Path: b:\wc2\test\file1.txt Name: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Repository UUID: 9eb97a17-a9fb-4948-9ff9-1a389399bc26 Revision: 4 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 19-Nov-2012 19:40:29 Text Last Updated: 19-Nov-2012 19:40:29 Checksum: cb0b37e264ebcc467e9f37a069e034d7 Info: Test - log Info: PYSVN CMD log b:\wc2 ------------------------------------------------------------ rev 7: barry | 19-Nov-2012 19:40:30 | 1 lines copy test ------------------------------------------------------------ rev 4: barry | 19-Nov-2012 19:40:29 | 1 lines commit modified file ------------------------------------------------------------ rev 3: barry | 19-Nov-2012 19:40:29 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 19-Nov-2012 19:40:28 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 19-Nov-2012 19:40:28 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Test - ls Info: PYSVN CMD ls file:///b:/repos/trunk/test file:///B:/repos/trunk/test/file1.txt file:///B:/repos/trunk/test/file1b.txt file:///B:/repos/trunk/test/file2.txt file:///B:/repos/trunk/test/file3.txt file:///B:/repos/trunk/test/file4.txt file:///B:/repos/trunk/test/file5.txt file:///B:/repos/trunk/test/folder1 file:///B:/repos/trunk/test/folder3 Info: PYSVN CMD ls -v file:///b:/repos/trunk/test 4 barry 25 19-Nov-2012 19:40:29 file:///B:/repos/trunk/test/file1.txt 7 barry 23 19-Nov-2012 19:40:30 file:///B:/repos/trunk/test/file1b.txt 3 barry 17 19-Nov-2012 19:40:29 file:///B:/repos/trunk/test/file2.txt 3 barry 17 19-Nov-2012 19:40:29 file:///B:/repos/trunk/test/file3.txt 3 barry 17 19-Nov-2012 19:40:29 file:///B:/repos/trunk/test/file4.txt 3 barry 17 19-Nov-2012 19:40:29 file:///B:/repos/trunk/test/file5.txt 3 barry 0 19-Nov-2012 19:40:29 file:///B:/repos/trunk/test/folder1 3 barry 0 19-Nov-2012 19:40:29 file:///B:/repos/trunk/test/folder3 Info: PYSVN CMD ls b:\wc2\test b:/wc2/test/file1.txt b:/wc2/test/file1b.txt b:/wc2/test/file2.txt b:/wc2/test/file3.txt b:/wc2/test/file4.txt b:/wc2/test/file5.txt b:/wc2/test/folder1 b:/wc2/test/folder3 Info: PYSVN CMD ls -v b:\wc2\test 4 barry 25 19-Nov-2012 19:40:29 b:/wc2/test/file1.txt 7 barry 23 19-Nov-2012 19:40:30 b:/wc2/test/file1b.txt 3 barry 17 19-Nov-2012 19:40:29 b:/wc2/test/file2.txt 3 barry 17 19-Nov-2012 19:40:29 b:/wc2/test/file3.txt 3 barry 17 19-Nov-2012 19:40:29 b:/wc2/test/file4.txt 3 barry 17 19-Nov-2012 19:40:29 b:/wc2/test/file5.txt 3 barry 0 19-Nov-2012 19:40:29 b:/wc2/test/folder1 3 barry 0 19-Nov-2012 19:40:29 b:/wc2/test/folder3 Info: Test - merge - see below Info: Test - mkdir - done above Info: Test - move Info: Create File msg.tmp - move url test Info: PYSVN CMD move file:///b:/repos/trunk/test/file2.txt file:///b:/repos/trunk/test/file2b.txt Log message --- ------- Info: PYSVN CMD move b:\wc2\test\file3.txt b:\wc2\test\file3b.txt A b:/wc2/test/file3b.txt D b:/wc2/test/file3.txt Info: PYSVN CMD checkin b:\wc2 -m "move wc test" A B:/wc2/test/file3b.txt D B:/wc2/test/file3.txt M B:/wc2/test/file1b.txt Revision 9 Info: Test - status Info: Append File b:\wc1\test\file4.txt - file 4 is changing Info: PYSVN CMD checkin b:\wc1 -m "change wc1 for status -u to detect" M B:/wc1/test/file4.txt Revision 10 Info: PYSVN CMD status b:\wc2 Info: PYSVN CMD status --verbose b:\wc2 4 4 barry b:\wc2 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt 4 3 barry b:\wc2\test\file2.txt 9 9 barry b:\wc2\test\file3b.txt 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt 4 3 barry b:\wc2\test\folder1 4 3 barry b:\wc2\test\folder1\file7.txt 4 3 barry b:\wc2\test\folder1\folder2 4 3 barry b:\wc2\test\folder1\folder2\file8.txt 4 3 barry b:\wc2\test\folder3 Info: PYSVN CMD status --show-updates b:\wc2 M b:\wc2\test D b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt M b:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry b:\wc2 M 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt D 4 3 barry b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt 9 9 barry b:\wc2\test\file3b.txt M 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt 4 3 barry b:\wc2\test\folder1 4 3 barry b:\wc2\test\folder1\file7.txt 4 3 barry b:\wc2\test\folder1\folder2 4 3 barry b:\wc2\test\folder1\folder2\file8.txt 4 3 barry b:\wc2\test\folder3 Info: PYSVN CMD update A file1b.txt A file2b.txt A file3b.txt D file2.txt D file3.txt Updated to revision 10 Info: PYSVN CMD status --show-updates b:\wc2 M b:\wc2\test D b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt M b:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry b:\wc2 M 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt D 4 3 barry b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt 9 9 barry b:\wc2\test\file3b.txt M 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt 4 3 barry b:\wc2\test\folder1 4 3 barry b:\wc2\test\folder1\file7.txt 4 3 barry b:\wc2\test\folder1\folder2 4 3 barry b:\wc2\test\folder1\folder2\file8.txt 4 3 barry b:\wc2\test\folder3 Info: PYSVN CMD checkin b:\wc2 -m "prop change" Nothing to commit Info: Test - propdel Info: CMD cd /d b:\wc2\test Info: PYSVN CMD propset test:prop1 del_me file4.txt property_added file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: PYSVN CMD propdel test:prop1 file4.txt property_deleted file4.txt Info: PYSVN CMD proplist -v file4.txt Info: Test - propget Info: PYSVN CMD propget svn:eol-style file4.txt Info: Test - proplist - see above Info: Test - propset Info: CMD cd /d b:\wc2\test Info: PYSVN CMD proplist -v file4.txt Info: PYSVN CMD propset svn:eol-style native file4.txt property_added file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Test - remove Info: CMD cd /d b:\wc2\test Info: PYSVN CMD remove file5.txt D file5.txt Info: PYSVN CMD status M file4.txt D file5.txt Info: Test - resolved Info: Append File b:\wc1\test\file4.txt - conflict in file4 yes Info: Append File b:\wc2\test\file4.txt - conflict in file4 no Info: PYSVN CMD checkin b:\wc1\test -m "make a conflict part 1" M B:/wc1/test/file4.txt Revision 11 Info: PYSVN CMD update b:\wc2\test callback_conflict_resolver action: base_file: b:\wc2\test\.svn\text-base\file4.txt.svn-base is_binary: False kind: merged_file: b:\wc2\test\.svn\tmp\file4.txt.tmp mime_type: None my_file: b:\wc2\test\.svn\tmp\svn-D6E25BC5 node_kind: operation: path: b:/wc2/test/file4.txt property_name: None reason: src_left_version: None src_right_version: None their_file: b:\wc2\test\.svn\tmp\text-base\file4.txt.svn-base A b:/wc2/test/file2b.txt D b:/wc2/test/file2.txt U b:/wc2 U b:/wc2/test U b:/wc2/test/file4.txt Updated to revision 11 Info: PYSVN CMD status CM file4.txt ? file4.txt.mine ? file4.txt.r11 ? file4.txt.r4 D file5.txt Info: CMD copy b:\wc2\test\file4.txt.mine b:\wc2\test\file4.txt 1 file(s) copied. Info: PYSVN CMD resolved b:\wc2\test\file4.txt R b:/wc2/test/file4.txt Info: PYSVN CMD checkin b:\wc2\test\file4.txt -m "resolve a confict part 2" M B:/wc2/test/file4.txt Revision 12 Info: Test - revert Info: PYSVN CMD revert file5.txt R file5.txt Info: PYSVN CMD status Info: Test - revproplist Info: PYSVN CMD revproplist file:///b:/repos/trunk Revision: 12 svn:author: barry svn:date: 2012-11-19T19:40:33.529202Z svn:log: resolve a confict part 2 Info: Test - revpropget Info: PYSVN CMD revpropget svn:log file:///b:/repos/trunk Revision: 12 svn:log: resolve a confict part 2 Info: PYSVN CMD revpropget no_such_prop file:///b:/repos/trunk Revision: 12 no_such_prop: None Info: Test - revpropset Info: PYSVN CMD revpropset svn:log "Hello world" file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - revpropdel Info: PYSVN CMD revpropdel svn:log file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - status - see above Info: Test - relocate Info: CMD mkdir b:\root Info: CMD move b:\repos b:\root 1 dir(s) moved. Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///B:/repos/trunk Repository UUID: 9eb97a17-a9fb-4948-9ff9-1a389399bc26 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 19-Nov-2012 19:40:28 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc1 Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 9eb97a17-a9fb-4948-9ff9-1a389399bc26 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 19-Nov-2012 19:40:28 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/repos/trunk Repository UUID: 9eb97a17-a9fb-4948-9ff9-1a389399bc26 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 19-Nov-2012 19:40:29 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc2 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 9eb97a17-a9fb-4948-9ff9-1a389399bc26 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 19-Nov-2012 19:40:29 Info: Test - switch Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 9eb97a17-a9fb-4948-9ff9-1a389399bc26 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 19-Nov-2012 19:40:29 Info: PYSVN CMD switch b:\wc2 file:///b:/root/repos/tags/version1 A b:/wc2/test/file2.txt A b:/wc2/test/file3.txt D b:/wc2/test/file1b.txt D b:/wc2/test/file2b.txt D b:/wc2/test/file3b.txt U b:/wc2 U b:/wc2/test U b:/wc2/test/file4.txt Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/tags/version1 Repository UUID: 9eb97a17-a9fb-4948-9ff9-1a389399bc26 Revision: 12 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 19-Nov-2012 19:40:29 Info: Test - update - see above Info: Test - Info: Testing - merge Info: PYSVN CMD checkout file:///b:/root/repos/trunk b:\wc3 A b:/wc3/test A b:/wc3/test/file1.txt A b:/wc3/test/file1b.txt A b:/wc3/test/file2b.txt A b:/wc3/test/file3b.txt A b:/wc3/test/file4.txt A b:/wc3/test/file5.txt A b:/wc3/test/folder1 A b:/wc3/test/folder1/file7.txt A b:/wc3/test/folder1/folder2 A b:/wc3/test/folder1/folder2/file8.txt A b:/wc3/test/folder3 U b:/wc3 Checked out revision 12 Info: CMD cd b:\wc3\test Info: Create File file-merge-1.txt - test add file merge 1 Info: Create File file-merge-2.txt - test add file merge 2 Info: PYSVN CMD add file-merge-1.txt A file-merge-1.txt Info: PYSVN CMD add file-merge-2.txt A file-merge-2.txt Info: PYSVN CMD commit -m "add test merge files" . A b:/wc3/test/file-merge-1.txt A b:/wc3/test/file-merge-2.txt Revision 13 Info: Create File msg.tmp - make a branch Info: PYSVN CMD copy file:///b:/root/repos/trunk/test file:///b:/root/repos/trunk/test-branch Log message --- ------- Info: PYSVN CMD update b:\wc3 A b:/wc3/test-branch A b:/wc3/test-branch/file-merge-1.txt A b:/wc3/test-branch/file-merge-2.txt A b:/wc3/test-branch/file1.txt A b:/wc3/test-branch/file1b.txt A b:/wc3/test-branch/file2b.txt A b:/wc3/test-branch/file3b.txt A b:/wc3/test-branch/file4.txt A b:/wc3/test-branch/file5.txt A b:/wc3/test-branch/folder1 A b:/wc3/test-branch/folder1/file7.txt A b:/wc3/test-branch/folder1/folder2 A b:/wc3/test-branch/folder1/folder2/file8.txt A b:/wc3/test-branch/folder3 U b:/wc3 U b:/wc3/test Updated to revision 14 Info: Create File file-merge-3.txt - test add file merge 3 Info: PYSVN CMD add file-merge-3.txt A file-merge-3.txt Info: PYSVN CMD rm file-merge-1.txt D file-merge-1.txt Info: Append File file-merge-2.txt - modify merge 2 Info: PYSVN CMD commit -m "change test merge files" . A b:/wc3/test/file-merge-3.txt D b:/wc3/test/file-merge-1.txt M b:/wc3/test/file-merge-2.txt Revision 15 Info: PYSVN CMD merge --dry-run --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch A b:/wc3/test-branch/file-merge-3.txt D b:/wc3/test-branch/file-merge-1.txt U b:/wc3/test-branch U b:/wc3/test-branch/file-merge-2.txt merge_begin b:/wc3/test-branch merge_begin b:/wc3/test-branch/file-merge-2.txt merge_completed b:/wc3/test-branch Info: PYSVN CMD merge --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch merge_completed b:/wc3/test-branch Info: PYSVN CMD status b:\wc3\test-branch M b:\wc3\test-branch D b:\wc3\test-branch\file-merge-1.txt MM b:\wc3\test-branch\file-merge-2.txt A + b:\wc3\test-branch\file-merge-3.txt M b:\wc3\test-branch\file1.txt M b:\wc3\test-branch\file1b.txt M b:\wc3\test-branch\file2b.txt M b:\wc3\test-branch\file3b.txt M b:\wc3\test-branch\file4.txt M b:\wc3\test-branch\file5.txt Info: PYSVN CMD diff b:\wc3\test-branch Property changes on: b:\wc3\test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r15* Property changes on: b:\wc3\test-branch\file1b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1b.txt:r15 Property changes on: b:\wc3\test-branch\file2b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file2b.txt:r15 Property changes on: b:\wc3\test-branch\file4.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file4.txt:r15 Property changes on: b:\wc3\test-branch\file3b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file3b.txt:r15 Property changes on: b:\wc3\test-branch\file5.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file5.txt:r15 Index: b:/wc3/test-branch/file-merge-1.txt =================================================================== --- b:/wc3/test-branch/file-merge-1.txt (revision 14) +++ b:/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: b:/wc3/test-branch/file-merge-2.txt =================================================================== --- b:/wc3/test-branch/file-merge-2.txt (revision 14) +++ b:/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Property changes on: b:\wc3\test-branch\file-merge-2.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-2.txt:r15 Property changes on: b:\wc3\test-branch\file-merge-3.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-3.txt:r15 Property changes on: b:\wc3\test-branch\file1.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1.txt:r15 Info: CMD c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_01_set_get_tests.py b:\configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Test - end pysvn-1.7.8/Tests/test-01.win32.known_good-py2-svn1.7.log000644 000771 000771 00000064263 12164357546 023112 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python27.win32\python.exe Username: barry Info: PYSVN CMD c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.01.00 --config-dir b:\configdir Info: CMD mkdir testroot-01 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-01 Info: CMD cd /d b:\ Info: CMD svnadmin create b:\repos Info: Test - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-01 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-01 add test" Info: Test - ls Info: PYSVN CMD ls file:///b:/repos -v -R 2 barry 0 01-Jul-2013 20:42:16 file:///B:/repos/trunk 2 barry 0 01-Jul-2013 20:42:16 file:///B:/repos/trunk/test Info: Test - checkout Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD dir b:\wc1 /s /b /a-h b:\wc1\test b:\wc1\.svn\entries b:\wc1\.svn\format b:\wc1\.svn\pristine b:\wc1\.svn\tmp b:\wc1\.svn\wc.db Info: CMD cd /d b:\wc1\test Info: Test - add Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: Create File file3.txt - test add file 3 Info: Create File file4.txt - test add file 4 Info: Create File file5.txt - test add file 5 Info: CMD mkdir folder1 Info: Create File folder1\file7.txt - test add file 7 Info: CMD mkdir folder1\folder2 Info: Create File folder1\folder2\file8.txt - test add file 8 Info: CMD mkdir folder3 Info: Create File folder3\file9.txt - test add file 9 Info: CMD mkdir folder3\folder4 Info: Create File folder3\folder4\file10.txt - test add file 10 Info: PYSVN CMD add file1.txt A B:/wc1/test/file1.txt Info: PYSVN CMD add file2.txt A B:/wc1/test/file2.txt Info: PYSVN CMD add file3.txt A B:/wc1/test/file3.txt Info: PYSVN CMD add file4.txt A B:/wc1/test/file4.txt Info: PYSVN CMD add --force file5.txt A B:/wc1/test/file5.txt Info: PYSVN CMD add folder1 A B:/wc1/test/folder1 A B:/wc1/test/folder1/file7.txt A B:/wc1/test/folder1/folder2 A B:/wc1/test/folder1/folder2/file8.txt Info: PYSVN CMD add --non-recursive folder3 A B:/wc1/test/folder3 Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file1.txt A B:/wc1/test/file2.txt A B:/wc1/test/file3.txt A B:/wc1/test/file4.txt A B:/wc1/test/file5.txt A B:/wc1/test/folder1 A B:/wc1/test/folder1/file7.txt A B:/wc1/test/folder1/folder2 A B:/wc1/test/folder1/folder2/file8.txt A B:/wc1/test/folder3 Revision 3 Info: Test - update - get a new wc that will update Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A B:/wc2/test A B:/wc2/test/file1.txt A B:/wc2/test/file2.txt A B:/wc2/test/file3.txt A B:/wc2/test/file4.txt A B:/wc2/test/file5.txt A B:/wc2/test/folder1 A B:/wc2/test/folder1/file7.txt A B:/wc2/test/folder1/folder2 A B:/wc2/test/folder1/folder2/file8.txt A B:/wc2/test/folder3 U B:/wc2 update_started B:/wc2 Checked out revision 3 Info: Test - - checkin a mod from wc1 Info: Append File b:\wc1\test\file1.txt - line 2 Info: PYSVN CMD checkin -m "commit modified file" M B:/wc1/test/file1.txt Revision 4 Info: PYSVN CMD checkin -m "commit modified file" Nothing to commit Info: Test - update Info: PYSVN CMD update b:\wc2 U B:/wc2 U B:/wc2/test U B:/wc2/test/file1.txt update_started B:/wc2 Updated to revision 4 Info: Test - the rest in lexical order Info: Test - annotate Info: PYSVN CMD annotate b:\wc2\test\file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2013-07-01T19:42:17.538382Z | test add file 1 1| r4 | barry | 2013-07-01T19:42:17.990544Z | line 2 Info: Test - cat Info: PYSVN CMD cat -r head file:///b:/repos/trunk/test/file1.txt test add file 1 line 2 Info: Test - cleanup Info: Test - copy Info: PYSVN CMD mkdir file:///b:/repos/tags -m "test-01 add tags" Info: Create File msg.tmp - tag the trunk Info: PYSVN CMD copy file:///b:/repos/trunk file:///b:/repos/tags/version1 Log message --- ------- Info: PYSVN CMD ls -v file:///b:/repos/tags 6 barry 0 01-Jul-2013 20:42:18 file:///B:/repos/tags/version1 Info: PYSVN CMD copy b:\wc2\test\file1.txt b:\wc2\test\file1b.txt A B:/wc2/test/file1b.txt Info: PYSVN CMD propset svn:eol-style native b:\wc2\test\file1b.txt property_added B:/wc2/test/file1b.txt Info: PYSVN CMD checkin b:\wc2 -m "copy test" A B:/wc2/test/file1b.txt Revision 7 Info: Test - diff Info: Append File b:\wc2\test\file1b.txt - new line Info: PYSVN CMD diff b:\wc2 Index: B:/wc2/test/file1b.txt =================================================================== --- B:/wc2/test/file1b.txt (revision 7) +++ B:/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Test - export Info: PYSVN CMD export file:///b:/repos/trunk/test b:\export1.native A b:\export1.native A b:\export1.native/file1.txt A b:\export1.native/file1b.txt A b:\export1.native/file2.txt A b:\export1.native/file3.txt A b:\export1.native/file4.txt A b:\export1.native/file5.txt A b:\export1.native/folder1 A b:\export1.native/folder1/file7.txt A b:\export1.native/folder1/folder2 A b:\export1.native/folder1/folder2/file8.txt A b:\export1.native/folder3 Info: PYSVN CMD export --native-eol CR file:///b:/repos/trunk/test b:\export1.cr A b:\export1.cr A b:\export1.cr/file1.txt A b:\export1.cr/file1b.txt A b:\export1.cr/file2.txt A b:\export1.cr/file3.txt A b:\export1.cr/file4.txt A b:\export1.cr/file5.txt A b:\export1.cr/folder1 A b:\export1.cr/folder1/file7.txt A b:\export1.cr/folder1/folder2 A b:\export1.cr/folder1/folder2/file8.txt A b:\export1.cr/folder3 Info: PYSVN CMD export --native-eol LF file:///b:/repos/trunk/test b:\export1.lf A b:\export1.lf A b:\export1.lf/file1.txt A b:\export1.lf/file1b.txt A b:\export1.lf/file2.txt A b:\export1.lf/file3.txt A b:\export1.lf/file4.txt A b:\export1.lf/file5.txt A b:\export1.lf/folder1 A b:\export1.lf/folder1/file7.txt A b:\export1.lf/folder1/folder2 A b:\export1.lf/folder1/folder2/file8.txt A b:\export1.lf/folder3 Info: PYSVN CMD export --native-eol CRLF file:///b:/repos/trunk/test b:\export1.crlf A b:\export1.crlf A b:\export1.crlf/file1.txt A b:\export1.crlf/file1b.txt A b:\export1.crlf/file2.txt A b:\export1.crlf/file3.txt A b:\export1.crlf/file4.txt A b:\export1.crlf/file5.txt A b:\export1.crlf/folder1 A b:\export1.crlf/folder1/file7.txt A b:\export1.crlf/folder1/folder2 A b:\export1.crlf/folder1/folder2/file8.txt A b:\export1.crlf/folder3 Info: CMD dir /s /b b:\export1.native b:\export1.native\file1.txt b:\export1.native\file1b.txt b:\export1.native\file2.txt b:\export1.native\file3.txt b:\export1.native\file4.txt b:\export1.native\file5.txt b:\export1.native\folder1 b:\export1.native\folder3 b:\export1.native\folder1\file7.txt b:\export1.native\folder1\folder2 b:\export1.native\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.cr b:\export1.cr\file1.txt b:\export1.cr\file1b.txt b:\export1.cr\file2.txt b:\export1.cr\file3.txt b:\export1.cr\file4.txt b:\export1.cr\file5.txt b:\export1.cr\folder1 b:\export1.cr\folder3 b:\export1.cr\folder1\file7.txt b:\export1.cr\folder1\folder2 b:\export1.cr\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.lf b:\export1.lf\file1.txt b:\export1.lf\file1b.txt b:\export1.lf\file2.txt b:\export1.lf\file3.txt b:\export1.lf\file4.txt b:\export1.lf\file5.txt b:\export1.lf\folder1 b:\export1.lf\folder3 b:\export1.lf\folder1\file7.txt b:\export1.lf\folder1\folder2 b:\export1.lf\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.crlf b:\export1.crlf\file1.txt b:\export1.crlf\file1b.txt b:\export1.crlf\file2.txt b:\export1.crlf\file3.txt b:\export1.crlf\file4.txt b:\export1.crlf\file5.txt b:\export1.crlf\folder1 b:\export1.crlf\folder3 b:\export1.crlf\folder1\file7.txt b:\export1.crlf\folder1\folder2 b:\export1.crlf\folder1\folder2\file8.txt Info: Test - import Info: Test - info Info: PYSVN CMD info b:\wc2\test Path: b:\wc2\test Name: . Url: file:///B:/repos/trunk/test Repository UUID: 875316d8-f5b2-3e4b-a71b-9ac7f05a849a Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 01-Jul-2013 20:42:17 Info: PYSVN CMD info b:\wc2\test\file1.txt Path: b:\wc2\test\file1.txt Name: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Repository UUID: 875316d8-f5b2-3e4b-a71b-9ac7f05a849a Revision: 4 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 01-Jul-2013 20:42:17 Text Last Updated: 01-Jul-2013 20:42:18 Checksum: cb0b37e264ebcc467e9f37a069e034d7 Info: Test - log Info: PYSVN CMD log b:\wc2 ------------------------------------------------------------ rev 7: barry | 01-Jul-2013 20:42:18 | 1 lines copy test ------------------------------------------------------------ rev 4: barry | 01-Jul-2013 20:42:17 | 1 lines commit modified file ------------------------------------------------------------ rev 3: barry | 01-Jul-2013 20:42:17 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 01-Jul-2013 20:42:16 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 01-Jul-2013 20:42:16 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Test - ls Info: PYSVN CMD ls file:///b:/repos/trunk/test file:///B:/repos/trunk/test/file1.txt file:///B:/repos/trunk/test/file1b.txt file:///B:/repos/trunk/test/file2.txt file:///B:/repos/trunk/test/file3.txt file:///B:/repos/trunk/test/file4.txt file:///B:/repos/trunk/test/file5.txt file:///B:/repos/trunk/test/folder1 file:///B:/repos/trunk/test/folder3 Info: PYSVN CMD ls -v file:///b:/repos/trunk/test 4 barry 25 01-Jul-2013 20:42:17 file:///B:/repos/trunk/test/file1.txt 7 barry 23 01-Jul-2013 20:42:18 file:///B:/repos/trunk/test/file1b.txt 3 barry 17 01-Jul-2013 20:42:17 file:///B:/repos/trunk/test/file2.txt 3 barry 17 01-Jul-2013 20:42:17 file:///B:/repos/trunk/test/file3.txt 3 barry 17 01-Jul-2013 20:42:17 file:///B:/repos/trunk/test/file4.txt 3 barry 17 01-Jul-2013 20:42:17 file:///B:/repos/trunk/test/file5.txt 3 barry 0 01-Jul-2013 20:42:17 file:///B:/repos/trunk/test/folder1 3 barry 0 01-Jul-2013 20:42:17 file:///B:/repos/trunk/test/folder3 Info: PYSVN CMD ls b:\wc2\test B:/wc2/test/file1.txt B:/wc2/test/file1b.txt B:/wc2/test/file2.txt B:/wc2/test/file3.txt B:/wc2/test/file4.txt B:/wc2/test/file5.txt B:/wc2/test/folder1 B:/wc2/test/folder3 Info: PYSVN CMD ls -v b:\wc2\test 4 barry 25 01-Jul-2013 20:42:17 B:/wc2/test/file1.txt 7 barry 23 01-Jul-2013 20:42:18 B:/wc2/test/file1b.txt 3 barry 17 01-Jul-2013 20:42:17 B:/wc2/test/file2.txt 3 barry 17 01-Jul-2013 20:42:17 B:/wc2/test/file3.txt 3 barry 17 01-Jul-2013 20:42:17 B:/wc2/test/file4.txt 3 barry 17 01-Jul-2013 20:42:17 B:/wc2/test/file5.txt 3 barry 0 01-Jul-2013 20:42:17 B:/wc2/test/folder1 3 barry 0 01-Jul-2013 20:42:17 B:/wc2/test/folder3 Info: Test - merge - see below Info: Test - mkdir - done above Info: Test - move Info: Create File msg.tmp - move url test Info: PYSVN CMD move file:///b:/repos/trunk/test/file2.txt file:///b:/repos/trunk/test/file2b.txt Log message --- ------- Info: PYSVN CMD move b:\wc2\test\file3.txt b:\wc2\test\file3b.txt A B:/wc2/test/file3b.txt D B:/wc2/test/file3.txt Info: PYSVN CMD checkin b:\wc2 -m "move wc test" A B:/wc2/test/file3b.txt D B:/wc2/test/file3.txt M B:/wc2/test/file1b.txt Revision 9 Info: Test - status Info: Append File b:\wc1\test\file4.txt - file 4 is changing Info: PYSVN CMD checkin b:\wc1 -m "change wc1 for status -u to detect" M B:/wc1/test/file4.txt Revision 10 Info: PYSVN CMD status b:\wc2 Info: PYSVN CMD status --verbose b:\wc2 4 4 barry B:\wc2 4 4 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 9 9 barry B:\wc2\test\file1b.txt 4 3 barry B:\wc2\test\file2.txt 9 9 barry B:\wc2\test\file3b.txt 4 3 barry B:\wc2\test\file4.txt 4 3 barry B:\wc2\test\file5.txt 4 3 barry B:\wc2\test\folder1 4 3 barry B:\wc2\test\folder1\file7.txt 4 3 barry B:\wc2\test\folder1\folder2 4 3 barry B:\wc2\test\folder1\folder2\file8.txt 4 3 barry B:\wc2\test\folder3 Info: PYSVN CMD status --show-updates b:\wc2 M B:\wc2\test D B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt M B:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry B:\wc2 M 4 4 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 9 9 barry B:\wc2\test\file1b.txt D 4 3 barry B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt 9 9 barry B:\wc2\test\file3b.txt M 4 3 barry B:\wc2\test\file4.txt 4 3 barry B:\wc2\test\file5.txt 4 3 barry B:\wc2\test\folder1 4 3 barry B:\wc2\test\folder1\file7.txt 4 3 barry B:\wc2\test\folder1\folder2 4 3 barry B:\wc2\test\folder1\folder2\file8.txt 4 3 barry B:\wc2\test\folder3 Info: PYSVN CMD update A B:/wc1/test/file1b.txt A B:/wc1/test/file2b.txt A B:/wc1/test/file3b.txt D B:/wc1/test/file2.txt D B:/wc1/test/file3.txt U B:/wc1 U B:/wc1/test update_started B:/wc1/test Updated to revision 10 Info: PYSVN CMD status --show-updates b:\wc2 M B:\wc2\test D B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt M B:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry B:\wc2 M 4 4 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 9 9 barry B:\wc2\test\file1b.txt D 4 3 barry B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt 9 9 barry B:\wc2\test\file3b.txt M 4 3 barry B:\wc2\test\file4.txt 4 3 barry B:\wc2\test\file5.txt 4 3 barry B:\wc2\test\folder1 4 3 barry B:\wc2\test\folder1\file7.txt 4 3 barry B:\wc2\test\folder1\folder2 4 3 barry B:\wc2\test\folder1\folder2\file8.txt 4 3 barry B:\wc2\test\folder3 Info: PYSVN CMD checkin b:\wc2 -m "prop change" Nothing to commit Info: Test - propdel Info: CMD cd /d b:\wc2\test Info: PYSVN CMD propset test:prop1 del_me file4.txt property_added B:/wc2/test/file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: PYSVN CMD propdel test:prop1 file4.txt property_deleted B:/wc2/test/file4.txt Info: PYSVN CMD proplist -v file4.txt Info: Test - propget Info: PYSVN CMD propget svn:eol-style file4.txt Info: Test - proplist - see above Info: Test - propset Info: CMD cd /d b:\wc2\test Info: PYSVN CMD proplist -v file4.txt Info: PYSVN CMD propset svn:eol-style native file4.txt property_added B:/wc2/test/file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Test - remove Info: CMD cd /d b:\wc2\test Info: PYSVN CMD remove file5.txt D B:/wc2/test/file5.txt Info: PYSVN CMD status MM file4.txt D file5.txt Info: Test - resolved Info: Append File b:\wc1\test\file4.txt - conflict in file4 yes Info: Append File b:\wc2\test\file4.txt - conflict in file4 no Info: PYSVN CMD checkin b:\wc1\test -m "make a conflict part 1" M B:/wc1/test/file4.txt Revision 11 Info: PYSVN CMD update b:\wc2\test callback_conflict_resolver action: base_file: B:\wc2\.svn\pristine\4e\4e86be31cda02c6a3fb50fe49d570555a9c28d66.svn-base is_binary: False kind: merged_file: B:\wc2\.svn\tmp\file4.txt.tmp mime_type: None my_file: B:\wc2\.svn\tmp\svn-BDA3CF31 node_kind: operation: path: B:/wc2/test/file4.txt property_name: None reason: src_left_version: None src_right_version: None their_file: B:\wc2\.svn\pristine\68\68429c38aebed8d3491b3f4a50041ad273e78cf7.svn-base A B:/wc2/test/file2b.txt D B:/wc2/test/file2.txt U B:/wc2 U B:/wc2/test U B:/wc2/test/file4.txt update_started B:/wc2/test Updated to revision 11 Info: PYSVN CMD status CM file4.txt ? file4.txt.mine ? file4.txt.r11 ? file4.txt.r4 D file5.txt Info: CMD copy b:\wc2\test\file4.txt.mine b:\wc2\test\file4.txt 1 file(s) copied. Info: PYSVN CMD resolved b:\wc2\test\file4.txt R B:/wc2/test/file4.txt Info: PYSVN CMD checkin b:\wc2\test\file4.txt -m "resolve a confict part 2" M B:/wc2/test/file4.txt Revision 12 Info: Test - revert Info: PYSVN CMD revert file5.txt R B:/wc2/test/file5.txt Info: PYSVN CMD status Info: Test - revproplist Info: PYSVN CMD revproplist file:///b:/repos/trunk Revision: 12 svn:author: barry svn:date: 2013-07-01T19:42:22.247106Z svn:log: resolve a confict part 2 Info: Test - revpropget Info: PYSVN CMD revpropget svn:log file:///b:/repos/trunk Revision: 12 svn:log: resolve a confict part 2 Info: PYSVN CMD revpropget no_such_prop file:///b:/repos/trunk Revision: 12 no_such_prop: None Info: Test - revpropset Info: PYSVN CMD revpropset svn:log "Hello world" file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - revpropdel Info: PYSVN CMD revpropdel svn:log file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - status - see above Info: Test - relocate Info: CMD mkdir b:\root Info: CMD move b:\repos b:\root 1 dir(s) moved. Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///B:/repos/trunk Repository UUID: 875316d8-f5b2-3e4b-a71b-9ac7f05a849a Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 01-Jul-2013 20:42:16 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc1 Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 875316d8-f5b2-3e4b-a71b-9ac7f05a849a Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 01-Jul-2013 20:42:16 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/repos/trunk Repository UUID: 875316d8-f5b2-3e4b-a71b-9ac7f05a849a Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 01-Jul-2013 20:42:17 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc2 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 875316d8-f5b2-3e4b-a71b-9ac7f05a849a Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 01-Jul-2013 20:42:17 Info: Test - switch Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 875316d8-f5b2-3e4b-a71b-9ac7f05a849a Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 01-Jul-2013 20:42:17 Info: PYSVN CMD switch b:\wc2 file:///b:/root/repos/tags/version1 A B:/wc2/test/file2.txt A B:/wc2/test/file3.txt D B:/wc2/test/file1b.txt D B:/wc2/test/file2b.txt D B:/wc2/test/file3b.txt U B:/wc2 U B:/wc2/test U B:/wc2/test/file4.txt Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/tags/version1 Repository UUID: 875316d8-f5b2-3e4b-a71b-9ac7f05a849a Revision: 12 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 01-Jul-2013 20:42:18 Info: Test - update - see above Info: Test - Info: Testing - merge Info: PYSVN CMD checkout file:///b:/root/repos/trunk b:\wc3 A B:/wc3/test A B:/wc3/test/file1.txt A B:/wc3/test/file1b.txt A B:/wc3/test/file2b.txt A B:/wc3/test/file3b.txt A B:/wc3/test/file4.txt A B:/wc3/test/file5.txt A B:/wc3/test/folder1 A B:/wc3/test/folder1/file7.txt A B:/wc3/test/folder1/folder2 A B:/wc3/test/folder1/folder2/file8.txt A B:/wc3/test/folder3 U B:/wc3 update_started B:/wc3 Checked out revision 12 Info: CMD cd b:\wc3\test Info: Create File file-merge-1.txt - test add file merge 1 Info: Create File file-merge-2.txt - test add file merge 2 Info: PYSVN CMD add file-merge-1.txt A B:/wc3/test/file-merge-1.txt Info: PYSVN CMD add file-merge-2.txt A B:/wc3/test/file-merge-2.txt Info: PYSVN CMD commit -m "add test merge files" . A B:/wc3/test/file-merge-1.txt A B:/wc3/test/file-merge-2.txt Revision 13 Info: Create File msg.tmp - make a branch Info: PYSVN CMD copy file:///b:/root/repos/trunk/test file:///b:/root/repos/trunk/test-branch Log message --- ------- Info: PYSVN CMD update b:\wc3 A B:/wc3/test-branch A B:/wc3/test-branch/file-merge-1.txt A B:/wc3/test-branch/file-merge-2.txt A B:/wc3/test-branch/file1.txt A B:/wc3/test-branch/file1b.txt A B:/wc3/test-branch/file2b.txt A B:/wc3/test-branch/file3b.txt A B:/wc3/test-branch/file4.txt A B:/wc3/test-branch/file5.txt A B:/wc3/test-branch/folder1 A B:/wc3/test-branch/folder1/file7.txt A B:/wc3/test-branch/folder1/folder2 A B:/wc3/test-branch/folder1/folder2/file8.txt A B:/wc3/test-branch/folder3 U B:/wc3 update_started B:/wc3 Updated to revision 14 Info: Create File file-merge-3.txt - test add file merge 3 Info: PYSVN CMD add file-merge-3.txt A B:/wc3/test/file-merge-3.txt Info: PYSVN CMD rm file-merge-1.txt D B:/wc3/test/file-merge-1.txt Info: Append File file-merge-2.txt - modify merge 2 Info: PYSVN CMD commit -m "change test merge files" . A B:/wc3/test/file-merge-3.txt D B:/wc3/test/file-merge-1.txt M B:/wc3/test/file-merge-2.txt Revision 15 Info: PYSVN CMD merge --dry-run --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch A B:/wc3/test-branch/file-merge-3.txt D B:/wc3/test-branch/file-merge-1.txt U B:/wc3/test-branch U B:/wc3/test-branch/file-merge-2.txt merge_begin B:/wc3/test-branch merge_begin B:/wc3/test-branch/file-merge-2.txt merge_completed B:/wc3/test-branch merge_record_info B:/wc3/test-branch merge_record_info B:/wc3/test-branch/file-merge-2.txt merge_record_info B:/wc3/test-branch/file-merge-3.txt merge_record_info_begin B:/wc3/test-branch merge_record_info_begin B:/wc3/test-branch/file-merge-2.txt Info: PYSVN CMD merge --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch U B:/wc3/test-branch merge_completed B:/wc3/test-branch Info: PYSVN CMD status b:\wc3\test-branch M B:\wc3\test-branch D B:\wc3\test-branch\file-merge-1.txt MM B:\wc3\test-branch\file-merge-2.txt A + B:\wc3\test-branch\file-merge-3.txt Info: PYSVN CMD diff b:\wc3\test-branch Index: B:/wc3/test-branch =================================================================== --- B:/wc3/test-branch (revision 14) +++ B:/wc3/test-branch (working copy) Property changes on: B:/wc3/test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r15* Index: B:/wc3/test-branch/file-merge-1.txt =================================================================== --- B:/wc3/test-branch/file-merge-1.txt (revision 14) +++ B:/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: B:/wc3/test-branch/file-merge-2.txt =================================================================== --- B:/wc3/test-branch/file-merge-2.txt (revision 14) +++ B:/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Property changes on: B:/wc3/test-branch/file-merge-2.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-2.txt:r15 Index: B:/wc3/test-branch/file-merge-3.txt =================================================================== --- B:/wc3/test-branch/file-merge-3.txt (revision 14) +++ B:/wc3/test-branch/file-merge-3.txt (working copy) Property changes on: B:/wc3/test-branch/file-merge-3.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-3.txt:r15 Info: CMD c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_01_set_get_tests.py b:\configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Test - end pysvn-1.7.8/Tests/test-01.win32.known_good-py2-svn1.8.log000644 000771 000771 00000063564 12177514654 023115 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python27.win32\python.exe Username: barry Info: PYSVN CMD c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.01.00 --config-dir b:\configdir Info: CMD mkdir testroot-01 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-01 Info: CMD cd /d b:\ Info: CMD svnadmin create b:\repos Info: Test - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-01 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-01 add test" Info: Test - ls Info: PYSVN CMD ls file:///b:/repos -v -R 2 barry 0 04-Aug-2013 19:12:11 file:///B:/repos/trunk 2 barry 0 04-Aug-2013 19:12:11 file:///B:/repos/trunk/test Info: Test - checkout Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD dir b:\wc1 /s /b /a-h b:\wc1\test b:\wc1\.svn\entries b:\wc1\.svn\format b:\wc1\.svn\pristine b:\wc1\.svn\tmp b:\wc1\.svn\wc.db Info: CMD cd /d b:\wc1\test Info: Test - add Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: Create File file3.txt - test add file 3 Info: Create File file4.txt - test add file 4 Info: Create File file5.txt - test add file 5 Info: CMD mkdir folder1 Info: Create File folder1\file7.txt - test add file 7 Info: CMD mkdir folder1\folder2 Info: Create File folder1\folder2\file8.txt - test add file 8 Info: CMD mkdir folder3 Info: Create File folder3\file9.txt - test add file 9 Info: CMD mkdir folder3\folder4 Info: Create File folder3\folder4\file10.txt - test add file 10 Info: PYSVN CMD add file1.txt A B:/wc1/test/file1.txt Info: PYSVN CMD add file2.txt A B:/wc1/test/file2.txt Info: PYSVN CMD add file3.txt A B:/wc1/test/file3.txt Info: PYSVN CMD add file4.txt A B:/wc1/test/file4.txt Info: PYSVN CMD add --force file5.txt A B:/wc1/test/file5.txt Info: PYSVN CMD add folder1 A B:/wc1/test/folder1 A B:/wc1/test/folder1/file7.txt A B:/wc1/test/folder1/folder2 A B:/wc1/test/folder1/folder2/file8.txt Info: PYSVN CMD add --non-recursive folder3 A B:/wc1/test/folder3 Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file1.txt A B:/wc1/test/file2.txt A B:/wc1/test/file3.txt A B:/wc1/test/file4.txt A B:/wc1/test/file5.txt A B:/wc1/test/folder1 A B:/wc1/test/folder1/file7.txt A B:/wc1/test/folder1/folder2 A B:/wc1/test/folder1/folder2/file8.txt A B:/wc1/test/folder3 Revision 3 Info: Test - update - get a new wc that will update Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A B:/wc2/test A B:/wc2/test/file1.txt A B:/wc2/test/file2.txt A B:/wc2/test/file3.txt A B:/wc2/test/file4.txt A B:/wc2/test/file5.txt A B:/wc2/test/folder1 A B:/wc2/test/folder1/file7.txt A B:/wc2/test/folder1/folder2 A B:/wc2/test/folder1/folder2/file8.txt A B:/wc2/test/folder3 U B:/wc2 update_started B:/wc2 Checked out revision 3 Info: Test - - checkin a mod from wc1 Info: Append File b:\wc1\test\file1.txt - line 2 Info: PYSVN CMD checkin -m "commit modified file" M B:/wc1/test/file1.txt Revision 4 Info: PYSVN CMD checkin -m "commit modified file" Nothing to commit Info: Test - update Info: PYSVN CMD update b:\wc2 U B:/wc2 U B:/wc2/test U B:/wc2/test/file1.txt update_started B:/wc2 Updated to revision 4 Info: Test - the rest in lexical order Info: Test - annotate Info: PYSVN CMD annotate b:\wc2\test\file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2013-08-04T18:12:12.491246Z | test add file 1 1| r4 | barry | 2013-08-04T18:12:12.912230Z | line 2 Info: Test - cat Info: PYSVN CMD cat -r head file:///b:/repos/trunk/test/file1.txt test add file 1 line 2 Info: Test - cleanup Info: Test - copy Info: PYSVN CMD mkdir file:///b:/repos/tags -m "test-01 add tags" Info: Create File msg.tmp - tag the trunk Info: PYSVN CMD copy file:///b:/repos/trunk file:///b:/repos/tags/version1 Log message --- ------- Info: PYSVN CMD ls -v file:///b:/repos/tags 6 barry 0 04-Aug-2013 19:12:13 file:///B:/repos/tags/version1 Info: PYSVN CMD copy b:\wc2\test\file1.txt b:\wc2\test\file1b.txt A B:/wc2/test/file1b.txt Info: PYSVN CMD propset svn:eol-style native b:\wc2\test\file1b.txt property_added B:/wc2/test/file1b.txt Info: PYSVN CMD checkin b:\wc2 -m "copy test" A B:/wc2/test/file1b.txt Revision 7 Info: Test - diff Info: Append File b:\wc2\test\file1b.txt - new line Info: PYSVN CMD diff b:\wc2 Index: B:/wc2/test/file1b.txt =================================================================== --- B:/wc2/test/file1b.txt (revision 7) +++ B:/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Test - export Info: PYSVN CMD export file:///b:/repos/trunk/test b:\export1.native A b:\export1.native A b:\export1.native/file1.txt A b:\export1.native/file1b.txt A b:\export1.native/file2.txt A b:\export1.native/file3.txt A b:\export1.native/file4.txt A b:\export1.native/file5.txt A b:\export1.native/folder1 A b:\export1.native/folder1/file7.txt A b:\export1.native/folder1/folder2 A b:\export1.native/folder1/folder2/file8.txt A b:\export1.native/folder3 Info: PYSVN CMD export --native-eol CR file:///b:/repos/trunk/test b:\export1.cr A b:\export1.cr A b:\export1.cr/file1.txt A b:\export1.cr/file1b.txt A b:\export1.cr/file2.txt A b:\export1.cr/file3.txt A b:\export1.cr/file4.txt A b:\export1.cr/file5.txt A b:\export1.cr/folder1 A b:\export1.cr/folder1/file7.txt A b:\export1.cr/folder1/folder2 A b:\export1.cr/folder1/folder2/file8.txt A b:\export1.cr/folder3 Info: PYSVN CMD export --native-eol LF file:///b:/repos/trunk/test b:\export1.lf A b:\export1.lf A b:\export1.lf/file1.txt A b:\export1.lf/file1b.txt A b:\export1.lf/file2.txt A b:\export1.lf/file3.txt A b:\export1.lf/file4.txt A b:\export1.lf/file5.txt A b:\export1.lf/folder1 A b:\export1.lf/folder1/file7.txt A b:\export1.lf/folder1/folder2 A b:\export1.lf/folder1/folder2/file8.txt A b:\export1.lf/folder3 Info: PYSVN CMD export --native-eol CRLF file:///b:/repos/trunk/test b:\export1.crlf A b:\export1.crlf A b:\export1.crlf/file1.txt A b:\export1.crlf/file1b.txt A b:\export1.crlf/file2.txt A b:\export1.crlf/file3.txt A b:\export1.crlf/file4.txt A b:\export1.crlf/file5.txt A b:\export1.crlf/folder1 A b:\export1.crlf/folder1/file7.txt A b:\export1.crlf/folder1/folder2 A b:\export1.crlf/folder1/folder2/file8.txt A b:\export1.crlf/folder3 Info: CMD dir /s /b b:\export1.native b:\export1.native\file1.txt b:\export1.native\file1b.txt b:\export1.native\file2.txt b:\export1.native\file3.txt b:\export1.native\file4.txt b:\export1.native\file5.txt b:\export1.native\folder1 b:\export1.native\folder3 b:\export1.native\folder1\file7.txt b:\export1.native\folder1\folder2 b:\export1.native\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.cr b:\export1.cr\file1.txt b:\export1.cr\file1b.txt b:\export1.cr\file2.txt b:\export1.cr\file3.txt b:\export1.cr\file4.txt b:\export1.cr\file5.txt b:\export1.cr\folder1 b:\export1.cr\folder3 b:\export1.cr\folder1\file7.txt b:\export1.cr\folder1\folder2 b:\export1.cr\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.lf b:\export1.lf\file1.txt b:\export1.lf\file1b.txt b:\export1.lf\file2.txt b:\export1.lf\file3.txt b:\export1.lf\file4.txt b:\export1.lf\file5.txt b:\export1.lf\folder1 b:\export1.lf\folder3 b:\export1.lf\folder1\file7.txt b:\export1.lf\folder1\folder2 b:\export1.lf\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.crlf b:\export1.crlf\file1.txt b:\export1.crlf\file1b.txt b:\export1.crlf\file2.txt b:\export1.crlf\file3.txt b:\export1.crlf\file4.txt b:\export1.crlf\file5.txt b:\export1.crlf\folder1 b:\export1.crlf\folder3 b:\export1.crlf\folder1\file7.txt b:\export1.crlf\folder1\folder2 b:\export1.crlf\folder1\folder2\file8.txt Info: Test - import Info: Test - info Info: PYSVN CMD info b:\wc2\test Path: b:\wc2\test Name: . Url: file:///B:/repos/trunk/test Repository UUID: 702e5e5d-32d5-994f-b800-2553a0751dc4 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 04-Aug-2013 19:12:12 Info: PYSVN CMD info b:\wc2\test\file1.txt Path: b:\wc2\test\file1.txt Name: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Repository UUID: 702e5e5d-32d5-994f-b800-2553a0751dc4 Revision: 4 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 04-Aug-2013 19:12:12 Text Last Updated: 04-Aug-2013 19:12:13 Checksum: cb0b37e264ebcc467e9f37a069e034d7 Info: Test - log Info: PYSVN CMD log b:\wc2 ------------------------------------------------------------ rev 7: barry | 04-Aug-2013 19:12:13 | 1 lines copy test ------------------------------------------------------------ rev 4: barry | 04-Aug-2013 19:12:12 | 1 lines commit modified file ------------------------------------------------------------ rev 3: barry | 04-Aug-2013 19:12:12 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 04-Aug-2013 19:12:11 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 04-Aug-2013 19:12:11 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Test - ls Info: PYSVN CMD ls file:///b:/repos/trunk/test file:///B:/repos/trunk/test/file1.txt file:///B:/repos/trunk/test/file1b.txt file:///B:/repos/trunk/test/file2.txt file:///B:/repos/trunk/test/file3.txt file:///B:/repos/trunk/test/file4.txt file:///B:/repos/trunk/test/file5.txt file:///B:/repos/trunk/test/folder1 file:///B:/repos/trunk/test/folder3 Info: PYSVN CMD ls -v file:///b:/repos/trunk/test 4 barry 25 04-Aug-2013 19:12:12 file:///B:/repos/trunk/test/file1.txt 7 barry 23 04-Aug-2013 19:12:13 file:///B:/repos/trunk/test/file1b.txt 3 barry 17 04-Aug-2013 19:12:12 file:///B:/repos/trunk/test/file2.txt 3 barry 17 04-Aug-2013 19:12:12 file:///B:/repos/trunk/test/file3.txt 3 barry 17 04-Aug-2013 19:12:12 file:///B:/repos/trunk/test/file4.txt 3 barry 17 04-Aug-2013 19:12:12 file:///B:/repos/trunk/test/file5.txt 3 barry 0 04-Aug-2013 19:12:12 file:///B:/repos/trunk/test/folder1 3 barry 0 04-Aug-2013 19:12:12 file:///B:/repos/trunk/test/folder3 Info: PYSVN CMD ls b:\wc2\test B:/wc2/test/file1.txt B:/wc2/test/file1b.txt B:/wc2/test/file2.txt B:/wc2/test/file3.txt B:/wc2/test/file4.txt B:/wc2/test/file5.txt B:/wc2/test/folder1 B:/wc2/test/folder3 Info: PYSVN CMD ls -v b:\wc2\test 4 barry 25 04-Aug-2013 19:12:12 B:/wc2/test/file1.txt 7 barry 23 04-Aug-2013 19:12:13 B:/wc2/test/file1b.txt 3 barry 17 04-Aug-2013 19:12:12 B:/wc2/test/file2.txt 3 barry 17 04-Aug-2013 19:12:12 B:/wc2/test/file3.txt 3 barry 17 04-Aug-2013 19:12:12 B:/wc2/test/file4.txt 3 barry 17 04-Aug-2013 19:12:12 B:/wc2/test/file5.txt 3 barry 0 04-Aug-2013 19:12:12 B:/wc2/test/folder1 3 barry 0 04-Aug-2013 19:12:12 B:/wc2/test/folder3 Info: Test - merge - see below Info: Test - mkdir - done above Info: Test - move Info: Create File msg.tmp - move url test Info: PYSVN CMD move file:///b:/repos/trunk/test/file2.txt file:///b:/repos/trunk/test/file2b.txt Log message --- ------- Info: PYSVN CMD move b:\wc2\test\file3.txt b:\wc2\test\file3b.txt A B:/wc2/test/file3b.txt D B:/wc2/test/file3.txt Info: PYSVN CMD checkin b:\wc2 -m "move wc test" A B:/wc2/test/file3b.txt D B:/wc2/test/file3.txt M B:/wc2/test/file1b.txt Revision 9 Info: Test - status Info: Append File b:\wc1\test\file4.txt - file 4 is changing Info: PYSVN CMD checkin b:\wc1 -m "change wc1 for status -u to detect" M B:/wc1/test/file4.txt Revision 10 Info: PYSVN CMD status b:\wc2 Info: PYSVN CMD status --verbose b:\wc2 4 4 barry B:\wc2 4 4 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 9 9 barry B:\wc2\test\file1b.txt 4 3 barry B:\wc2\test\file2.txt 9 9 barry B:\wc2\test\file3b.txt 4 3 barry B:\wc2\test\file4.txt 4 3 barry B:\wc2\test\file5.txt 4 3 barry B:\wc2\test\folder1 4 3 barry B:\wc2\test\folder1\file7.txt 4 3 barry B:\wc2\test\folder1\folder2 4 3 barry B:\wc2\test\folder1\folder2\file8.txt 4 3 barry B:\wc2\test\folder3 Info: PYSVN CMD status --show-updates b:\wc2 M B:\wc2\test D B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt M B:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry B:\wc2 M 4 4 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 9 9 barry B:\wc2\test\file1b.txt D 4 3 barry B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt 9 9 barry B:\wc2\test\file3b.txt M 4 3 barry B:\wc2\test\file4.txt 4 3 barry B:\wc2\test\file5.txt 4 3 barry B:\wc2\test\folder1 4 3 barry B:\wc2\test\folder1\file7.txt 4 3 barry B:\wc2\test\folder1\folder2 4 3 barry B:\wc2\test\folder1\folder2\file8.txt 4 3 barry B:\wc2\test\folder3 Info: PYSVN CMD update A B:/wc1/test/file1b.txt A B:/wc1/test/file2b.txt A B:/wc1/test/file3b.txt D B:/wc1/test/file2.txt D B:/wc1/test/file3.txt U B:/wc1 U B:/wc1/test update_started B:/wc1/test Updated to revision 10 Info: PYSVN CMD status --show-updates b:\wc2 M B:\wc2\test D B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt M B:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry B:\wc2 M 4 4 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 9 9 barry B:\wc2\test\file1b.txt D 4 3 barry B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt 9 9 barry B:\wc2\test\file3b.txt M 4 3 barry B:\wc2\test\file4.txt 4 3 barry B:\wc2\test\file5.txt 4 3 barry B:\wc2\test\folder1 4 3 barry B:\wc2\test\folder1\file7.txt 4 3 barry B:\wc2\test\folder1\folder2 4 3 barry B:\wc2\test\folder1\folder2\file8.txt 4 3 barry B:\wc2\test\folder3 Info: PYSVN CMD checkin b:\wc2 -m "prop change" Nothing to commit Info: Test - propdel Info: CMD cd /d b:\wc2\test Info: PYSVN CMD propset test:prop1 del_me file4.txt property_added B:/wc2/test/file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: PYSVN CMD propdel test:prop1 file4.txt property_deleted B:/wc2/test/file4.txt Info: PYSVN CMD proplist -v file4.txt Info: Test - propget Info: PYSVN CMD propget svn:eol-style file4.txt Info: Test - proplist - see above Info: Test - propset Info: CMD cd /d b:\wc2\test Info: PYSVN CMD proplist -v file4.txt Info: PYSVN CMD propset svn:eol-style native file4.txt property_added B:/wc2/test/file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Test - remove Info: CMD cd /d b:\wc2\test Info: PYSVN CMD remove file5.txt D B:/wc2/test/file5.txt Info: PYSVN CMD status MM file4.txt D file5.txt Info: Test - resolved Info: Append File b:\wc1\test\file4.txt - conflict in file4 yes Info: Append File b:\wc2\test\file4.txt - conflict in file4 no Info: PYSVN CMD checkin b:\wc1\test -m "make a conflict part 1" M B:/wc1/test/file4.txt Revision 11 Info: PYSVN CMD update b:\wc2\test callback_conflict_resolver action: base_file: B:\wc2\test\file4.txt.r4 is_binary: False kind: merged_file: B:\wc2\test\file4.txt mime_type: None my_file: B:\wc2\test\file4.txt.mine node_kind: operation: path: B:/wc2/test/file4.txt property_name: None reason: repos_url: {'node_kind': , 'path_in_repos': u'trunk/test/file4.txt', 'peg_rev': , 'repos_url': u'file:///B:/repos'} repos_url: {'node_kind': , 'path_in_repos': u'trunk/test/file4.txt', 'peg_rev': , 'repos_url': u'file:///B:/repos'} their_file: B:\wc2\test\file4.txt.r11 A B:/wc2/test/file2b.txt D B:/wc2/test/file2.txt U B:/wc2 U B:/wc2/test U B:/wc2/test/file4.txt conflict_resolver_done B:/wc2/test/file4.txt conflict_resolver_starting B:/wc2/test/file4.txt update_started B:/wc2/test Updated to revision 11 Info: PYSVN CMD status CM file4.txt ? file4.txt.mine ? file4.txt.r11 ? file4.txt.r4 D file5.txt Info: CMD copy b:\wc2\test\file4.txt.mine b:\wc2\test\file4.txt 1 file(s) copied. Info: PYSVN CMD resolved b:\wc2\test\file4.txt R B:/wc2/test/file4.txt conflict_resolver_done B:/wc2/test/file4.txt conflict_resolver_starting B:/wc2/test/file4.txt Info: PYSVN CMD checkin b:\wc2\test\file4.txt -m "resolve a confict part 2" M B:/wc2/test/file4.txt Revision 12 Info: Test - revert Info: PYSVN CMD revert file5.txt R B:/wc2/test/file5.txt Info: PYSVN CMD status Info: Test - revproplist Info: PYSVN CMD revproplist file:///b:/repos/trunk Revision: 12 svn:author: barry svn:date: 2013-08-04T18:12:17.215622Z svn:log: resolve a confict part 2 Info: Test - revpropget Info: PYSVN CMD revpropget svn:log file:///b:/repos/trunk Revision: 12 svn:log: resolve a confict part 2 Info: PYSVN CMD revpropget no_such_prop file:///b:/repos/trunk Revision: 12 no_such_prop: None Info: Test - revpropset Info: PYSVN CMD revpropset svn:log "Hello world" file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - revpropdel Info: PYSVN CMD revpropdel svn:log file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - status - see above Info: Test - relocate Info: CMD mkdir b:\root Info: CMD move b:\repos b:\root 1 dir(s) moved. Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///B:/repos/trunk Repository UUID: 702e5e5d-32d5-994f-b800-2553a0751dc4 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 04-Aug-2013 19:12:11 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc1 Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 702e5e5d-32d5-994f-b800-2553a0751dc4 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 04-Aug-2013 19:12:11 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/repos/trunk Repository UUID: 702e5e5d-32d5-994f-b800-2553a0751dc4 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 04-Aug-2013 19:12:12 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc2 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 702e5e5d-32d5-994f-b800-2553a0751dc4 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 04-Aug-2013 19:12:12 Info: Test - switch Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 702e5e5d-32d5-994f-b800-2553a0751dc4 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 04-Aug-2013 19:12:12 Info: PYSVN CMD switch b:\wc2 file:///b:/root/repos/tags/version1 A B:/wc2/test/file2.txt A B:/wc2/test/file3.txt D B:/wc2/test/file1b.txt D B:/wc2/test/file2b.txt D B:/wc2/test/file3b.txt U B:/wc2 U B:/wc2/test U B:/wc2/test/file4.txt Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/tags/version1 Repository UUID: 702e5e5d-32d5-994f-b800-2553a0751dc4 Revision: 12 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 04-Aug-2013 19:12:13 Info: Test - update - see above Info: Test - Info: Testing - merge Info: PYSVN CMD checkout file:///b:/root/repos/trunk b:\wc3 A B:/wc3/test A B:/wc3/test/file1.txt A B:/wc3/test/file1b.txt A B:/wc3/test/file2b.txt A B:/wc3/test/file3b.txt A B:/wc3/test/file4.txt A B:/wc3/test/file5.txt A B:/wc3/test/folder1 A B:/wc3/test/folder1/file7.txt A B:/wc3/test/folder1/folder2 A B:/wc3/test/folder1/folder2/file8.txt A B:/wc3/test/folder3 U B:/wc3 update_started B:/wc3 Checked out revision 12 Info: CMD cd b:\wc3\test Info: Create File file-merge-1.txt - test add file merge 1 Info: Create File file-merge-2.txt - test add file merge 2 Info: PYSVN CMD add file-merge-1.txt A B:/wc3/test/file-merge-1.txt Info: PYSVN CMD add file-merge-2.txt A B:/wc3/test/file-merge-2.txt Info: PYSVN CMD commit -m "add test merge files" . A B:/wc3/test/file-merge-1.txt A B:/wc3/test/file-merge-2.txt Revision 13 Info: Create File msg.tmp - make a branch Info: PYSVN CMD copy file:///b:/root/repos/trunk/test file:///b:/root/repos/trunk/test-branch Log message --- ------- Info: PYSVN CMD update b:\wc3 A B:/wc3/test-branch A B:/wc3/test-branch/file-merge-1.txt A B:/wc3/test-branch/file-merge-2.txt A B:/wc3/test-branch/file1.txt A B:/wc3/test-branch/file1b.txt A B:/wc3/test-branch/file2b.txt A B:/wc3/test-branch/file3b.txt A B:/wc3/test-branch/file4.txt A B:/wc3/test-branch/file5.txt A B:/wc3/test-branch/folder1 A B:/wc3/test-branch/folder1/file7.txt A B:/wc3/test-branch/folder1/folder2 A B:/wc3/test-branch/folder1/folder2/file8.txt A B:/wc3/test-branch/folder3 U B:/wc3 update_started B:/wc3 Updated to revision 14 Info: Create File file-merge-3.txt - test add file merge 3 Info: PYSVN CMD add file-merge-3.txt A B:/wc3/test/file-merge-3.txt Info: PYSVN CMD rm file-merge-1.txt D B:/wc3/test/file-merge-1.txt Info: Append File file-merge-2.txt - modify merge 2 Info: PYSVN CMD commit -m "change test merge files" . A B:/wc3/test/file-merge-3.txt D B:/wc3/test/file-merge-1.txt M B:/wc3/test/file-merge-2.txt Revision 15 Info: PYSVN CMD merge --dry-run --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch A B:/wc3/test-branch/file-merge-3.txt D B:/wc3/test-branch/file-merge-1.txt U B:/wc3/test-branch/file-merge-2.txt U B:/wc3/test-branch/file-merge-2.txt merge_begin B:/wc3/test-branch merge_completed B:/wc3/test-branch merge_elide_info B:/wc3/test-branch/file-merge-2.txt merge_record_info B:/wc3/test-branch merge_record_info B:/wc3/test-branch/file-merge-2.txt merge_record_info_begin B:/wc3/test-branch merge_record_info_begin B:/wc3/test-branch/file-merge-2.txt Info: PYSVN CMD merge --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch merge_completed B:/wc3/test-branch Info: PYSVN CMD status b:\wc3\test-branch M B:\wc3\test-branch D B:\wc3\test-branch\file-merge-1.txt M B:\wc3\test-branch\file-merge-2.txt A + B:\wc3\test-branch\file-merge-3.txt Info: PYSVN CMD diff b:\wc3\test-branch Index: B:/wc3/test-branch/file-merge-1.txt =================================================================== --- B:/wc3/test-branch/file-merge-1.txt (revision 14) +++ B:/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: B:/wc3/test-branch/file-merge-2.txt =================================================================== --- B:/wc3/test-branch/file-merge-2.txt (revision 14) +++ B:/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Index: B:/wc3/test-branch =================================================================== --- B:/wc3/test-branch (revision 14) +++ B:/wc3/test-branch (working copy) Property changes on: B:/wc3/test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r15 Info: CMD c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_01_set_get_tests.py b:\configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Test - end pysvn-1.7.8/Tests/test-01.win32.known_good-py3-svn1.5.log000644 000771 000771 00000064564 11264420550 023077 0ustar00barrybarry000000 000000 WorkDir: C:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python31\python.exe Username: barry Info: PYSVN CMD c:\python31\python.exe C:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.01.00 --config-dir b:\configdir Info: CMD mkdir testroot-01 Info: CMD subst b: C:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-01 Info: CMD cd /d b:\ Info: CMD svnadmin create b:\repos Info: Test - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-01 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-01 add test" Info: Test - ls Info: PYSVN CMD ls file:///b:/repos -v -R 2 barry 0 11-Oct-2009 19:16:22 file:///b:/repos/trunk 2 barry 0 11-Oct-2009 19:16:22 file:///b:/repos/trunk/test Info: Test - checkout Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD dir b:\wc1 /s /b /a-h b:\wc1\test b:\wc1\.svn\entries b:\wc1\.svn\format b:\wc1\.svn\prop-base b:\wc1\.svn\props b:\wc1\.svn\text-base b:\wc1\.svn\tmp b:\wc1\.svn\tmp\prop-base b:\wc1\.svn\tmp\props b:\wc1\.svn\tmp\text-base b:\wc1\test\.svn\entries b:\wc1\test\.svn\format b:\wc1\test\.svn\prop-base b:\wc1\test\.svn\props b:\wc1\test\.svn\text-base b:\wc1\test\.svn\tmp b:\wc1\test\.svn\tmp\prop-base b:\wc1\test\.svn\tmp\props b:\wc1\test\.svn\tmp\text-base Info: CMD cd /d b:\wc1\test Info: Test - add Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: Create File file3.txt - test add file 3 Info: Create File file4.txt - test add file 4 Info: Create File file5.txt - test add file 5 Info: CMD mkdir folder1 Info: Create File folder1\file7.txt - test add file 7 Info: CMD mkdir folder1\folder2 Info: Create File folder1\folder2\file8.txt - test add file 8 Info: CMD mkdir folder3 Info: Create File folder3\file9.txt - test add file 9 Info: CMD mkdir folder3\folder4 Info: Create File folder3\folder4\file10.txt - test add file 10 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD add file3.txt A file3.txt Info: PYSVN CMD add file4.txt A file4.txt Info: PYSVN CMD add --force file5.txt A file5.txt Info: PYSVN CMD add folder1 A folder1 A folder1/file7.txt A folder1/folder2 A folder1/folder2/file8.txt Info: PYSVN CMD add --non-recursive folder3 A folder3 Info: PYSVN CMD checkin -m "commit added files" A test/file1.txt A test/file2.txt A test/file3.txt A test/file4.txt A test/file5.txt A test/folder1 A test/folder1/file7.txt A test/folder1/folder2 A test/folder1/folder2/file8.txt A test/folder3 Revision 3 Info: Test - update - get a new wc that will update Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A b:/wc2/test A b:/wc2/test/file1.txt A b:/wc2/test/file2.txt A b:/wc2/test/file3.txt A b:/wc2/test/file4.txt A b:/wc2/test/file5.txt A b:/wc2/test/folder1 A b:/wc2/test/folder1/file7.txt A b:/wc2/test/folder1/folder2 A b:/wc2/test/folder1/folder2/file8.txt A b:/wc2/test/folder3 U b:/wc2 Checked out revision 3 Info: Test - - checkin a mod from wc1 Info: Append File b:\wc1\test\file1.txt - line 2 Info: PYSVN CMD checkin -m "commit modified file" M test/file1.txt Revision 4 Info: PYSVN CMD checkin -m "commit modified file" Nothing to commit Info: Test - update Info: PYSVN CMD update b:\wc2 U b:/wc2 U b:/wc2/test U b:/wc2/test/file1.txt Updated to revision 4 Info: Test - the rest in lexical order Info: Test - annotate Info: PYSVN CMD annotate b:\wc2\test\file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2009-10-11T18:16:28.490875Z | test add file 1 1| r4 | barry | 2009-10-11T18:16:30.709625Z | line 2 Info: Test - cat Info: PYSVN CMD cat -r head file:///b:/repos/trunk/test/file1.txt test add file 1 line 2 Info: Test - cleanup Info: Test - copy Info: PYSVN CMD mkdir file:///b:/repos/tags -m "test-01 add tags" Info: Create File msg.tmp - tag the trunk Info: PYSVN CMD copy file:///b:/repos/trunk file:///b:/repos/tags/version1 Log message --- ------- Info: PYSVN CMD ls -v file:///b:/repos/tags 6 barry 0 11-Oct-2009 19:16:35 file:///b:/repos/tags/version1 Info: PYSVN CMD copy b:\wc2\test\file1.txt b:\wc2\test\file1b.txt A b:/wc2/test/file1b.txt Info: PYSVN CMD propset svn:eol-style native b:\wc2\test\file1b.txt Info: PYSVN CMD checkin b:\wc2 -m "copy test" A wc2/test/file1b.txt Revision 7 Info: Test - diff Info: Append File b:\wc2\test\file1b.txt - new line Info: PYSVN CMD diff b:\wc2 Index: b:/wc2/test/file1b.txt =================================================================== --- b:/wc2/test/file1b.txt (revision 7) +++ b:/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Test - export Info: PYSVN CMD export file:///b:/repos/trunk/test b:\export1.native A b:\export1.native A b:\export1.native/file1.txt A b:\export1.native/file1b.txt A b:\export1.native/file2.txt A b:\export1.native/file3.txt A b:\export1.native/file4.txt A b:\export1.native/file5.txt A b:\export1.native/folder1 A b:\export1.native/folder1/file7.txt A b:\export1.native/folder1/folder2 A b:\export1.native/folder1/folder2/file8.txt A b:\export1.native/folder3 Info: PYSVN CMD export --native-eol CR file:///b:/repos/trunk/test b:\export1.cr A b:\export1.cr A b:\export1.cr/file1.txt A b:\export1.cr/file1b.txt A b:\export1.cr/file2.txt A b:\export1.cr/file3.txt A b:\export1.cr/file4.txt A b:\export1.cr/file5.txt A b:\export1.cr/folder1 A b:\export1.cr/folder1/file7.txt A b:\export1.cr/folder1/folder2 A b:\export1.cr/folder1/folder2/file8.txt A b:\export1.cr/folder3 Info: PYSVN CMD export --native-eol LF file:///b:/repos/trunk/test b:\export1.lf A b:\export1.lf A b:\export1.lf/file1.txt A b:\export1.lf/file1b.txt A b:\export1.lf/file2.txt A b:\export1.lf/file3.txt A b:\export1.lf/file4.txt A b:\export1.lf/file5.txt A b:\export1.lf/folder1 A b:\export1.lf/folder1/file7.txt A b:\export1.lf/folder1/folder2 A b:\export1.lf/folder1/folder2/file8.txt A b:\export1.lf/folder3 Info: PYSVN CMD export --native-eol CRLF file:///b:/repos/trunk/test b:\export1.crlf A b:\export1.crlf A b:\export1.crlf/file1.txt A b:\export1.crlf/file1b.txt A b:\export1.crlf/file2.txt A b:\export1.crlf/file3.txt A b:\export1.crlf/file4.txt A b:\export1.crlf/file5.txt A b:\export1.crlf/folder1 A b:\export1.crlf/folder1/file7.txt A b:\export1.crlf/folder1/folder2 A b:\export1.crlf/folder1/folder2/file8.txt A b:\export1.crlf/folder3 Info: CMD dir /s /b b:\export1.native b:\export1.native\file1.txt b:\export1.native\file1b.txt b:\export1.native\file2.txt b:\export1.native\file3.txt b:\export1.native\file4.txt b:\export1.native\file5.txt b:\export1.native\folder1 b:\export1.native\folder3 b:\export1.native\folder1\file7.txt b:\export1.native\folder1\folder2 b:\export1.native\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.cr b:\export1.cr\file1.txt b:\export1.cr\file1b.txt b:\export1.cr\file2.txt b:\export1.cr\file3.txt b:\export1.cr\file4.txt b:\export1.cr\file5.txt b:\export1.cr\folder1 b:\export1.cr\folder3 b:\export1.cr\folder1\file7.txt b:\export1.cr\folder1\folder2 b:\export1.cr\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.lf b:\export1.lf\file1.txt b:\export1.lf\file1b.txt b:\export1.lf\file2.txt b:\export1.lf\file3.txt b:\export1.lf\file4.txt b:\export1.lf\file5.txt b:\export1.lf\folder1 b:\export1.lf\folder3 b:\export1.lf\folder1\file7.txt b:\export1.lf\folder1\folder2 b:\export1.lf\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.crlf b:\export1.crlf\file1.txt b:\export1.crlf\file1b.txt b:\export1.crlf\file2.txt b:\export1.crlf\file3.txt b:\export1.crlf\file4.txt b:\export1.crlf\file5.txt b:\export1.crlf\folder1 b:\export1.crlf\folder3 b:\export1.crlf\folder1\file7.txt b:\export1.crlf\folder1\folder2 b:\export1.crlf\folder1\folder2\file8.txt Info: Test - import Info: Test - info Info: PYSVN CMD info b:\wc2\test Path: b:\wc2\test Name: . Url: file:///b:/repos/trunk/test Repository UUID: 2366d249-f026-ca4d-8d96-447fa5eb453f Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 11-Oct-2009 19:16:30 Info: PYSVN CMD info b:\wc2\test\file1.txt Path: b:\wc2\test\file1.txt Name: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Repository UUID: 2366d249-f026-ca4d-8d96-447fa5eb453f Revision: 4 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 11-Oct-2009 19:16:30 Text Last Updated: 11-Oct-2009 19:16:32 Checksum: cb0b37e264ebcc467e9f37a069e034d7 Info: Test - log Info: PYSVN CMD log b:\wc2 ------------------------------------------------------------ rev 7: barry | 11-Oct-2009 19:16:38 | 1 lines copy test ------------------------------------------------------------ rev 4: barry | 11-Oct-2009 19:16:30 | 1 lines commit modified file ------------------------------------------------------------ rev 3: barry | 11-Oct-2009 19:16:28 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 11-Oct-2009 19:16:22 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 11-Oct-2009 19:16:21 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Test - ls Info: PYSVN CMD ls file:///b:/repos/trunk/test file:///b:/repos/trunk/test/file1.txt file:///b:/repos/trunk/test/file1b.txt file:///b:/repos/trunk/test/file2.txt file:///b:/repos/trunk/test/file3.txt file:///b:/repos/trunk/test/file4.txt file:///b:/repos/trunk/test/file5.txt file:///b:/repos/trunk/test/folder1 file:///b:/repos/trunk/test/folder3 Info: PYSVN CMD ls -v file:///b:/repos/trunk/test 4 barry 25 11-Oct-2009 19:16:30 file:///b:/repos/trunk/test/file1.txt 7 barry 23 11-Oct-2009 19:16:38 file:///b:/repos/trunk/test/file1b.txt 3 barry 17 11-Oct-2009 19:16:28 file:///b:/repos/trunk/test/file2.txt 3 barry 17 11-Oct-2009 19:16:28 file:///b:/repos/trunk/test/file3.txt 3 barry 17 11-Oct-2009 19:16:28 file:///b:/repos/trunk/test/file4.txt 3 barry 17 11-Oct-2009 19:16:28 file:///b:/repos/trunk/test/file5.txt 3 barry 0 11-Oct-2009 19:16:28 file:///b:/repos/trunk/test/folder1 3 barry 0 11-Oct-2009 19:16:28 file:///b:/repos/trunk/test/folder3 Info: PYSVN CMD ls b:\wc2\test b:/wc2/test/file1.txt b:/wc2/test/file1b.txt b:/wc2/test/file2.txt b:/wc2/test/file3.txt b:/wc2/test/file4.txt b:/wc2/test/file5.txt b:/wc2/test/folder1 b:/wc2/test/folder3 Info: PYSVN CMD ls -v b:\wc2\test 4 barry 25 11-Oct-2009 19:16:30 b:/wc2/test/file1.txt 7 barry 23 11-Oct-2009 19:16:38 b:/wc2/test/file1b.txt 3 barry 17 11-Oct-2009 19:16:28 b:/wc2/test/file2.txt 3 barry 17 11-Oct-2009 19:16:28 b:/wc2/test/file3.txt 3 barry 17 11-Oct-2009 19:16:28 b:/wc2/test/file4.txt 3 barry 17 11-Oct-2009 19:16:28 b:/wc2/test/file5.txt 3 barry 0 11-Oct-2009 19:16:28 b:/wc2/test/folder1 3 barry 0 11-Oct-2009 19:16:28 b:/wc2/test/folder3 Info: Test - merge - see below Info: Test - mkdir - done above Info: Test - move Info: Create File msg.tmp - move url test Info: PYSVN CMD move file:///b:/repos/trunk/test/file2.txt file:///b:/repos/trunk/test/file2b.txt Log message --- ------- Info: PYSVN CMD move b:\wc2\test\file3.txt b:\wc2\test\file3b.txt A b:/wc2/test/file3b.txt D b:/wc2/test/file3.txt Info: PYSVN CMD checkin b:\wc2 -m "move wc test" A wc2/test/file3b.txt D wc2/test/file3.txt M wc2/test/file1b.txt Revision 9 Info: Test - status Info: Append File b:\wc1\test\file4.txt - file 4 is changing Info: PYSVN CMD checkin b:\wc1 -m "change wc1 for status -u to detect" M test/file4.txt Revision 10 Info: PYSVN CMD status b:\wc2 Info: PYSVN CMD status --verbose b:\wc2 4 4 barry b:\wc2 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt 4 3 barry b:\wc2\test\file2.txt 9 9 barry b:\wc2\test\file3b.txt 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt 4 3 barry b:\wc2\test\folder1 4 3 barry b:\wc2\test\folder1\file7.txt 4 3 barry b:\wc2\test\folder1\folder2 4 3 barry b:\wc2\test\folder1\folder2\file8.txt 4 3 barry b:\wc2\test\folder3 Info: PYSVN CMD status --show-updates b:\wc2 M b:\wc2\test D b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt M b:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry b:\wc2 M 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt D 4 3 barry b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt 9 9 barry b:\wc2\test\file3b.txt M 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt 4 3 barry b:\wc2\test\folder1 4 3 barry b:\wc2\test\folder1\file7.txt 4 3 barry b:\wc2\test\folder1\folder2 4 3 barry b:\wc2\test\folder1\folder2\file8.txt 4 3 barry b:\wc2\test\folder3 Info: PYSVN CMD update A file1b.txt A file2b.txt A file3b.txt D file2.txt D file3.txt Updated to revision 10 Info: PYSVN CMD status --show-updates b:\wc2 M b:\wc2\test D b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt M b:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry b:\wc2 M 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt D 4 3 barry b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt 9 9 barry b:\wc2\test\file3b.txt M 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt 4 3 barry b:\wc2\test\folder1 4 3 barry b:\wc2\test\folder1\file7.txt 4 3 barry b:\wc2\test\folder1\folder2 4 3 barry b:\wc2\test\folder1\folder2\file8.txt 4 3 barry b:\wc2\test\folder3 Info: PYSVN CMD checkin b:\wc2 -m "prop change" Nothing to commit Info: Test - propdel Info: CMD cd /d b:\wc2\test Info: PYSVN CMD propset test:prop1 del_me file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: PYSVN CMD propdel test:prop1 file4.txt Info: PYSVN CMD proplist -v file4.txt Info: Test - propget Info: PYSVN CMD propget svn:eol-style file4.txt Info: Test - proplist - see above Info: Test - propset Info: CMD cd /d b:\wc2\test Info: PYSVN CMD proplist -v file4.txt Info: PYSVN CMD propset svn:eol-style native file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Test - remove Info: CMD cd /d b:\wc2\test Info: PYSVN CMD remove file5.txt D file5.txt Info: PYSVN CMD status M file4.txt D file5.txt Info: Test - resolved Info: Append File b:\wc1\test\file4.txt - conflict in file4 yes Info: Append File b:\wc2\test\file4.txt - conflict in file4 no Info: PYSVN CMD checkin b:\wc1\test -m "make a conflict part 1" M wc1/test/file4.txt Revision 11 Info: PYSVN CMD update b:\wc2\test callback_conflict_resolver action: base_file: 'b:\\wc2\\test\\.svn\\text-base\\file4.txt.svn-base' is_binary: False kind: merged_file: 'b:\\wc2\\test\\.svn\\tmp\\tempfile.3.tmp' mime_type: None my_file: 'b:\\wc2\\test\\.svn\\tmp\\tempfile.2.tmp' node_kind: path: 'b:/wc2/test/file4.txt' property_name: None reason: their_file: 'b:\\wc2\\test\\.svn\\tmp\\text-base\\file4.txt.svn-base' A b:/wc2/test/file2b.txt D b:/wc2/test/file2.txt U b:/wc2 U b:/wc2/test U b:/wc2/test/file4.txt Updated to revision 11 Info: PYSVN CMD status CM file4.txt ? file4.txt.mine ? file4.txt.r11 ? file4.txt.r4 D file5.txt Info: CMD copy b:\wc2\test\file4.txt.mine b:\wc2\test\file4.txt 1 file(s) copied. Info: PYSVN CMD resolved b:\wc2\test\file4.txt R b:/wc2/test/file4.txt Info: PYSVN CMD checkin b:\wc2\test\file4.txt -m "resolve a confict part 2" M file4.txt Revision 12 Info: Test - revert Info: PYSVN CMD revert file5.txt R file5.txt Info: PYSVN CMD status Info: Test - revproplist Info: PYSVN CMD revproplist file:///b:/repos/trunk Revision: 12 svn:author: barry svn:date: 2009-10-11T18:17:02.803375Z svn:log: resolve a confict part 2 Info: Test - revpropget Info: PYSVN CMD revpropget svn:log file:///b:/repos/trunk Revision: 12 svn:log: resolve a confict part 2 Info: PYSVN CMD revpropget no_such_prop file:///b:/repos/trunk Revision: 12 no_such_prop: None Info: Test - revpropset Info: PYSVN CMD revpropset svn:log "Hello world" file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - revpropdel Info: PYSVN CMD revpropdel svn:log file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - status - see above Info: Test - relocate Info: CMD mkdir b:\root Info: CMD move b:\repos b:\root Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///b:/repos/trunk Repository UUID: 2366d249-f026-ca4d-8d96-447fa5eb453f Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 11-Oct-2009 19:16:22 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc1 Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///b:/root/repos/trunk Repository UUID: 2366d249-f026-ca4d-8d96-447fa5eb453f Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 11-Oct-2009 19:16:22 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///b:/repos/trunk Repository UUID: 2366d249-f026-ca4d-8d96-447fa5eb453f Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 11-Oct-2009 19:16:30 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc2 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///b:/root/repos/trunk Repository UUID: 2366d249-f026-ca4d-8d96-447fa5eb453f Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 11-Oct-2009 19:16:30 Info: Test - switch Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///b:/root/repos/trunk Repository UUID: 2366d249-f026-ca4d-8d96-447fa5eb453f Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 11-Oct-2009 19:16:30 Info: PYSVN CMD switch b:\wc2 file:///b:/root/repos/tags/version1 A b:/wc2/test/file2.txt A b:/wc2/test/file3.txt D b:/wc2/test/file1b.txt D b:/wc2/test/file2b.txt D b:/wc2/test/file3b.txt U b:/wc2 U b:/wc2/test U b:/wc2/test/file4.txt Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///b:/root/repos/tags/version1 Repository UUID: 2366d249-f026-ca4d-8d96-447fa5eb453f Revision: 12 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 11-Oct-2009 19:16:35 Info: Test - update - see above Info: Test - Info: Testing - merge Info: PYSVN CMD checkout file:///b:/root/repos/trunk b:\wc3 A b:/wc3/test A b:/wc3/test/file1.txt A b:/wc3/test/file1b.txt A b:/wc3/test/file2b.txt A b:/wc3/test/file3b.txt A b:/wc3/test/file4.txt A b:/wc3/test/file5.txt A b:/wc3/test/folder1 A b:/wc3/test/folder1/file7.txt A b:/wc3/test/folder1/folder2 A b:/wc3/test/folder1/folder2/file8.txt A b:/wc3/test/folder3 U b:/wc3 Checked out revision 12 Info: CMD cd b:\wc3\test Info: Create File file-merge-1.txt - test add file merge 1 Info: Create File file-merge-2.txt - test add file merge 2 Info: PYSVN CMD add file-merge-1.txt A file-merge-1.txt Info: PYSVN CMD add file-merge-2.txt A file-merge-2.txt Info: PYSVN CMD commit -m "add test merge files" . A test/file-merge-1.txt A test/file-merge-2.txt Revision 13 Info: Create File msg.tmp - make a branch Info: PYSVN CMD copy file:///b:/root/repos/trunk/test file:///b:/root/repos/trunk/test-branch Log message --- ------- Info: PYSVN CMD update b:\wc3 A b:/wc3/test-branch A b:/wc3/test-branch/file-merge-1.txt A b:/wc3/test-branch/file-merge-2.txt A b:/wc3/test-branch/file1.txt A b:/wc3/test-branch/file1b.txt A b:/wc3/test-branch/file2b.txt A b:/wc3/test-branch/file3b.txt A b:/wc3/test-branch/file4.txt A b:/wc3/test-branch/file5.txt A b:/wc3/test-branch/folder1 A b:/wc3/test-branch/folder1/file7.txt A b:/wc3/test-branch/folder1/folder2 A b:/wc3/test-branch/folder1/folder2/file8.txt A b:/wc3/test-branch/folder3 U b:/wc3 U b:/wc3/test Updated to revision 14 Info: Create File file-merge-3.txt - test add file merge 3 Info: PYSVN CMD add file-merge-3.txt A file-merge-3.txt Info: PYSVN CMD rm file-merge-1.txt D file-merge-1.txt Info: Append File file-merge-2.txt - modify merge 2 Info: PYSVN CMD commit -m "change test merge files" . A test/file-merge-3.txt D test/file-merge-1.txt M test/file-merge-2.txt Revision 15 Info: PYSVN CMD merge --dry-run --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch A b:/wc3/test-branch/file-merge-3.txt D b:/wc3/test-branch/file-merge-1.txt U b:/wc3/test-branch U b:/wc3/test-branch/file-merge-2.txt merge_begin b:/wc3/test-branch merge_begin b:/wc3/test-branch/file-merge-2.txt Info: PYSVN CMD merge --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch U b:/wc3/test-branch Info: PYSVN CMD status b:\wc3\test-branch M b:\wc3\test-branch D b:\wc3\test-branch\file-merge-1.txt MM b:\wc3\test-branch\file-merge-2.txt A + b:\wc3\test-branch\file-merge-3.txt M b:\wc3\test-branch\file1.txt M b:\wc3\test-branch\file1b.txt M b:\wc3\test-branch\file2b.txt M b:\wc3\test-branch\file3b.txt M b:\wc3\test-branch\file4.txt M b:\wc3\test-branch\file5.txt Info: PYSVN CMD diff b:\wc3\test-branch Property changes on: b:\wc3\test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r15* Property changes on: b:\wc3\test-branch\file1b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1b.txt:r15 Property changes on: b:\wc3\test-branch\file2b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file2b.txt:r15 Property changes on: b:\wc3\test-branch\file4.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file4.txt:r15 Property changes on: b:\wc3\test-branch\file3b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file3b.txt:r15 Property changes on: b:\wc3\test-branch\file5.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file5.txt:r15 Index: b:/wc3/test-branch/file-merge-1.txt =================================================================== --- b:/wc3/test-branch/file-merge-1.txt (revision 14) +++ b:/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: b:/wc3/test-branch/file-merge-2.txt =================================================================== --- b:/wc3/test-branch/file-merge-2.txt (revision 14) +++ b:/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Property changes on: b:\wc3\test-branch\file-merge-2.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-2.txt:r15 Property changes on: b:\wc3\test-branch\file-merge-3.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-3.txt:r15 Property changes on: b:\wc3\test-branch\file1.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1.txt:r15 Info: CMD c:\python31\python.exe C:\wc\pysvn\trunk\pysvn\Extension\Tests\test_01_set_get_tests.py b:\configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Test - end pysvn-1.7.8/Tests/test-01.win32.known_good-py3-svn1.6.log000644 000771 000771 00000064261 12052502536 023073 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry Info: PYSVN CMD c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.01.00 --config-dir b:\configdir Info: CMD mkdir testroot-01 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-01 Info: CMD cd /d b:\ Info: CMD svnadmin create b:\repos Info: Test - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-01 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-01 add test" Info: Test - ls Info: PYSVN CMD ls file:///b:/repos -v -R 2 barry 0 19-Nov-2012 19:13:27 file:///B:/repos/trunk 2 barry 0 19-Nov-2012 19:13:27 file:///B:/repos/trunk/test Info: Test - checkout Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD dir b:\wc1 /s /b /a-h b:\wc1\test b:\wc1\.svn\entries b:\wc1\.svn\prop-base b:\wc1\.svn\props b:\wc1\.svn\text-base b:\wc1\.svn\tmp b:\wc1\.svn\tmp\prop-base b:\wc1\.svn\tmp\props b:\wc1\.svn\tmp\text-base b:\wc1\test\.svn\entries b:\wc1\test\.svn\prop-base b:\wc1\test\.svn\props b:\wc1\test\.svn\text-base b:\wc1\test\.svn\tmp b:\wc1\test\.svn\tmp\prop-base b:\wc1\test\.svn\tmp\props b:\wc1\test\.svn\tmp\text-base Info: CMD cd /d b:\wc1\test Info: Test - add Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: Create File file3.txt - test add file 3 Info: Create File file4.txt - test add file 4 Info: Create File file5.txt - test add file 5 Info: CMD mkdir folder1 Info: Create File folder1\file7.txt - test add file 7 Info: CMD mkdir folder1\folder2 Info: Create File folder1\folder2\file8.txt - test add file 8 Info: CMD mkdir folder3 Info: Create File folder3\file9.txt - test add file 9 Info: CMD mkdir folder3\folder4 Info: Create File folder3\folder4\file10.txt - test add file 10 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD add file3.txt A file3.txt Info: PYSVN CMD add file4.txt A file4.txt Info: PYSVN CMD add --force file5.txt A file5.txt Info: PYSVN CMD add folder1 A folder1 A folder1/file7.txt A folder1/folder2 A folder1/folder2/file8.txt Info: PYSVN CMD add --non-recursive folder3 A folder3 Info: PYSVN CMD checkin -m "commit added files" A b:/wc1/test/file1.txt A b:/wc1/test/file2.txt A b:/wc1/test/file3.txt A b:/wc1/test/file4.txt A b:/wc1/test/file5.txt A b:/wc1/test/folder1 A b:/wc1/test/folder1/file7.txt A b:/wc1/test/folder1/folder2 A b:/wc1/test/folder1/folder2/file8.txt A b:/wc1/test/folder3 Revision 3 Info: Test - update - get a new wc that will update Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A b:/wc2/test A b:/wc2/test/file1.txt A b:/wc2/test/file2.txt A b:/wc2/test/file3.txt A b:/wc2/test/file4.txt A b:/wc2/test/file5.txt A b:/wc2/test/folder1 A b:/wc2/test/folder1/file7.txt A b:/wc2/test/folder1/folder2 A b:/wc2/test/folder1/folder2/file8.txt A b:/wc2/test/folder3 U b:/wc2 Checked out revision 3 Info: Test - - checkin a mod from wc1 Info: Append File b:\wc1\test\file1.txt - line 2 Info: PYSVN CMD checkin -m "commit modified file" M b:/wc1/test/file1.txt Revision 4 Info: PYSVN CMD checkin -m "commit modified file" Nothing to commit Info: Test - update Info: PYSVN CMD update b:\wc2 U b:/wc2 U b:/wc2/test U b:/wc2/test/file1.txt Updated to revision 4 Info: Test - the rest in lexical order Info: Test - annotate Info: PYSVN CMD annotate b:\wc2\test\file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2012-11-19T19:13:28.937665Z | test add file 1 1| r4 | barry | 2012-11-19T19:13:29.374423Z | line 2 Info: Test - cat Info: PYSVN CMD cat -r head file:///b:/repos/trunk/test/file1.txt test add file 1 line 2 Info: Test - cleanup Info: Test - copy Info: PYSVN CMD mkdir file:///b:/repos/tags -m "test-01 add tags" Info: Create File msg.tmp - tag the trunk Info: PYSVN CMD copy file:///b:/repos/trunk file:///b:/repos/tags/version1 Log message --- ------- Info: PYSVN CMD ls -v file:///b:/repos/tags 6 barry 0 19-Nov-2012 19:13:30 file:///B:/repos/tags/version1 Info: PYSVN CMD copy b:\wc2\test\file1.txt b:\wc2\test\file1b.txt A b:/wc2/test/file1b.txt Info: PYSVN CMD propset svn:eol-style native b:\wc2\test\file1b.txt property_added b:/wc2/test/file1b.txt Info: PYSVN CMD checkin b:\wc2 -m "copy test" A B:/wc2/test/file1b.txt Revision 7 Info: Test - diff Info: Append File b:\wc2\test\file1b.txt - new line Info: PYSVN CMD diff b:\wc2 Index: b:/wc2/test/file1b.txt =================================================================== --- b:/wc2/test/file1b.txt (revision 7) +++ b:/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Test - export Info: PYSVN CMD export file:///b:/repos/trunk/test b:\export1.native A b:\export1.native A b:\export1.native/file1.txt A b:\export1.native/file1b.txt A b:\export1.native/file2.txt A b:\export1.native/file3.txt A b:\export1.native/file4.txt A b:\export1.native/file5.txt A b:\export1.native/folder1 A b:\export1.native/folder1/file7.txt A b:\export1.native/folder1/folder2 A b:\export1.native/folder1/folder2/file8.txt A b:\export1.native/folder3 Info: PYSVN CMD export --native-eol CR file:///b:/repos/trunk/test b:\export1.cr A b:\export1.cr A b:\export1.cr/file1.txt A b:\export1.cr/file1b.txt A b:\export1.cr/file2.txt A b:\export1.cr/file3.txt A b:\export1.cr/file4.txt A b:\export1.cr/file5.txt A b:\export1.cr/folder1 A b:\export1.cr/folder1/file7.txt A b:\export1.cr/folder1/folder2 A b:\export1.cr/folder1/folder2/file8.txt A b:\export1.cr/folder3 Info: PYSVN CMD export --native-eol LF file:///b:/repos/trunk/test b:\export1.lf A b:\export1.lf A b:\export1.lf/file1.txt A b:\export1.lf/file1b.txt A b:\export1.lf/file2.txt A b:\export1.lf/file3.txt A b:\export1.lf/file4.txt A b:\export1.lf/file5.txt A b:\export1.lf/folder1 A b:\export1.lf/folder1/file7.txt A b:\export1.lf/folder1/folder2 A b:\export1.lf/folder1/folder2/file8.txt A b:\export1.lf/folder3 Info: PYSVN CMD export --native-eol CRLF file:///b:/repos/trunk/test b:\export1.crlf A b:\export1.crlf A b:\export1.crlf/file1.txt A b:\export1.crlf/file1b.txt A b:\export1.crlf/file2.txt A b:\export1.crlf/file3.txt A b:\export1.crlf/file4.txt A b:\export1.crlf/file5.txt A b:\export1.crlf/folder1 A b:\export1.crlf/folder1/file7.txt A b:\export1.crlf/folder1/folder2 A b:\export1.crlf/folder1/folder2/file8.txt A b:\export1.crlf/folder3 Info: CMD dir /s /b b:\export1.native b:\export1.native\file1.txt b:\export1.native\file1b.txt b:\export1.native\file2.txt b:\export1.native\file3.txt b:\export1.native\file4.txt b:\export1.native\file5.txt b:\export1.native\folder1 b:\export1.native\folder3 b:\export1.native\folder1\file7.txt b:\export1.native\folder1\folder2 b:\export1.native\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.cr b:\export1.cr\file1.txt b:\export1.cr\file1b.txt b:\export1.cr\file2.txt b:\export1.cr\file3.txt b:\export1.cr\file4.txt b:\export1.cr\file5.txt b:\export1.cr\folder1 b:\export1.cr\folder3 b:\export1.cr\folder1\file7.txt b:\export1.cr\folder1\folder2 b:\export1.cr\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.lf b:\export1.lf\file1.txt b:\export1.lf\file1b.txt b:\export1.lf\file2.txt b:\export1.lf\file3.txt b:\export1.lf\file4.txt b:\export1.lf\file5.txt b:\export1.lf\folder1 b:\export1.lf\folder3 b:\export1.lf\folder1\file7.txt b:\export1.lf\folder1\folder2 b:\export1.lf\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.crlf b:\export1.crlf\file1.txt b:\export1.crlf\file1b.txt b:\export1.crlf\file2.txt b:\export1.crlf\file3.txt b:\export1.crlf\file4.txt b:\export1.crlf\file5.txt b:\export1.crlf\folder1 b:\export1.crlf\folder3 b:\export1.crlf\folder1\file7.txt b:\export1.crlf\folder1\folder2 b:\export1.crlf\folder1\folder2\file8.txt Info: Test - import Info: Test - info Info: PYSVN CMD info b:\wc2\test Path: b:\wc2\test Name: . Url: file:///B:/repos/trunk/test Repository UUID: 00e68b39-61ed-714e-973f-d90437a44df9 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 19-Nov-2012 19:13:29 Info: PYSVN CMD info b:\wc2\test\file1.txt Path: b:\wc2\test\file1.txt Name: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Repository UUID: 00e68b39-61ed-714e-973f-d90437a44df9 Revision: 4 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 19-Nov-2012 19:13:29 Text Last Updated: 19-Nov-2012 19:13:29 Checksum: cb0b37e264ebcc467e9f37a069e034d7 Info: Test - log Info: PYSVN CMD log b:\wc2 ------------------------------------------------------------ rev 7: barry | 19-Nov-2012 19:13:30 | 1 lines copy test ------------------------------------------------------------ rev 4: barry | 19-Nov-2012 19:13:29 | 1 lines commit modified file ------------------------------------------------------------ rev 3: barry | 19-Nov-2012 19:13:28 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 19-Nov-2012 19:13:27 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 19-Nov-2012 19:13:27 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Test - ls Info: PYSVN CMD ls file:///b:/repos/trunk/test file:///B:/repos/trunk/test/file1.txt file:///B:/repos/trunk/test/file1b.txt file:///B:/repos/trunk/test/file2.txt file:///B:/repos/trunk/test/file3.txt file:///B:/repos/trunk/test/file4.txt file:///B:/repos/trunk/test/file5.txt file:///B:/repos/trunk/test/folder1 file:///B:/repos/trunk/test/folder3 Info: PYSVN CMD ls -v file:///b:/repos/trunk/test 4 barry 25 19-Nov-2012 19:13:29 file:///B:/repos/trunk/test/file1.txt 7 barry 23 19-Nov-2012 19:13:30 file:///B:/repos/trunk/test/file1b.txt 3 barry 17 19-Nov-2012 19:13:28 file:///B:/repos/trunk/test/file2.txt 3 barry 17 19-Nov-2012 19:13:28 file:///B:/repos/trunk/test/file3.txt 3 barry 17 19-Nov-2012 19:13:28 file:///B:/repos/trunk/test/file4.txt 3 barry 17 19-Nov-2012 19:13:28 file:///B:/repos/trunk/test/file5.txt 3 barry 0 19-Nov-2012 19:13:28 file:///B:/repos/trunk/test/folder1 3 barry 0 19-Nov-2012 19:13:28 file:///B:/repos/trunk/test/folder3 Info: PYSVN CMD ls b:\wc2\test b:/wc2/test/file1.txt b:/wc2/test/file1b.txt b:/wc2/test/file2.txt b:/wc2/test/file3.txt b:/wc2/test/file4.txt b:/wc2/test/file5.txt b:/wc2/test/folder1 b:/wc2/test/folder3 Info: PYSVN CMD ls -v b:\wc2\test 4 barry 25 19-Nov-2012 19:13:29 b:/wc2/test/file1.txt 7 barry 23 19-Nov-2012 19:13:30 b:/wc2/test/file1b.txt 3 barry 17 19-Nov-2012 19:13:28 b:/wc2/test/file2.txt 3 barry 17 19-Nov-2012 19:13:28 b:/wc2/test/file3.txt 3 barry 17 19-Nov-2012 19:13:28 b:/wc2/test/file4.txt 3 barry 17 19-Nov-2012 19:13:28 b:/wc2/test/file5.txt 3 barry 0 19-Nov-2012 19:13:28 b:/wc2/test/folder1 3 barry 0 19-Nov-2012 19:13:28 b:/wc2/test/folder3 Info: Test - merge - see below Info: Test - mkdir - done above Info: Test - move Info: Create File msg.tmp - move url test Info: PYSVN CMD move file:///b:/repos/trunk/test/file2.txt file:///b:/repos/trunk/test/file2b.txt Log message --- ------- Info: PYSVN CMD move b:\wc2\test\file3.txt b:\wc2\test\file3b.txt A b:/wc2/test/file3b.txt D b:/wc2/test/file3.txt Info: PYSVN CMD checkin b:\wc2 -m "move wc test" A B:/wc2/test/file3b.txt D B:/wc2/test/file3.txt M B:/wc2/test/file1b.txt Revision 9 Info: Test - status Info: Append File b:\wc1\test\file4.txt - file 4 is changing Info: PYSVN CMD checkin b:\wc1 -m "change wc1 for status -u to detect" M B:/wc1/test/file4.txt Revision 10 Info: PYSVN CMD status b:\wc2 Info: PYSVN CMD status --verbose b:\wc2 4 4 barry b:\wc2 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt 4 3 barry b:\wc2\test\file2.txt 9 9 barry b:\wc2\test\file3b.txt 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt 4 3 barry b:\wc2\test\folder1 4 3 barry b:\wc2\test\folder1\file7.txt 4 3 barry b:\wc2\test\folder1\folder2 4 3 barry b:\wc2\test\folder1\folder2\file8.txt 4 3 barry b:\wc2\test\folder3 Info: PYSVN CMD status --show-updates b:\wc2 M b:\wc2\test D b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt M b:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry b:\wc2 M 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt D 4 3 barry b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt 9 9 barry b:\wc2\test\file3b.txt M 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt 4 3 barry b:\wc2\test\folder1 4 3 barry b:\wc2\test\folder1\file7.txt 4 3 barry b:\wc2\test\folder1\folder2 4 3 barry b:\wc2\test\folder1\folder2\file8.txt 4 3 barry b:\wc2\test\folder3 Info: PYSVN CMD update A file1b.txt A file2b.txt A file3b.txt D file2.txt D file3.txt Updated to revision 10 Info: PYSVN CMD status --show-updates b:\wc2 M b:\wc2\test D b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt M b:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry b:\wc2 M 4 4 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 9 9 barry b:\wc2\test\file1b.txt D 4 3 barry b:\wc2\test\file2.txt A b:\wc2\test\file2b.txt 9 9 barry b:\wc2\test\file3b.txt M 4 3 barry b:\wc2\test\file4.txt 4 3 barry b:\wc2\test\file5.txt 4 3 barry b:\wc2\test\folder1 4 3 barry b:\wc2\test\folder1\file7.txt 4 3 barry b:\wc2\test\folder1\folder2 4 3 barry b:\wc2\test\folder1\folder2\file8.txt 4 3 barry b:\wc2\test\folder3 Info: PYSVN CMD checkin b:\wc2 -m "prop change" Nothing to commit Info: Test - propdel Info: CMD cd /d b:\wc2\test Info: PYSVN CMD propset test:prop1 del_me file4.txt property_added file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: PYSVN CMD propdel test:prop1 file4.txt property_deleted file4.txt Info: PYSVN CMD proplist -v file4.txt Info: Test - propget Info: PYSVN CMD propget svn:eol-style file4.txt Info: Test - proplist - see above Info: Test - propset Info: CMD cd /d b:\wc2\test Info: PYSVN CMD proplist -v file4.txt Info: PYSVN CMD propset svn:eol-style native file4.txt property_added file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Test - remove Info: CMD cd /d b:\wc2\test Info: PYSVN CMD remove file5.txt D file5.txt Info: PYSVN CMD status M file4.txt D file5.txt Info: Test - resolved Info: Append File b:\wc1\test\file4.txt - conflict in file4 yes Info: Append File b:\wc2\test\file4.txt - conflict in file4 no Info: PYSVN CMD checkin b:\wc1\test -m "make a conflict part 1" M B:/wc1/test/file4.txt Revision 11 Info: PYSVN CMD update b:\wc2\test callback_conflict_resolver action: base_file: b:\wc2\test\.svn\text-base\file4.txt.svn-base is_binary: False kind: merged_file: b:\wc2\test\.svn\tmp\file4.txt.tmp mime_type: None my_file: b:\wc2\test\.svn\tmp\svn-114E7DDD node_kind: operation: path: b:/wc2/test/file4.txt property_name: None reason: src_left_version: None src_right_version: None their_file: b:\wc2\test\.svn\tmp\text-base\file4.txt.svn-base A b:/wc2/test/file2b.txt D b:/wc2/test/file2.txt U b:/wc2 U b:/wc2/test U b:/wc2/test/file4.txt Updated to revision 11 Info: PYSVN CMD status CM file4.txt ? file4.txt.mine ? file4.txt.r11 ? file4.txt.r4 D file5.txt Info: CMD copy b:\wc2\test\file4.txt.mine b:\wc2\test\file4.txt 1 file(s) copied. Info: PYSVN CMD resolved b:\wc2\test\file4.txt R b:/wc2/test/file4.txt Info: PYSVN CMD checkin b:\wc2\test\file4.txt -m "resolve a confict part 2" M B:/wc2/test/file4.txt Revision 12 Info: Test - revert Info: PYSVN CMD revert file5.txt R file5.txt Info: PYSVN CMD status Info: Test - revproplist Info: PYSVN CMD revproplist file:///b:/repos/trunk Revision: 12 svn:author: barry svn:date: 2012-11-19T19:13:35.239459Z svn:log: resolve a confict part 2 Info: Test - revpropget Info: PYSVN CMD revpropget svn:log file:///b:/repos/trunk Revision: 12 svn:log: resolve a confict part 2 Info: PYSVN CMD revpropget no_such_prop file:///b:/repos/trunk Revision: 12 no_such_prop: None Info: Test - revpropset Info: PYSVN CMD revpropset svn:log "Hello world" file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - revpropdel Info: PYSVN CMD revpropdel svn:log file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - status - see above Info: Test - relocate Info: CMD mkdir b:\root Info: CMD move b:\repos b:\root 1 dir(s) moved. Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///B:/repos/trunk Repository UUID: 00e68b39-61ed-714e-973f-d90437a44df9 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 19-Nov-2012 19:13:27 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc1 Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 00e68b39-61ed-714e-973f-d90437a44df9 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 19-Nov-2012 19:13:27 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/repos/trunk Repository UUID: 00e68b39-61ed-714e-973f-d90437a44df9 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 19-Nov-2012 19:13:29 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc2 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 00e68b39-61ed-714e-973f-d90437a44df9 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 19-Nov-2012 19:13:29 Info: Test - switch Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 00e68b39-61ed-714e-973f-d90437a44df9 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 19-Nov-2012 19:13:29 Info: PYSVN CMD switch b:\wc2 file:///b:/root/repos/tags/version1 A b:/wc2/test/file2.txt A b:/wc2/test/file3.txt D b:/wc2/test/file1b.txt D b:/wc2/test/file2b.txt D b:/wc2/test/file3b.txt U b:/wc2 U b:/wc2/test U b:/wc2/test/file4.txt Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/tags/version1 Repository UUID: 00e68b39-61ed-714e-973f-d90437a44df9 Revision: 12 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 19-Nov-2012 19:13:30 Info: Test - update - see above Info: Test - Info: Testing - merge Info: PYSVN CMD checkout file:///b:/root/repos/trunk b:\wc3 A b:/wc3/test A b:/wc3/test/file1.txt A b:/wc3/test/file1b.txt A b:/wc3/test/file2b.txt A b:/wc3/test/file3b.txt A b:/wc3/test/file4.txt A b:/wc3/test/file5.txt A b:/wc3/test/folder1 A b:/wc3/test/folder1/file7.txt A b:/wc3/test/folder1/folder2 A b:/wc3/test/folder1/folder2/file8.txt A b:/wc3/test/folder3 U b:/wc3 Checked out revision 12 Info: CMD cd b:\wc3\test Info: Create File file-merge-1.txt - test add file merge 1 Info: Create File file-merge-2.txt - test add file merge 2 Info: PYSVN CMD add file-merge-1.txt A file-merge-1.txt Info: PYSVN CMD add file-merge-2.txt A file-merge-2.txt Info: PYSVN CMD commit -m "add test merge files" . A b:/wc3/test/file-merge-1.txt A b:/wc3/test/file-merge-2.txt Revision 13 Info: Create File msg.tmp - make a branch Info: PYSVN CMD copy file:///b:/root/repos/trunk/test file:///b:/root/repos/trunk/test-branch Log message --- ------- Info: PYSVN CMD update b:\wc3 A b:/wc3/test-branch A b:/wc3/test-branch/file-merge-1.txt A b:/wc3/test-branch/file-merge-2.txt A b:/wc3/test-branch/file1.txt A b:/wc3/test-branch/file1b.txt A b:/wc3/test-branch/file2b.txt A b:/wc3/test-branch/file3b.txt A b:/wc3/test-branch/file4.txt A b:/wc3/test-branch/file5.txt A b:/wc3/test-branch/folder1 A b:/wc3/test-branch/folder1/file7.txt A b:/wc3/test-branch/folder1/folder2 A b:/wc3/test-branch/folder1/folder2/file8.txt A b:/wc3/test-branch/folder3 U b:/wc3 U b:/wc3/test Updated to revision 14 Info: Create File file-merge-3.txt - test add file merge 3 Info: PYSVN CMD add file-merge-3.txt A file-merge-3.txt Info: PYSVN CMD rm file-merge-1.txt D file-merge-1.txt Info: Append File file-merge-2.txt - modify merge 2 Info: PYSVN CMD commit -m "change test merge files" . A b:/wc3/test/file-merge-3.txt D b:/wc3/test/file-merge-1.txt M b:/wc3/test/file-merge-2.txt Revision 15 Info: PYSVN CMD merge --dry-run --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch A b:/wc3/test-branch/file-merge-3.txt D b:/wc3/test-branch/file-merge-1.txt U b:/wc3/test-branch U b:/wc3/test-branch/file-merge-2.txt merge_begin b:/wc3/test-branch merge_begin b:/wc3/test-branch/file-merge-2.txt merge_completed b:/wc3/test-branch Info: PYSVN CMD merge --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch merge_completed b:/wc3/test-branch Info: PYSVN CMD status b:\wc3\test-branch M b:\wc3\test-branch D b:\wc3\test-branch\file-merge-1.txt MM b:\wc3\test-branch\file-merge-2.txt A + b:\wc3\test-branch\file-merge-3.txt M b:\wc3\test-branch\file1.txt M b:\wc3\test-branch\file1b.txt M b:\wc3\test-branch\file2b.txt M b:\wc3\test-branch\file3b.txt M b:\wc3\test-branch\file4.txt M b:\wc3\test-branch\file5.txt Info: PYSVN CMD diff b:\wc3\test-branch Property changes on: b:\wc3\test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r15* Property changes on: b:\wc3\test-branch\file1b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1b.txt:r15 Property changes on: b:\wc3\test-branch\file2b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file2b.txt:r15 Property changes on: b:\wc3\test-branch\file4.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file4.txt:r15 Property changes on: b:\wc3\test-branch\file3b.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file3b.txt:r15 Property changes on: b:\wc3\test-branch\file5.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file5.txt:r15 Index: b:/wc3/test-branch/file-merge-1.txt =================================================================== --- b:/wc3/test-branch/file-merge-1.txt (revision 14) +++ b:/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: b:/wc3/test-branch/file-merge-2.txt =================================================================== --- b:/wc3/test-branch/file-merge-2.txt (revision 14) +++ b:/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Property changes on: b:\wc3\test-branch\file-merge-2.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-2.txt:r15 Property changes on: b:\wc3\test-branch\file-merge-3.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-3.txt:r15 Property changes on: b:\wc3\test-branch\file1.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file1.txt:r15 Info: CMD c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_01_set_get_tests.py b:\configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Test - end pysvn-1.7.8/Tests/test-01.win32.known_good-py3-svn1.7.log000644 000771 000771 00000063271 12177165073 023105 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry Info: PYSVN CMD c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.01.00 --config-dir b:\configdir Info: CMD mkdir testroot-01 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-01 Info: CMD cd /d b:\ Info: CMD svnadmin create b:\repos Info: Test - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-01 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-01 add test" Info: Test - ls Info: PYSVN CMD ls file:///b:/repos -v -R 2 barry 0 03-Aug-2013 12:28:18 file:///B:/repos/trunk 2 barry 0 03-Aug-2013 12:28:18 file:///B:/repos/trunk/test Info: Test - checkout Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD dir b:\wc1 /s /b /a-h b:\wc1\test b:\wc1\.svn\entries b:\wc1\.svn\format b:\wc1\.svn\pristine b:\wc1\.svn\tmp b:\wc1\.svn\wc.db Info: CMD cd /d b:\wc1\test Info: Test - add Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: Create File file3.txt - test add file 3 Info: Create File file4.txt - test add file 4 Info: Create File file5.txt - test add file 5 Info: CMD mkdir folder1 Info: Create File folder1\file7.txt - test add file 7 Info: CMD mkdir folder1\folder2 Info: Create File folder1\folder2\file8.txt - test add file 8 Info: CMD mkdir folder3 Info: Create File folder3\file9.txt - test add file 9 Info: CMD mkdir folder3\folder4 Info: Create File folder3\folder4\file10.txt - test add file 10 Info: PYSVN CMD add file1.txt A B:/wc1/test/file1.txt Info: PYSVN CMD add file2.txt A B:/wc1/test/file2.txt Info: PYSVN CMD add file3.txt A B:/wc1/test/file3.txt Info: PYSVN CMD add file4.txt A B:/wc1/test/file4.txt Info: PYSVN CMD add --force file5.txt A B:/wc1/test/file5.txt Info: PYSVN CMD add folder1 A B:/wc1/test/folder1 A B:/wc1/test/folder1/file7.txt A B:/wc1/test/folder1/folder2 A B:/wc1/test/folder1/folder2/file8.txt Info: PYSVN CMD add --non-recursive folder3 A B:/wc1/test/folder3 Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file1.txt A B:/wc1/test/file2.txt A B:/wc1/test/file3.txt A B:/wc1/test/file4.txt A B:/wc1/test/file5.txt A B:/wc1/test/folder1 A B:/wc1/test/folder1/file7.txt A B:/wc1/test/folder1/folder2 A B:/wc1/test/folder1/folder2/file8.txt A B:/wc1/test/folder3 Revision 3 Info: Test - update - get a new wc that will update Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A B:/wc2/test A B:/wc2/test/file1.txt A B:/wc2/test/file2.txt A B:/wc2/test/file3.txt A B:/wc2/test/file4.txt A B:/wc2/test/file5.txt A B:/wc2/test/folder1 A B:/wc2/test/folder1/file7.txt A B:/wc2/test/folder1/folder2 A B:/wc2/test/folder1/folder2/file8.txt A B:/wc2/test/folder3 U B:/wc2 update_started B:/wc2 Checked out revision 3 Info: Test - - checkin a mod from wc1 Info: Append File b:\wc1\test\file1.txt - line 2 Info: PYSVN CMD checkin -m "commit modified file" M B:/wc1/test/file1.txt Revision 4 Info: PYSVN CMD checkin -m "commit modified file" Nothing to commit Info: Test - update Info: PYSVN CMD update b:\wc2 U B:/wc2 U B:/wc2/test U B:/wc2/test/file1.txt update_started B:/wc2 Updated to revision 4 Info: Test - the rest in lexical order Info: Test - annotate Info: PYSVN CMD annotate b:\wc2\test\file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2013-08-03T11:28:19.903853Z | test add file 1 1| r4 | barry | 2013-08-03T11:28:20.449580Z | line 2 Info: Test - cat Info: PYSVN CMD cat -r head file:///b:/repos/trunk/test/file1.txt test add file 1 line 2 Info: Test - cleanup Info: Test - copy Info: PYSVN CMD mkdir file:///b:/repos/tags -m "test-01 add tags" Info: Create File msg.tmp - tag the trunk Info: PYSVN CMD copy file:///b:/repos/trunk file:///b:/repos/tags/version1 Log message --- ------- Info: PYSVN CMD ls -v file:///b:/repos/tags 6 barry 0 03-Aug-2013 12:28:21 file:///B:/repos/tags/version1 Info: PYSVN CMD copy b:\wc2\test\file1.txt b:\wc2\test\file1b.txt A B:/wc2/test/file1b.txt Info: PYSVN CMD propset svn:eol-style native b:\wc2\test\file1b.txt property_added B:/wc2/test/file1b.txt Info: PYSVN CMD checkin b:\wc2 -m "copy test" A B:/wc2/test/file1b.txt Revision 7 Info: Test - diff Info: Append File b:\wc2\test\file1b.txt - new line Info: PYSVN CMD diff b:\wc2 Index: B:/wc2/test/file1b.txt =================================================================== --- B:/wc2/test/file1b.txt (revision 7) +++ B:/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Test - export Info: PYSVN CMD export file:///b:/repos/trunk/test b:\export1.native A b:\export1.native A b:\export1.native/file1.txt A b:\export1.native/file1b.txt A b:\export1.native/file2.txt A b:\export1.native/file3.txt A b:\export1.native/file4.txt A b:\export1.native/file5.txt A b:\export1.native/folder1 A b:\export1.native/folder1/file7.txt A b:\export1.native/folder1/folder2 A b:\export1.native/folder1/folder2/file8.txt A b:\export1.native/folder3 Info: PYSVN CMD export --native-eol CR file:///b:/repos/trunk/test b:\export1.cr A b:\export1.cr A b:\export1.cr/file1.txt A b:\export1.cr/file1b.txt A b:\export1.cr/file2.txt A b:\export1.cr/file3.txt A b:\export1.cr/file4.txt A b:\export1.cr/file5.txt A b:\export1.cr/folder1 A b:\export1.cr/folder1/file7.txt A b:\export1.cr/folder1/folder2 A b:\export1.cr/folder1/folder2/file8.txt A b:\export1.cr/folder3 Info: PYSVN CMD export --native-eol LF file:///b:/repos/trunk/test b:\export1.lf A b:\export1.lf A b:\export1.lf/file1.txt A b:\export1.lf/file1b.txt A b:\export1.lf/file2.txt A b:\export1.lf/file3.txt A b:\export1.lf/file4.txt A b:\export1.lf/file5.txt A b:\export1.lf/folder1 A b:\export1.lf/folder1/file7.txt A b:\export1.lf/folder1/folder2 A b:\export1.lf/folder1/folder2/file8.txt A b:\export1.lf/folder3 Info: PYSVN CMD export --native-eol CRLF file:///b:/repos/trunk/test b:\export1.crlf A b:\export1.crlf A b:\export1.crlf/file1.txt A b:\export1.crlf/file1b.txt A b:\export1.crlf/file2.txt A b:\export1.crlf/file3.txt A b:\export1.crlf/file4.txt A b:\export1.crlf/file5.txt A b:\export1.crlf/folder1 A b:\export1.crlf/folder1/file7.txt A b:\export1.crlf/folder1/folder2 A b:\export1.crlf/folder1/folder2/file8.txt A b:\export1.crlf/folder3 Info: CMD dir /s /b b:\export1.native b:\export1.native\file1.txt b:\export1.native\file1b.txt b:\export1.native\file2.txt b:\export1.native\file3.txt b:\export1.native\file4.txt b:\export1.native\file5.txt b:\export1.native\folder1 b:\export1.native\folder3 b:\export1.native\folder1\file7.txt b:\export1.native\folder1\folder2 b:\export1.native\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.cr b:\export1.cr\file1.txt b:\export1.cr\file1b.txt b:\export1.cr\file2.txt b:\export1.cr\file3.txt b:\export1.cr\file4.txt b:\export1.cr\file5.txt b:\export1.cr\folder1 b:\export1.cr\folder3 b:\export1.cr\folder1\file7.txt b:\export1.cr\folder1\folder2 b:\export1.cr\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.lf b:\export1.lf\file1.txt b:\export1.lf\file1b.txt b:\export1.lf\file2.txt b:\export1.lf\file3.txt b:\export1.lf\file4.txt b:\export1.lf\file5.txt b:\export1.lf\folder1 b:\export1.lf\folder3 b:\export1.lf\folder1\file7.txt b:\export1.lf\folder1\folder2 b:\export1.lf\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.crlf b:\export1.crlf\file1.txt b:\export1.crlf\file1b.txt b:\export1.crlf\file2.txt b:\export1.crlf\file3.txt b:\export1.crlf\file4.txt b:\export1.crlf\file5.txt b:\export1.crlf\folder1 b:\export1.crlf\folder3 b:\export1.crlf\folder1\file7.txt b:\export1.crlf\folder1\folder2 b:\export1.crlf\folder1\folder2\file8.txt Info: Test - import Info: Test - info Info: PYSVN CMD info b:\wc2\test Path: b:\wc2\test Name: . Url: file:///B:/repos/trunk/test Repository UUID: 7601caab-e0e9-2f44-bdfb-7c4596ad2e37 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 03-Aug-2013 12:28:20 Info: PYSVN CMD info b:\wc2\test\file1.txt Path: b:\wc2\test\file1.txt Name: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Repository UUID: 7601caab-e0e9-2f44-bdfb-7c4596ad2e37 Revision: 4 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 03-Aug-2013 12:28:20 Text Last Updated: 03-Aug-2013 12:28:20 Checksum: cb0b37e264ebcc467e9f37a069e034d7 Info: Test - log Info: PYSVN CMD log b:\wc2 ------------------------------------------------------------ rev 7: barry | 03-Aug-2013 12:28:21 | 1 lines copy test ------------------------------------------------------------ rev 4: barry | 03-Aug-2013 12:28:20 | 1 lines commit modified file ------------------------------------------------------------ rev 3: barry | 03-Aug-2013 12:28:19 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 03-Aug-2013 12:28:18 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 03-Aug-2013 12:28:18 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Test - ls Info: PYSVN CMD ls file:///b:/repos/trunk/test file:///B:/repos/trunk/test/file1.txt file:///B:/repos/trunk/test/file1b.txt file:///B:/repos/trunk/test/file2.txt file:///B:/repos/trunk/test/file3.txt file:///B:/repos/trunk/test/file4.txt file:///B:/repos/trunk/test/file5.txt file:///B:/repos/trunk/test/folder1 file:///B:/repos/trunk/test/folder3 Info: PYSVN CMD ls -v file:///b:/repos/trunk/test 4 barry 25 03-Aug-2013 12:28:20 file:///B:/repos/trunk/test/file1.txt 7 barry 23 03-Aug-2013 12:28:21 file:///B:/repos/trunk/test/file1b.txt 3 barry 17 03-Aug-2013 12:28:19 file:///B:/repos/trunk/test/file2.txt 3 barry 17 03-Aug-2013 12:28:19 file:///B:/repos/trunk/test/file3.txt 3 barry 17 03-Aug-2013 12:28:19 file:///B:/repos/trunk/test/file4.txt 3 barry 17 03-Aug-2013 12:28:19 file:///B:/repos/trunk/test/file5.txt 3 barry 0 03-Aug-2013 12:28:19 file:///B:/repos/trunk/test/folder1 3 barry 0 03-Aug-2013 12:28:19 file:///B:/repos/trunk/test/folder3 Info: PYSVN CMD ls b:\wc2\test B:/wc2/test/file1.txt B:/wc2/test/file1b.txt B:/wc2/test/file2.txt B:/wc2/test/file3.txt B:/wc2/test/file4.txt B:/wc2/test/file5.txt B:/wc2/test/folder1 B:/wc2/test/folder3 Info: PYSVN CMD ls -v b:\wc2\test 4 barry 25 03-Aug-2013 12:28:20 B:/wc2/test/file1.txt 7 barry 23 03-Aug-2013 12:28:21 B:/wc2/test/file1b.txt 3 barry 17 03-Aug-2013 12:28:19 B:/wc2/test/file2.txt 3 barry 17 03-Aug-2013 12:28:19 B:/wc2/test/file3.txt 3 barry 17 03-Aug-2013 12:28:19 B:/wc2/test/file4.txt 3 barry 17 03-Aug-2013 12:28:19 B:/wc2/test/file5.txt 3 barry 0 03-Aug-2013 12:28:19 B:/wc2/test/folder1 3 barry 0 03-Aug-2013 12:28:19 B:/wc2/test/folder3 Info: Test - merge - see below Info: Test - mkdir - done above Info: Test - move Info: Create File msg.tmp - move url test Info: PYSVN CMD move file:///b:/repos/trunk/test/file2.txt file:///b:/repos/trunk/test/file2b.txt Log message --- ------- Info: PYSVN CMD move b:\wc2\test\file3.txt b:\wc2\test\file3b.txt A B:/wc2/test/file3b.txt D B:/wc2/test/file3.txt Info: PYSVN CMD checkin b:\wc2 -m "move wc test" A B:/wc2/test/file3b.txt D B:/wc2/test/file3.txt M B:/wc2/test/file1b.txt Revision 9 Info: Test - status Info: Append File b:\wc1\test\file4.txt - file 4 is changing Info: PYSVN CMD checkin b:\wc1 -m "change wc1 for status -u to detect" M B:/wc1/test/file4.txt Revision 10 Info: PYSVN CMD status b:\wc2 Info: PYSVN CMD status --verbose b:\wc2 4 4 barry B:\wc2 4 4 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 9 9 barry B:\wc2\test\file1b.txt 4 3 barry B:\wc2\test\file2.txt 9 9 barry B:\wc2\test\file3b.txt 4 3 barry B:\wc2\test\file4.txt 4 3 barry B:\wc2\test\file5.txt 4 3 barry B:\wc2\test\folder1 4 3 barry B:\wc2\test\folder1\file7.txt 4 3 barry B:\wc2\test\folder1\folder2 4 3 barry B:\wc2\test\folder1\folder2\file8.txt 4 3 barry B:\wc2\test\folder3 Info: PYSVN CMD status --show-updates b:\wc2 M B:\wc2\test D B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt M B:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry B:\wc2 M 4 4 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 9 9 barry B:\wc2\test\file1b.txt D 4 3 barry B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt 9 9 barry B:\wc2\test\file3b.txt M 4 3 barry B:\wc2\test\file4.txt 4 3 barry B:\wc2\test\file5.txt 4 3 barry B:\wc2\test\folder1 4 3 barry B:\wc2\test\folder1\file7.txt 4 3 barry B:\wc2\test\folder1\folder2 4 3 barry B:\wc2\test\folder1\folder2\file8.txt 4 3 barry B:\wc2\test\folder3 Info: PYSVN CMD update A B:/wc1/test/file1b.txt A B:/wc1/test/file2b.txt A B:/wc1/test/file3b.txt D B:/wc1/test/file2.txt D B:/wc1/test/file3.txt U B:/wc1 U B:/wc1/test update_started B:/wc1/test Updated to revision 10 Info: PYSVN CMD status --show-updates b:\wc2 M B:\wc2\test D B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt M B:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry B:\wc2 M 4 4 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 9 9 barry B:\wc2\test\file1b.txt D 4 3 barry B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt 9 9 barry B:\wc2\test\file3b.txt M 4 3 barry B:\wc2\test\file4.txt 4 3 barry B:\wc2\test\file5.txt 4 3 barry B:\wc2\test\folder1 4 3 barry B:\wc2\test\folder1\file7.txt 4 3 barry B:\wc2\test\folder1\folder2 4 3 barry B:\wc2\test\folder1\folder2\file8.txt 4 3 barry B:\wc2\test\folder3 Info: PYSVN CMD checkin b:\wc2 -m "prop change" Nothing to commit Info: Test - propdel Info: CMD cd /d b:\wc2\test Info: PYSVN CMD propset test:prop1 del_me file4.txt property_added B:/wc2/test/file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: PYSVN CMD propdel test:prop1 file4.txt property_deleted B:/wc2/test/file4.txt Info: PYSVN CMD proplist -v file4.txt Info: Test - propget Info: PYSVN CMD propget svn:eol-style file4.txt Info: Test - proplist - see above Info: Test - propset Info: CMD cd /d b:\wc2\test Info: PYSVN CMD proplist -v file4.txt Info: PYSVN CMD propset svn:eol-style native file4.txt property_added B:/wc2/test/file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Test - remove Info: CMD cd /d b:\wc2\test Info: PYSVN CMD remove file5.txt D B:/wc2/test/file5.txt Info: PYSVN CMD status MM file4.txt D file5.txt Info: Test - resolved Info: Append File b:\wc1\test\file4.txt - conflict in file4 yes Info: Append File b:\wc2\test\file4.txt - conflict in file4 no Info: PYSVN CMD checkin b:\wc1\test -m "make a conflict part 1" M B:/wc1/test/file4.txt Revision 11 Info: PYSVN CMD update b:\wc2\test callback_conflict_resolver action: base_file: B:\wc2\.svn\pristine\4e\4e86be31cda02c6a3fb50fe49d570555a9c28d66.svn-base is_binary: False kind: merged_file: B:\wc2\.svn\tmp\file4.txt.tmp mime_type: None my_file: B:\wc2\.svn\tmp\svn-1585378D node_kind: operation: path: B:/wc2/test/file4.txt property_name: None reason: src_left_version: None src_right_version: None their_file: B:\wc2\.svn\pristine\68\68429c38aebed8d3491b3f4a50041ad273e78cf7.svn-base A B:/wc2/test/file2b.txt D B:/wc2/test/file2.txt U B:/wc2 U B:/wc2/test U B:/wc2/test/file4.txt update_started B:/wc2/test Updated to revision 11 Info: PYSVN CMD status CM file4.txt ? file4.txt.mine ? file4.txt.r11 ? file4.txt.r4 D file5.txt Info: CMD copy b:\wc2\test\file4.txt.mine b:\wc2\test\file4.txt 1 file(s) copied. Info: PYSVN CMD resolved b:\wc2\test\file4.txt R B:/wc2/test/file4.txt Info: PYSVN CMD checkin b:\wc2\test\file4.txt -m "resolve a confict part 2" M B:/wc2/test/file4.txt Revision 12 Info: Test - revert Info: PYSVN CMD revert file5.txt R B:/wc2/test/file5.txt Info: PYSVN CMD status Info: Test - revproplist Info: PYSVN CMD revproplist file:///b:/repos/trunk Revision: 12 svn:author: barry svn:date: 2013-08-03T11:28:26.920343Z svn:log: resolve a confict part 2 Info: Test - revpropget Info: PYSVN CMD revpropget svn:log file:///b:/repos/trunk Revision: 12 svn:log: resolve a confict part 2 Info: PYSVN CMD revpropget no_such_prop file:///b:/repos/trunk Revision: 12 no_such_prop: None Info: Test - revpropset Info: PYSVN CMD revpropset svn:log "Hello world" file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - revpropdel Info: PYSVN CMD revpropdel svn:log file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - status - see above Info: Test - relocate Info: CMD mkdir b:\root Info: CMD move b:\repos b:\root 1 dir(s) moved. Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///B:/repos/trunk Repository UUID: 7601caab-e0e9-2f44-bdfb-7c4596ad2e37 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 03-Aug-2013 12:28:18 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc1 Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 7601caab-e0e9-2f44-bdfb-7c4596ad2e37 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 03-Aug-2013 12:28:18 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/repos/trunk Repository UUID: 7601caab-e0e9-2f44-bdfb-7c4596ad2e37 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 03-Aug-2013 12:28:20 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc2 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 7601caab-e0e9-2f44-bdfb-7c4596ad2e37 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 03-Aug-2013 12:28:20 Info: Test - switch Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/trunk Repository UUID: 7601caab-e0e9-2f44-bdfb-7c4596ad2e37 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 03-Aug-2013 12:28:20 Info: PYSVN CMD switch b:\wc2 file:///b:/root/repos/tags/version1 A B:/wc2/test/file2.txt A B:/wc2/test/file3.txt D B:/wc2/test/file1b.txt D B:/wc2/test/file2b.txt D B:/wc2/test/file3b.txt U B:/wc2 U B:/wc2/test U B:/wc2/test/file4.txt Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/tags/version1 Repository UUID: 7601caab-e0e9-2f44-bdfb-7c4596ad2e37 Revision: 12 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 03-Aug-2013 12:28:21 Info: Test - update - see above Info: Test - Info: Testing - merge Info: PYSVN CMD checkout file:///b:/root/repos/trunk b:\wc3 A B:/wc3/test A B:/wc3/test/file1.txt A B:/wc3/test/file1b.txt A B:/wc3/test/file2b.txt A B:/wc3/test/file3b.txt A B:/wc3/test/file4.txt A B:/wc3/test/file5.txt A B:/wc3/test/folder1 A B:/wc3/test/folder1/file7.txt A B:/wc3/test/folder1/folder2 A B:/wc3/test/folder1/folder2/file8.txt A B:/wc3/test/folder3 U B:/wc3 update_started B:/wc3 Checked out revision 12 Info: CMD cd b:\wc3\test Info: Create File file-merge-1.txt - test add file merge 1 Info: Create File file-merge-2.txt - test add file merge 2 Info: PYSVN CMD add file-merge-1.txt A B:/wc3/test/file-merge-1.txt Info: PYSVN CMD add file-merge-2.txt A B:/wc3/test/file-merge-2.txt Info: PYSVN CMD commit -m "add test merge files" . A B:/wc3/test/file-merge-1.txt A B:/wc3/test/file-merge-2.txt Revision 13 Info: Create File msg.tmp - make a branch Info: PYSVN CMD copy file:///b:/root/repos/trunk/test file:///b:/root/repos/trunk/test-branch Log message --- ------- Info: PYSVN CMD update b:\wc3 A B:/wc3/test-branch A B:/wc3/test-branch/file-merge-1.txt A B:/wc3/test-branch/file-merge-2.txt A B:/wc3/test-branch/file1.txt A B:/wc3/test-branch/file1b.txt A B:/wc3/test-branch/file2b.txt A B:/wc3/test-branch/file3b.txt A B:/wc3/test-branch/file4.txt A B:/wc3/test-branch/file5.txt A B:/wc3/test-branch/folder1 A B:/wc3/test-branch/folder1/file7.txt A B:/wc3/test-branch/folder1/folder2 A B:/wc3/test-branch/folder1/folder2/file8.txt A B:/wc3/test-branch/folder3 U B:/wc3 update_started B:/wc3 Updated to revision 14 Info: Create File file-merge-3.txt - test add file merge 3 Info: PYSVN CMD add file-merge-3.txt A B:/wc3/test/file-merge-3.txt Info: PYSVN CMD rm file-merge-1.txt D B:/wc3/test/file-merge-1.txt Info: Append File file-merge-2.txt - modify merge 2 Info: PYSVN CMD commit -m "change test merge files" . A B:/wc3/test/file-merge-3.txt D B:/wc3/test/file-merge-1.txt M B:/wc3/test/file-merge-2.txt Revision 15 Info: PYSVN CMD merge --dry-run --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch A B:/wc3/test-branch/file-merge-3.txt D B:/wc3/test-branch/file-merge-1.txt U B:/wc3/test-branch U B:/wc3/test-branch/file-merge-2.txt merge_begin B:/wc3/test-branch merge_begin B:/wc3/test-branch/file-merge-2.txt merge_completed B:/wc3/test-branch merge_record_info B:/wc3/test-branch merge_record_info B:/wc3/test-branch/file-merge-2.txt merge_record_info B:/wc3/test-branch/file-merge-3.txt merge_record_info_begin B:/wc3/test-branch merge_record_info_begin B:/wc3/test-branch/file-merge-2.txt Info: PYSVN CMD merge --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch U B:/wc3/test-branch merge_completed B:/wc3/test-branch Info: PYSVN CMD status b:\wc3\test-branch M B:\wc3\test-branch D B:\wc3\test-branch\file-merge-1.txt MM B:\wc3\test-branch\file-merge-2.txt A + B:\wc3\test-branch\file-merge-3.txt Info: PYSVN CMD diff b:\wc3\test-branch Index: B:/wc3/test-branch =================================================================== --- B:/wc3/test-branch (revision 14) +++ B:/wc3/test-branch (working copy) Property changes on: B:/wc3/test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r15* Index: B:/wc3/test-branch/file-merge-1.txt =================================================================== --- B:/wc3/test-branch/file-merge-1.txt (revision 14) +++ B:/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: B:/wc3/test-branch/file-merge-2.txt =================================================================== --- B:/wc3/test-branch/file-merge-2.txt (revision 14) +++ B:/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Property changes on: B:/wc3/test-branch/file-merge-2.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-2.txt:r15 Index: B:/wc3/test-branch/file-merge-3.txt =================================================================== --- B:/wc3/test-branch/file-merge-3.txt (revision 14) +++ B:/wc3/test-branch/file-merge-3.txt (working copy) Property changes on: B:/wc3/test-branch/file-merge-3.txt ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test/file-merge-3.txt:r15 Info: CMD c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_01_set_get_tests.py b:\configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Test - end pysvn-1.7.8/Tests/test-01.win32.known_good-py3-svn1.8.log000644 000771 000771 00000063577 12177456426 023124 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python33.win32\python.exe Username: barry Info: PYSVN CMD c:\python33.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.01.00 --config-dir b:\configdir Info: CMD mkdir testroot-01 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-01 Info: CMD cd /d b:\ Info: CMD svnadmin create b:\repos Info: Test - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-01 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-01 add test" Info: Test - ls Info: PYSVN CMD ls file:///b:/repos -v -R 2 barry 0 04-Aug-2013 14:51:42 file:///B:/repos/trunk 2 barry 0 04-Aug-2013 14:51:42 file:///B:/repos/trunk/test Info: Test - checkout Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD dir b:\wc1 /s /b /a-h b:\wc1\test b:\wc1\.svn\entries b:\wc1\.svn\format b:\wc1\.svn\pristine b:\wc1\.svn\tmp b:\wc1\.svn\wc.db Info: CMD cd /d b:\wc1\test Info: Test - add Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: Create File file3.txt - test add file 3 Info: Create File file4.txt - test add file 4 Info: Create File file5.txt - test add file 5 Info: CMD mkdir folder1 Info: Create File folder1\file7.txt - test add file 7 Info: CMD mkdir folder1\folder2 Info: Create File folder1\folder2\file8.txt - test add file 8 Info: CMD mkdir folder3 Info: Create File folder3\file9.txt - test add file 9 Info: CMD mkdir folder3\folder4 Info: Create File folder3\folder4\file10.txt - test add file 10 Info: PYSVN CMD add file1.txt A B:/wc1/test/file1.txt Info: PYSVN CMD add file2.txt A B:/wc1/test/file2.txt Info: PYSVN CMD add file3.txt A B:/wc1/test/file3.txt Info: PYSVN CMD add file4.txt A B:/wc1/test/file4.txt Info: PYSVN CMD add --force file5.txt A B:/wc1/test/file5.txt Info: PYSVN CMD add folder1 A B:/wc1/test/folder1 A B:/wc1/test/folder1/file7.txt A B:/wc1/test/folder1/folder2 A B:/wc1/test/folder1/folder2/file8.txt Info: PYSVN CMD add --non-recursive folder3 A B:/wc1/test/folder3 Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file1.txt A B:/wc1/test/file2.txt A B:/wc1/test/file3.txt A B:/wc1/test/file4.txt A B:/wc1/test/file5.txt A B:/wc1/test/folder1 A B:/wc1/test/folder1/file7.txt A B:/wc1/test/folder1/folder2 A B:/wc1/test/folder1/folder2/file8.txt A B:/wc1/test/folder3 Revision 3 Info: Test - update - get a new wc that will update Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A B:/wc2/test A B:/wc2/test/file1.txt A B:/wc2/test/file2.txt A B:/wc2/test/file3.txt A B:/wc2/test/file4.txt A B:/wc2/test/file5.txt A B:/wc2/test/folder1 A B:/wc2/test/folder1/file7.txt A B:/wc2/test/folder1/folder2 A B:/wc2/test/folder1/folder2/file8.txt A B:/wc2/test/folder3 U B:/wc2 update_started B:/wc2 Checked out revision 3 Info: Test - - checkin a mod from wc1 Info: Append File b:\wc1\test\file1.txt - line 2 Info: PYSVN CMD checkin -m "commit modified file" M B:/wc1/test/file1.txt Revision 4 Info: PYSVN CMD checkin -m "commit modified file" Nothing to commit Info: Test - update Info: PYSVN CMD update b:\wc2 U B:/wc2 U B:/wc2/test U B:/wc2/test/file1.txt update_started B:/wc2 Updated to revision 4 Info: Test - the rest in lexical order Info: Test - annotate Info: PYSVN CMD annotate b:\wc2\test\file1.txt A /trunk/test/file1.txt A /trunk/test/file1.txt 0| r3 | barry | 2013-08-04T13:51:43.520205Z | test add file 1 1| r4 | barry | 2013-08-04T13:51:43.956779Z | line 2 Info: Test - cat Info: PYSVN CMD cat -r head file:///b:/repos/trunk/test/file1.txt test add file 1 line 2 Info: Test - cleanup Info: Test - copy Info: PYSVN CMD mkdir file:///b:/repos/tags -m "test-01 add tags" Info: Create File msg.tmp - tag the trunk Info: PYSVN CMD copy file:///b:/repos/trunk file:///b:/repos/tags/version1 Log message --- ------- Info: PYSVN CMD ls -v file:///b:/repos/tags 6 barry 0 04-Aug-2013 14:51:44 file:///B:/repos/tags/version1 Info: PYSVN CMD copy b:\wc2\test\file1.txt b:\wc2\test\file1b.txt A B:/wc2/test/file1b.txt Info: PYSVN CMD propset svn:eol-style native b:\wc2\test\file1b.txt property_added B:/wc2/test/file1b.txt Info: PYSVN CMD checkin b:\wc2 -m "copy test" A B:/wc2/test/file1b.txt Revision 7 Info: Test - diff Info: Append File b:\wc2\test\file1b.txt - new line Info: PYSVN CMD diff b:\wc2 Index: B:/wc2/test/file1b.txt =================================================================== --- B:/wc2/test/file1b.txt (revision 7) +++ B:/wc2/test/file1b.txt (working copy) @@ -1,2 +1,3 @@ test add file 1 line 2 +new line Info: Test - export Info: PYSVN CMD export file:///b:/repos/trunk/test b:\export1.native A b:\export1.native A b:\export1.native/file1.txt A b:\export1.native/file1b.txt A b:\export1.native/file2.txt A b:\export1.native/file3.txt A b:\export1.native/file4.txt A b:\export1.native/file5.txt A b:\export1.native/folder1 A b:\export1.native/folder1/file7.txt A b:\export1.native/folder1/folder2 A b:\export1.native/folder1/folder2/file8.txt A b:\export1.native/folder3 Info: PYSVN CMD export --native-eol CR file:///b:/repos/trunk/test b:\export1.cr A b:\export1.cr A b:\export1.cr/file1.txt A b:\export1.cr/file1b.txt A b:\export1.cr/file2.txt A b:\export1.cr/file3.txt A b:\export1.cr/file4.txt A b:\export1.cr/file5.txt A b:\export1.cr/folder1 A b:\export1.cr/folder1/file7.txt A b:\export1.cr/folder1/folder2 A b:\export1.cr/folder1/folder2/file8.txt A b:\export1.cr/folder3 Info: PYSVN CMD export --native-eol LF file:///b:/repos/trunk/test b:\export1.lf A b:\export1.lf A b:\export1.lf/file1.txt A b:\export1.lf/file1b.txt A b:\export1.lf/file2.txt A b:\export1.lf/file3.txt A b:\export1.lf/file4.txt A b:\export1.lf/file5.txt A b:\export1.lf/folder1 A b:\export1.lf/folder1/file7.txt A b:\export1.lf/folder1/folder2 A b:\export1.lf/folder1/folder2/file8.txt A b:\export1.lf/folder3 Info: PYSVN CMD export --native-eol CRLF file:///b:/repos/trunk/test b:\export1.crlf A b:\export1.crlf A b:\export1.crlf/file1.txt A b:\export1.crlf/file1b.txt A b:\export1.crlf/file2.txt A b:\export1.crlf/file3.txt A b:\export1.crlf/file4.txt A b:\export1.crlf/file5.txt A b:\export1.crlf/folder1 A b:\export1.crlf/folder1/file7.txt A b:\export1.crlf/folder1/folder2 A b:\export1.crlf/folder1/folder2/file8.txt A b:\export1.crlf/folder3 Info: CMD dir /s /b b:\export1.native b:\export1.native\file1.txt b:\export1.native\file1b.txt b:\export1.native\file2.txt b:\export1.native\file3.txt b:\export1.native\file4.txt b:\export1.native\file5.txt b:\export1.native\folder1 b:\export1.native\folder3 b:\export1.native\folder1\file7.txt b:\export1.native\folder1\folder2 b:\export1.native\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.cr b:\export1.cr\file1.txt b:\export1.cr\file1b.txt b:\export1.cr\file2.txt b:\export1.cr\file3.txt b:\export1.cr\file4.txt b:\export1.cr\file5.txt b:\export1.cr\folder1 b:\export1.cr\folder3 b:\export1.cr\folder1\file7.txt b:\export1.cr\folder1\folder2 b:\export1.cr\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.lf b:\export1.lf\file1.txt b:\export1.lf\file1b.txt b:\export1.lf\file2.txt b:\export1.lf\file3.txt b:\export1.lf\file4.txt b:\export1.lf\file5.txt b:\export1.lf\folder1 b:\export1.lf\folder3 b:\export1.lf\folder1\file7.txt b:\export1.lf\folder1\folder2 b:\export1.lf\folder1\folder2\file8.txt Info: CMD dir /s /b b:\export1.crlf b:\export1.crlf\file1.txt b:\export1.crlf\file1b.txt b:\export1.crlf\file2.txt b:\export1.crlf\file3.txt b:\export1.crlf\file4.txt b:\export1.crlf\file5.txt b:\export1.crlf\folder1 b:\export1.crlf\folder3 b:\export1.crlf\folder1\file7.txt b:\export1.crlf\folder1\folder2 b:\export1.crlf\folder1\folder2\file8.txt Info: Test - import Info: Test - info Info: PYSVN CMD info b:\wc2\test Path: b:\wc2\test Name: . Url: file:///B:/repos/trunk/test Repository UUID: e45bbff4-655a-0e43-b6ae-c03f587fa629 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 04-Aug-2013 14:51:43 Info: PYSVN CMD info b:\wc2\test\file1.txt Path: b:\wc2\test\file1.txt Name: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Repository UUID: e45bbff4-655a-0e43-b6ae-c03f587fa629 Revision: 4 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 04-Aug-2013 14:51:43 Text Last Updated: 04-Aug-2013 14:51:44 Checksum: cb0b37e264ebcc467e9f37a069e034d7 Info: Test - log Info: PYSVN CMD log b:\wc2 ------------------------------------------------------------ rev 7: barry | 04-Aug-2013 14:51:45 | 1 lines copy test ------------------------------------------------------------ rev 4: barry | 04-Aug-2013 14:51:43 | 1 lines commit modified file ------------------------------------------------------------ rev 3: barry | 04-Aug-2013 14:51:43 | 1 lines commit added files ------------------------------------------------------------ rev 2: barry | 04-Aug-2013 14:51:42 | 1 lines test-01 add test ------------------------------------------------------------ rev 1: barry | 04-Aug-2013 14:51:42 | 1 lines test-01 add trunk ------------------------------------------------------------ Info: Test - ls Info: PYSVN CMD ls file:///b:/repos/trunk/test file:///B:/repos/trunk/test/file1.txt file:///B:/repos/trunk/test/file1b.txt file:///B:/repos/trunk/test/file2.txt file:///B:/repos/trunk/test/file3.txt file:///B:/repos/trunk/test/file4.txt file:///B:/repos/trunk/test/file5.txt file:///B:/repos/trunk/test/folder1 file:///B:/repos/trunk/test/folder3 Info: PYSVN CMD ls -v file:///b:/repos/trunk/test 4 barry 25 04-Aug-2013 14:51:43 file:///B:/repos/trunk/test/file1.txt 7 barry 23 04-Aug-2013 14:51:45 file:///B:/repos/trunk/test/file1b.txt 3 barry 17 04-Aug-2013 14:51:43 file:///B:/repos/trunk/test/file2.txt 3 barry 17 04-Aug-2013 14:51:43 file:///B:/repos/trunk/test/file3.txt 3 barry 17 04-Aug-2013 14:51:43 file:///B:/repos/trunk/test/file4.txt 3 barry 17 04-Aug-2013 14:51:43 file:///B:/repos/trunk/test/file5.txt 3 barry 0 04-Aug-2013 14:51:43 file:///B:/repos/trunk/test/folder1 3 barry 0 04-Aug-2013 14:51:43 file:///B:/repos/trunk/test/folder3 Info: PYSVN CMD ls b:\wc2\test B:/wc2/test/file1.txt B:/wc2/test/file1b.txt B:/wc2/test/file2.txt B:/wc2/test/file3.txt B:/wc2/test/file4.txt B:/wc2/test/file5.txt B:/wc2/test/folder1 B:/wc2/test/folder3 Info: PYSVN CMD ls -v b:\wc2\test 4 barry 25 04-Aug-2013 14:51:43 B:/wc2/test/file1.txt 7 barry 23 04-Aug-2013 14:51:45 B:/wc2/test/file1b.txt 3 barry 17 04-Aug-2013 14:51:43 B:/wc2/test/file2.txt 3 barry 17 04-Aug-2013 14:51:43 B:/wc2/test/file3.txt 3 barry 17 04-Aug-2013 14:51:43 B:/wc2/test/file4.txt 3 barry 17 04-Aug-2013 14:51:43 B:/wc2/test/file5.txt 3 barry 0 04-Aug-2013 14:51:43 B:/wc2/test/folder1 3 barry 0 04-Aug-2013 14:51:43 B:/wc2/test/folder3 Info: Test - merge - see below Info: Test - mkdir - done above Info: Test - move Info: Create File msg.tmp - move url test Info: PYSVN CMD move file:///b:/repos/trunk/test/file2.txt file:///b:/repos/trunk/test/file2b.txt Log message --- ------- Info: PYSVN CMD move b:\wc2\test\file3.txt b:\wc2\test\file3b.txt A B:/wc2/test/file3b.txt D B:/wc2/test/file3.txt Info: PYSVN CMD checkin b:\wc2 -m "move wc test" A B:/wc2/test/file3b.txt D B:/wc2/test/file3.txt M B:/wc2/test/file1b.txt Revision 9 Info: Test - status Info: Append File b:\wc1\test\file4.txt - file 4 is changing Info: PYSVN CMD checkin b:\wc1 -m "change wc1 for status -u to detect" M B:/wc1/test/file4.txt Revision 10 Info: PYSVN CMD status b:\wc2 Info: PYSVN CMD status --verbose b:\wc2 4 4 barry B:\wc2 4 4 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 9 9 barry B:\wc2\test\file1b.txt 4 3 barry B:\wc2\test\file2.txt 9 9 barry B:\wc2\test\file3b.txt 4 3 barry B:\wc2\test\file4.txt 4 3 barry B:\wc2\test\file5.txt 4 3 barry B:\wc2\test\folder1 4 3 barry B:\wc2\test\folder1\file7.txt 4 3 barry B:\wc2\test\folder1\folder2 4 3 barry B:\wc2\test\folder1\folder2\file8.txt 4 3 barry B:\wc2\test\folder3 Info: PYSVN CMD status --show-updates b:\wc2 M B:\wc2\test D B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt M B:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry B:\wc2 M 4 4 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 9 9 barry B:\wc2\test\file1b.txt D 4 3 barry B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt 9 9 barry B:\wc2\test\file3b.txt M 4 3 barry B:\wc2\test\file4.txt 4 3 barry B:\wc2\test\file5.txt 4 3 barry B:\wc2\test\folder1 4 3 barry B:\wc2\test\folder1\file7.txt 4 3 barry B:\wc2\test\folder1\folder2 4 3 barry B:\wc2\test\folder1\folder2\file8.txt 4 3 barry B:\wc2\test\folder3 Info: PYSVN CMD update A B:/wc1/test/file1b.txt A B:/wc1/test/file2b.txt A B:/wc1/test/file3b.txt D B:/wc1/test/file2.txt D B:/wc1/test/file3.txt U B:/wc1 U B:/wc1/test update_started B:/wc1/test Updated to revision 10 Info: PYSVN CMD status --show-updates b:\wc2 M B:\wc2\test D B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt M B:\wc2\test\file4.txt Info: PYSVN CMD status --show-updates --verbose b:\wc2 4 4 barry B:\wc2 M 4 4 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 9 9 barry B:\wc2\test\file1b.txt D 4 3 barry B:\wc2\test\file2.txt A B:\wc2\test\file2b.txt 9 9 barry B:\wc2\test\file3b.txt M 4 3 barry B:\wc2\test\file4.txt 4 3 barry B:\wc2\test\file5.txt 4 3 barry B:\wc2\test\folder1 4 3 barry B:\wc2\test\folder1\file7.txt 4 3 barry B:\wc2\test\folder1\folder2 4 3 barry B:\wc2\test\folder1\folder2\file8.txt 4 3 barry B:\wc2\test\folder3 Info: PYSVN CMD checkin b:\wc2 -m "prop change" Nothing to commit Info: Test - propdel Info: CMD cd /d b:\wc2\test Info: PYSVN CMD propset test:prop1 del_me file4.txt property_added B:/wc2/test/file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': test:prop1: del_me Info: PYSVN CMD propdel test:prop1 file4.txt property_deleted B:/wc2/test/file4.txt Info: PYSVN CMD proplist -v file4.txt Info: Test - propget Info: PYSVN CMD propget svn:eol-style file4.txt Info: Test - proplist - see above Info: Test - propset Info: CMD cd /d b:\wc2\test Info: PYSVN CMD proplist -v file4.txt Info: PYSVN CMD propset svn:eol-style native file4.txt property_added B:/wc2/test/file4.txt Info: PYSVN CMD proplist -v file4.txt Properties on 'file4.txt': svn:eol-style: native Info: Test - remove Info: CMD cd /d b:\wc2\test Info: PYSVN CMD remove file5.txt D B:/wc2/test/file5.txt Info: PYSVN CMD status MM file4.txt D file5.txt Info: Test - resolved Info: Append File b:\wc1\test\file4.txt - conflict in file4 yes Info: Append File b:\wc2\test\file4.txt - conflict in file4 no Info: PYSVN CMD checkin b:\wc1\test -m "make a conflict part 1" M B:/wc1/test/file4.txt Revision 11 Info: PYSVN CMD update b:\wc2\test callback_conflict_resolver action: base_file: B:\wc2\test\file4.txt.r4 is_binary: False kind: merged_file: B:\wc2\test\file4.txt mime_type: None my_file: B:\wc2\test\file4.txt.mine node_kind: operation: path: B:/wc2/test/file4.txt property_name: None reason: src_left_version: {'node_kind': , 'path_in_repos': 'trunk/test/file4.txt', 'peg_rev': , 'repos_url': 'file:///B:/repos'} src_right_version: {'node_kind': , 'path_in_repos': 'trunk/test/file4.txt', 'peg_rev': , 'repos_url': 'file:///B:/repos'} their_file: B:\wc2\test\file4.txt.r11 A B:/wc2/test/file2b.txt D B:/wc2/test/file2.txt U B:/wc2 U B:/wc2/test U B:/wc2/test/file4.txt conflict_resolver_done B:/wc2/test/file4.txt conflict_resolver_starting B:/wc2/test/file4.txt update_started B:/wc2/test Updated to revision 11 Info: PYSVN CMD status CM file4.txt ? file4.txt.mine ? file4.txt.r11 ? file4.txt.r4 D file5.txt Info: CMD copy b:\wc2\test\file4.txt.mine b:\wc2\test\file4.txt 1 file(s) copied. Info: PYSVN CMD resolved b:\wc2\test\file4.txt R B:/wc2/test/file4.txt conflict_resolver_done B:/wc2/test/file4.txt conflict_resolver_starting B:/wc2/test/file4.txt Info: PYSVN CMD checkin b:\wc2\test\file4.txt -m "resolve a confict part 2" M B:/wc2/test/file4.txt Revision 12 Info: Test - revert Info: PYSVN CMD revert file5.txt R B:/wc2/test/file5.txt Info: PYSVN CMD status Info: Test - revproplist Info: PYSVN CMD revproplist file:///b:/repos/trunk Revision: 12 svn:author: barry svn:date: 2013-08-04T13:51:49.491903Z svn:log: resolve a confict part 2 Info: Test - revpropget Info: PYSVN CMD revpropget svn:log file:///b:/repos/trunk Revision: 12 svn:log: resolve a confict part 2 Info: PYSVN CMD revpropget no_such_prop file:///b:/repos/trunk Revision: 12 no_such_prop: None Info: Test - revpropset Info: PYSVN CMD revpropset svn:log "Hello world" file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - revpropdel Info: PYSVN CMD revpropdel svn:log file:///b:/repos/trunk Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook Info: Test - status - see above Info: Test - relocate Info: CMD mkdir b:\root Info: CMD move b:\repos b:\root 1 dir(s) moved. Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///B:/repos/trunk Repository UUID: e45bbff4-655a-0e43-b6ae-c03f587fa629 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 04-Aug-2013 14:51:42 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc1 Info: PYSVN CMD info b:\wc1 Path: b:\wc1 Name: . Url: file:///B:/root/repos/trunk Repository UUID: e45bbff4-655a-0e43-b6ae-c03f587fa629 Revision: 2 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 2 Last Changed Date: 04-Aug-2013 14:51:42 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/repos/trunk Repository UUID: e45bbff4-655a-0e43-b6ae-c03f587fa629 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 04-Aug-2013 14:51:43 Info: PYSVN CMD relocate file:///b:/repos/trunk file:///b:/root/repos/trunk b:\wc2 Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/trunk Repository UUID: e45bbff4-655a-0e43-b6ae-c03f587fa629 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 04-Aug-2013 14:51:43 Info: Test - switch Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/trunk Repository UUID: e45bbff4-655a-0e43-b6ae-c03f587fa629 Revision: 4 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 4 Last Changed Date: 04-Aug-2013 14:51:43 Info: PYSVN CMD switch b:\wc2 file:///b:/root/repos/tags/version1 A B:/wc2/test/file2.txt A B:/wc2/test/file3.txt D B:/wc2/test/file1b.txt D B:/wc2/test/file2b.txt D B:/wc2/test/file3b.txt U B:/wc2 U B:/wc2/test U B:/wc2/test/file4.txt Info: PYSVN CMD info b:\wc2 Path: b:\wc2 Name: . Url: file:///B:/root/repos/tags/version1 Repository UUID: e45bbff4-655a-0e43-b6ae-c03f587fa629 Revision: 12 Node kind: directory Schedule: normal Last Changed Author: barry Last Changed Rev: 6 Last Changed Date: 04-Aug-2013 14:51:44 Info: Test - update - see above Info: Test - Info: Testing - merge Info: PYSVN CMD checkout file:///b:/root/repos/trunk b:\wc3 A B:/wc3/test A B:/wc3/test/file1.txt A B:/wc3/test/file1b.txt A B:/wc3/test/file2b.txt A B:/wc3/test/file3b.txt A B:/wc3/test/file4.txt A B:/wc3/test/file5.txt A B:/wc3/test/folder1 A B:/wc3/test/folder1/file7.txt A B:/wc3/test/folder1/folder2 A B:/wc3/test/folder1/folder2/file8.txt A B:/wc3/test/folder3 U B:/wc3 update_started B:/wc3 Checked out revision 12 Info: CMD cd b:\wc3\test Info: Create File file-merge-1.txt - test add file merge 1 Info: Create File file-merge-2.txt - test add file merge 2 Info: PYSVN CMD add file-merge-1.txt A B:/wc3/test/file-merge-1.txt Info: PYSVN CMD add file-merge-2.txt A B:/wc3/test/file-merge-2.txt Info: PYSVN CMD commit -m "add test merge files" . A B:/wc3/test/file-merge-1.txt A B:/wc3/test/file-merge-2.txt Revision 13 Info: Create File msg.tmp - make a branch Info: PYSVN CMD copy file:///b:/root/repos/trunk/test file:///b:/root/repos/trunk/test-branch Log message --- ------- Info: PYSVN CMD update b:\wc3 A B:/wc3/test-branch A B:/wc3/test-branch/file-merge-1.txt A B:/wc3/test-branch/file-merge-2.txt A B:/wc3/test-branch/file1.txt A B:/wc3/test-branch/file1b.txt A B:/wc3/test-branch/file2b.txt A B:/wc3/test-branch/file3b.txt A B:/wc3/test-branch/file4.txt A B:/wc3/test-branch/file5.txt A B:/wc3/test-branch/folder1 A B:/wc3/test-branch/folder1/file7.txt A B:/wc3/test-branch/folder1/folder2 A B:/wc3/test-branch/folder1/folder2/file8.txt A B:/wc3/test-branch/folder3 U B:/wc3 update_started B:/wc3 Updated to revision 14 Info: Create File file-merge-3.txt - test add file merge 3 Info: PYSVN CMD add file-merge-3.txt A B:/wc3/test/file-merge-3.txt Info: PYSVN CMD rm file-merge-1.txt D B:/wc3/test/file-merge-1.txt Info: Append File file-merge-2.txt - modify merge 2 Info: PYSVN CMD commit -m "change test merge files" . A B:/wc3/test/file-merge-3.txt D B:/wc3/test/file-merge-1.txt M B:/wc3/test/file-merge-2.txt Revision 15 Info: PYSVN CMD merge --dry-run --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch A B:/wc3/test-branch/file-merge-3.txt D B:/wc3/test-branch/file-merge-1.txt U B:/wc3/test-branch/file-merge-2.txt U B:/wc3/test-branch/file-merge-2.txt merge_begin B:/wc3/test-branch merge_completed B:/wc3/test-branch merge_elide_info B:/wc3/test-branch/file-merge-2.txt merge_record_info B:/wc3/test-branch merge_record_info B:/wc3/test-branch/file-merge-2.txt merge_record_info_begin B:/wc3/test-branch merge_record_info_begin B:/wc3/test-branch/file-merge-2.txt Info: PYSVN CMD merge --revision 14:15 file:///b:/root/repos/trunk/test b:\wc3\test-branch merge_completed B:/wc3/test-branch Info: PYSVN CMD status b:\wc3\test-branch M B:\wc3\test-branch D B:\wc3\test-branch\file-merge-1.txt M B:\wc3\test-branch\file-merge-2.txt A + B:\wc3\test-branch\file-merge-3.txt Info: PYSVN CMD diff b:\wc3\test-branch Index: B:/wc3/test-branch/file-merge-1.txt =================================================================== --- B:/wc3/test-branch/file-merge-1.txt (revision 14) +++ B:/wc3/test-branch/file-merge-1.txt (working copy) @@ -1 +0,0 @@ -test add file merge 1 Index: B:/wc3/test-branch/file-merge-2.txt =================================================================== --- B:/wc3/test-branch/file-merge-2.txt (revision 14) +++ B:/wc3/test-branch/file-merge-2.txt (working copy) @@ -1 +1,2 @@ test add file merge 2 +modify merge 2 Index: B:/wc3/test-branch =================================================================== --- B:/wc3/test-branch (revision 14) +++ B:/wc3/test-branch (working copy) Property changes on: B:/wc3/test-branch ___________________________________________________________________ Added: svn:mergeinfo Merged /trunk/test:r15 Info: CMD c:\python33.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_01_set_get_tests.py b:\configdir Info: Initial values Info: get_auth_cache() => 1 Info: get_auto_props() => 0 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Change values 1 Info: Changed values 1 Info: get_auth_cache() => 0 Info: get_auto_props() => 0 Info: get_default_password() => 'thepass' Info: get_default_username() => 'auser' Info: get_interactive() => 0 Info: get_store_passwords() => 0 Info: Change values 2 Info: Changed values 2 Info: get_auth_cache() => 1 Info: get_auto_props() => 1 Info: get_default_password() => None Info: get_default_username() => None Info: get_interactive() => 1 Info: get_store_passwords() => 1 Info: Test - end pysvn-1.7.8/Tests/test-02.cmd000644 000771 000771 00000000275 10221573366 016210 0ustar00barrybarry000000 000000 setlocal set PYTHONPATH=. if exist testroot rmdir /s /q testroot mkdir testroot %PYTHON% %WORKDIR%\Tests\thread_tests.py 20 http://torment.chelsea.private/svn/repos1/Latest/ endlocal pysvn-1.7.8/Tests/test-03.cmd000644 000771 000771 00000000347 11166142161 016203 0ustar00barrybarry000000 000000 @prompt $P$S$G @echo WorkDir: %WORKDIR% @echo PYTHON: %PYTHON% @echo Username: %USERNAME% setlocal mkdir testroot-03 subst b: %CD%\testroot-03 mkdir b:\configdir cd testroot-03 %PYTHON% ..\test_callbacks.py endlocal pysvn-1.7.8/Tests/test-03.sh000755 000771 000771 00000000521 11076210000 016033 0ustar00barrybarry000000 000000 #!/bin/sh # need to get rid of any symbolic links in the WORKDIR export WORKDIR=$( ${PYTHON} -c 'import os;os.chdir("..");print( os.getcwd() )' ) cd ${WORKDIR}/Tests echo WorkDir: ${WORKDIR} echo PYTHON: ${PYTHON} mkdir -p testroot-03 rm -rf testroot-03 mkdir testroot-03 cd testroot-03 mkdir configdir ${PYTHON} ../test_callbacks.py pysvn-1.7.8/Tests/test-03.unix.known_good-py2-svn1.4.log000644 000771 000771 00000001411 11253135715 023102 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python2.3 Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Traceback (most recent call last): File "../test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Traceback (most recent call last): File "../test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined Info: passed Info: Expecting error None Info: Passed 4 pysvn-1.7.8/Tests/test-03.unix.known_good-py2-svn1.5.log000644 000771 000771 00000001411 11253135715 023103 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python2.3 Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Traceback (most recent call last): File "../test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Traceback (most recent call last): File "../test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined Info: passed Info: Expecting error None Info: Passed 4 pysvn-1.7.8/Tests/test-03.unix.known_good-py2-svn1.6.log000644 000771 000771 00000001411 11253135715 023104 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python2.3 Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Traceback (most recent call last): File "../test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Traceback (most recent call last): File "../test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined Info: passed Info: Expecting error None Info: Passed 4 pysvn-1.7.8/Tests/test-03.unix.known_good-py2-svn1.7.log000644 000771 000771 00000001411 11603642311 023077 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python2.3 Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Traceback (most recent call last): File "../test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Traceback (most recent call last): File "../test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined Info: passed Info: Expecting error None Info: Passed 4 pysvn-1.7.8/Tests/test-03.unix.known_good-py2-svn1.8.log000644 000771 000771 00000001411 12164247515 023112 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python2.3 Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Traceback (most recent call last): File "../test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Traceback (most recent call last): File "../test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined Info: passed Info: Expecting error None Info: Passed 4 pysvn-1.7.8/Tests/test-03.unix.known_good-py3-svn1.5.log000644 000771 000771 00000001411 11255417030 023077 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python2.3 Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Traceback (most recent call last): File "../test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Traceback (most recent call last): File "../test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined Info: passed Info: Expecting error None Info: Passed 4 pysvn-1.7.8/Tests/test-03.unix.known_good-py3-svn1.6.log000644 000771 000771 00000001411 11253135715 023105 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python2.3 Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Traceback (most recent call last): File "../test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Traceback (most recent call last): File "../test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined Info: passed Info: Expecting error None Info: Passed 4 pysvn-1.7.8/Tests/test-03.unix.known_good-py3-svn1.7.log000644 000771 000771 00000001411 11646632567 023123 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python2.3 Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Traceback (most recent call last): File "../test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Traceback (most recent call last): File "../test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined Info: passed Info: Expecting error None Info: Passed 4 pysvn-1.7.8/Tests/test-03.unix.known_good-py3-svn1.8.log000644 000771 000771 00000001411 12164247515 023113 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python2.3 Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Traceback (most recent call last): File "../test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Traceback (most recent call last): File "../test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined Info: passed Info: Expecting error None Info: Passed 4 pysvn-1.7.8/Tests/test-03.win32.known_good-py2-svn1.4.log000644 000771 000771 00000002440 11253135715 023064 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python23\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests >setlocal L:\wc\pysvn\trunk\pysvn\Extension\Tests >mkdir testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests >subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests >mkdir b:\configdir L:\wc\pysvn\trunk\pysvn\Extension\Tests >cd testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 >c:\python23\python.exe ..\test_callbacks.py Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Info: passed Info: Expecting error None Info: Passed 4 Traceback (most recent call last): File "..\test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Traceback (most recent call last): File "..\test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 >endlocal pysvn-1.7.8/Tests/test-03.win32.known_good-py2-svn1.5.log000644 000771 000771 00000002461 11253135715 023070 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python23\python.exe Username: barry L:\wc\pysvn\trunk\pysvn\Extension\Tests >setlocal L:\wc\pysvn\trunk\pysvn\Extension\Tests >mkdir testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests >subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests >mkdir b:\configdir L:\wc\pysvn\trunk\pysvn\Extension\Tests >cd testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 >c:\python23\python.exe ..\test_callbacks.py Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Info: passed Info: Expecting error None Info: Passed 4 Traceback (most recent call last): File "..\test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Traceback (most recent call last): File "..\test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 >endlocal pysvn-1.7.8/Tests/test-03.win32.known_good-py2-svn1.6.log000644 000771 000771 00000002461 11253135715 023071 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python23\python.exe Username: barry L:\wc\pysvn\trunk\pysvn\Extension\Tests >setlocal L:\wc\pysvn\trunk\pysvn\Extension\Tests >mkdir testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests >subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests >mkdir b:\configdir L:\wc\pysvn\trunk\pysvn\Extension\Tests >cd testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 >c:\python23\python.exe ..\test_callbacks.py Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Info: passed Info: Expecting error None Info: Passed 4 Traceback (most recent call last): File "..\test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Traceback (most recent call last): File "..\test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 >endlocal pysvn-1.7.8/Tests/test-03.win32.known_good-py2-svn1.7.log000644 000771 000771 00000002461 11653316763 023102 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python23\python.exe Username: barry L:\wc\pysvn\trunk\pysvn\Extension\Tests >setlocal L:\wc\pysvn\trunk\pysvn\Extension\Tests >mkdir testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests >subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests >mkdir b:\configdir L:\wc\pysvn\trunk\pysvn\Extension\Tests >cd testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 >c:\python23\python.exe ..\test_callbacks.py Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Info: passed Info: Expecting error None Info: Passed 4 Traceback (most recent call last): File "..\test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Traceback (most recent call last): File "..\test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 >endlocal pysvn-1.7.8/Tests/test-03.win32.known_good-py2-svn1.8.log000644 000771 000771 00000002461 12164247515 023077 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python23\python.exe Username: barry L:\wc\pysvn\trunk\pysvn\Extension\Tests >setlocal L:\wc\pysvn\trunk\pysvn\Extension\Tests >mkdir testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests >subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests >mkdir b:\configdir L:\wc\pysvn\trunk\pysvn\Extension\Tests >cd testroot-03 L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 >c:\python23\python.exe ..\test_callbacks.py Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Info: passed Info: Expecting error None Info: Passed 4 Traceback (most recent call last): File "..\test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Traceback (most recent call last): File "..\test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-03 >endlocal pysvn-1.7.8/Tests/test-03.win32.known_good-py3-svn1.5.log000644 000771 000771 00000002602 11255444226 023070 0ustar00barrybarry000000 000000 WorkDir: C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31 PYTHON: c:\python31\python.exe Username: barry C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31\Tests >setlocal C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31\Tests >mkdir testroot-03 C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31\Tests >subst b: C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31\Tests\testroot-03 C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31\Tests >mkdir b:\configdir C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31\Tests >cd testroot-03 C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31\Tests\testroot-03 >c:\python31\python.exe ..\test_callbacks.py Traceback (most recent call last): File "..\test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Traceback (most recent call last): File "..\test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Info: passed Info: Expecting error None Info: Passed 4 C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31\Tests\testroot-03 >endlocal pysvn-1.7.8/Tests/test-03.win32.known_good-py3-svn1.6.log000644 000771 000771 00000002602 11255110531 023056 0ustar00barrybarry000000 000000 WorkDir: C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31 PYTHON: c:\python31\python.exe Username: barry C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >setlocal C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >mkdir testroot-03 C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >subst b: C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests\testroot-03 C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >mkdir b:\configdir C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >cd testroot-03 C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests\testroot-03 >c:\python31\python.exe ..\test_callbacks.py Traceback (most recent call last): File "..\test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Traceback (most recent call last): File "..\test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Info: passed Info: Expecting error None Info: Passed 4 C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests\testroot-03 >endlocal pysvn-1.7.8/Tests/test-03.win32.known_good-py3-svn1.7.log000644 000771 000771 00000002602 11646632567 023105 0ustar00barrybarry000000 000000 WorkDir: C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31 PYTHON: c:\python31\python.exe Username: barry C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >setlocal C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >mkdir testroot-03 C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >subst b: C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests\testroot-03 C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >mkdir b:\configdir C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >cd testroot-03 C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests\testroot-03 >c:\python31\python.exe ..\test_callbacks.py Traceback (most recent call last): File "..\test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Traceback (most recent call last): File "..\test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Info: passed Info: Expecting error None Info: Passed 4 C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests\testroot-03 >endlocal pysvn-1.7.8/Tests/test-03.win32.known_good-py3-svn1.8.log000644 000771 000771 00000002602 12164247515 023075 0ustar00barrybarry000000 000000 WorkDir: C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31 PYTHON: c:\python31\python.exe Username: barry C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >setlocal C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >mkdir testroot-03 C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >subst b: C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests\testroot-03 C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >mkdir b:\configdir C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests >cd testroot-03 C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests\testroot-03 >c:\python31\python.exe ..\test_callbacks.py Traceback (most recent call last): File "..\test_callbacks.py", line 79, in get_login_bad return retcode, username, password, save NameError: global name 'retcode' is not defined Traceback (most recent call last): File "..\test_callbacks.py", line 86, in get_log_message_bad return bad_var NameError: global name 'bad_var' is not defined Info: Client created Info: Expecting error callback_get_login required Info: passed Info: Expecting error unhandled exception in callback_get_login Info: passed Info: Expecting error callback_get_log_message required Info: passed Info: Expecting error unhandled exception in callback_get_log_message Info: passed Info: Expecting error None Info: Passed 4 C:\BuildRoot\Win32-MSVC90-1.6.5\pysvn\py31\Tests\testroot-03 >endlocal pysvn-1.7.8/Tests/test-04.cmd000644 000771 000771 00000006177 12164262477 016227 0ustar00barrybarry000000 000000 @prompt $P$S$G$S @echo WorkDir: %WORKDIR% @echo PYTHON: %PYTHON% @echo Username: %USERNAME% setlocal set PYTHONPATH=%WORKDIR%\Source;%WORKDIR%\Examples\Client set PYSVN=%PYTHON% %WORKDIR%\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir testroot-04 subst b: %CD%\testroot-04 cd /d B:\ svnadmin create b:\repos rem mkdir %PYSVN% mkdir file:///b:/repos/trunk -m "test-01 add trunk" %PYSVN% mkdir file:///b:/repos/trunk/test -m "test-01 add test" rem Install hooks echo echo %PYTHON% %WORKDIR%\Tests\test_04_commit_hook_test_1.py pre-commit %%* ^>b:\pre_test_1.output >>b:\repos\hooks\pre-commit.cmd echo set PYTHONPATH=%PYTHONPATH% >>b:\repos\hooks\pre-commit.cmd echo %PYTHON% %WORKDIR%\Tests\test_04_commit_hook_test_1.py pre-commit %%* ^>^>b:\pre_test_1.output >>b:\repos\hooks\pre-commit.cmd echo echo %PYTHON% %WORKDIR%\Tests\test_04_commit_hook_test_1.py post-commit %%* is_revision ^>b:\post_test_1.output >>b:\repos\hooks\post-commit.cmd echo set PYTHONPATH=%PYTHONPATH% >>b:\repos\hooks\post-commit.cmd echo %PYTHON% %WORKDIR%\Tests\test_04_commit_hook_test_1.py post-commit %%* is_revision ^>^>b:\post_test_1.output >>b:\repos\hooks\post-commit.cmd rem Add one dir %PYSVN% mkdir file:///b:/repos/trunk/test/a -m "pre-commit test 1" rem pre_test_1.output start ---------------------------------------- type b:\pre_test_1.output rem pre_test_1.output end ------------------------------------------ rem post_test_1.output start ---------------------------------------- type b:\post_test_1.output rem post_test_1.output end ------------------------------------------ rem Add two files %PYSVN% co file:///b:/repos/trunk/test b:\wc echo file1 ROOT >b:\wc\file1.txt echo file1 A >b:\wc\a\file1.txt %PYSVN% add b:\wc\file1.txt %PYSVN% add b:\wc\a\file1.txt %PYSVN% checkin -m "Add two files" b:\wc rem pre_test_1.output start ---------------------------------------- type b:\pre_test_1.output rem pre_test_1.output end ------------------------------------------ rem post_test_1.output start ---------------------------------------- type b:\post_test_1.output rem post_test_1.output end ------------------------------------------ rem Mod one file Mod one prop echo file1 ROOT ln 2 >b:\wc\file1.txt %PYSVN% propset svn:eol-style native b:\wc\a\file1.txt %PYSVN% checkin -m "Mod one file Mod one prop" b:\wc rem pre_test_1.output start ---------------------------------------- type b:\pre_test_1.output rem pre_test_1.output end ------------------------------------------ rem post_test_1.output start ---------------------------------------- type b:\post_test_1.output rem post_test_1.output end ------------------------------------------ rem Delete one file %PYSVN% rm b:\wc\a\file1.txt %PYSVN% checkin -m "Delete one file" b:\wc rem pre_test_1.output start ---------------------------------------- type b:\pre_test_1.output rem pre_test_1.output end ------------------------------------------ rem post_test_1.output start ---------------------------------------- type b:\post_test_1.output rem post_test_1.output end ------------------------------------------ endlocal pysvn-1.7.8/Tests/test-04.sh000755 000771 000771 00000011300 12164244243 016050 0ustar00barrybarry000000 000000 #!/bin/sh # need to get rid of any symbolic links in the WORKDIR export WORKDIR=$( ${PYTHON} -c 'import os;os.chdir("..");print( os.getcwd() )' ) cd ${WORKDIR}/Tests echo WorkDir: ${WORKDIR} echo PYTHON: ${PYTHON} echo Username: $(id -u -n) cmd () { echo Info: Command: $* "$@" } cmd mkdir testroot-04 cmd cd testroot-04 TESTROOT=${WORKDIR}/Tests/testroot-04 cmd mkdir tmp export TMPDIR=${TESTROOT}/tmp export PYTHONPATH=${WORKDIR}/Source:${WORKDIR}/Examples/Client export PYSVN="${PYTHON} ${WORKDIR}/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir ${TESTROOT}/configdir" cmd svnadmin create ${TESTROOT}/repos echo Info: Testing - mkdir cmd ${PYSVN} mkdir file://${TESTROOT}/repos/trunk -m "test-04 add trunk" cmd ${PYSVN} mkdir file://${TESTROOT}/repos/trunk/test -m "test-04 add test" echo Info: Install hooks echo '#!/bin/sh' >${TESTROOT}/repos/hooks/pre-commit echo export PYTHONPATH=$PYTHONPATH >>${TESTROOT}/repos/hooks/pre-commit echo export LD_LIBRARY_PATH=$LD_LIBRARY_PATH >>${TESTROOT}/repos/hooks/pre-commit echo export PATH=$PATH >>${TESTROOT}/repos/hooks/pre-commit echo echo $PYTHON ${WORKDIR}/Tests/test_04_commit_hook_test_1.py pre-commit '"$@"' ">${TESTROOT}/pre_test_1.output" >>${TESTROOT}/repos/hooks/pre-commit echo $PYTHON ${WORKDIR}/Tests/test_04_commit_hook_test_1.py pre-commit '"$@"' ">>${TESTROOT}/pre_test_1.output" >>${TESTROOT}/repos/hooks/pre-commit chmod +x ${TESTROOT}/repos/hooks/pre-commit echo '#!/bin/sh' >${TESTROOT}/repos/hooks/post-commit echo export PYTHONPATH=$PYTHONPATH >>${TESTROOT}/repos/hooks/post-commit echo export LD_LIBRARY_PATH=$LD_LIBRARY_PATH >>${TESTROOT}/repos/hooks/post-commit echo export PATH=$PATH >>${TESTROOT}/repos/hooks/post-commit echo echo $PYTHON ${WORKDIR}/Tests/test_04_commit_hook_test_1.py post-commit '"$@"' is_revision ">${TESTROOT}/post_test_1.output" >>${TESTROOT}/repos/hooks/post-commit echo $PYTHON ${WORKDIR}/Tests/test_04_commit_hook_test_1.py post-commit '"$@"' is_revision ">>${TESTROOT}/post_test_1.output" >>${TESTROOT}/repos/hooks/post-commit chmod +x ${TESTROOT}/repos/hooks/post-commit cmd ${PYSVN} mkdir file://${TESTROOT}/repos/trunk/test/a -m "pre-commit test 1" echo Info: pre_test_1.output start ------------------------------------ cat ${TESTROOT}/pre_test_1.output echo Info: pre_test_1.output end -------------------------------------- echo Info: post_test_1.output start ----------------------------------- cat ${TESTROOT}/post_test_1.output echo Info: post_test_1.output end ------------------------------------- echo Info: Add two files cmd ${PYSVN} checkout file://${TESTROOT}/repos/trunk/test ${TESTROOT}/wc echo file1 ROOT > ${TESTROOT}/wc/file1.txt echo file1 A > ${TESTROOT}/wc/a/file1.txt cmd ${PYSVN} add ${TESTROOT}/wc/file1.txt cmd ${PYSVN} add ${TESTROOT}/wc/a/file1.txt cmd ${PYSVN} checkin -m "Add two files" ${TESTROOT}/wc echo Info: pre_test_1.output start ------------------------------------ cat ${TESTROOT}/pre_test_1.output echo Info: pre_test_1.output end -------------------------------------- echo Info: post_test_1.output start ----------------------------------- cat ${TESTROOT}/post_test_1.output echo Info: post_test_1.output end ------------------------------------- echo Info: Mod one file Mod one prop echo file1 ROOT ln 2 > ${TESTROOT}/wc/file1.txt cmd ${PYSVN} propset svn:eol-style native ${TESTROOT}/wc/a/file1.txt cmd ${PYSVN} checkin -m "Mod one file Mod one prop" ${TESTROOT}/wc echo Info: pre_test_1.output start ------------------------------------ cat ${TESTROOT}/pre_test_1.output echo Info: pre_test_1.output end -------------------------------------- echo Info: post_test_1.output start ----------------------------------- cat ${TESTROOT}/post_test_1.output echo Info: post_test_1.output end ------------------------------------- echo Info: Delete one file cmd ${PYSVN} rm ${TESTROOT}/wc/a/file1.txt cmd ${PYSVN} checkin -m "Delete one file" ${TESTROOT}/wc echo Info: pre_test_1.output start ------------------------------------ cat ${TESTROOT}/pre_test_1.output echo Info: pre_test_1.output end -------------------------------------- echo Info: post_test_1.output start ----------------------------------- cat ${TESTROOT}/post_test_1.output echo Info: post_test_1.output end ------------------------------------- echo Info: Copy one file cmd ${PYSVN} cp ${TESTROOT}/wc/file1.txt ${TESTROOT}/wc/file1copy.txt cmd ${PYSVN} checkin -m "Copy one file" ${TESTROOT}/wc echo Info: pre_test_1.output start ------------------------------------ cat ${TESTROOT}/pre_test_1.output echo Info: pre_test_1.output end -------------------------------------- echo Info: post_test_1.output start ----------------------------------- cat ${TESTROOT}/post_test_1.output echo Info: post_test_1.output end ------------------------------------- pysvn-1.7.8/Tests/test-04.unix.known_good-py2-svn1.4.log000644 000771 000771 00000025711 11253135715 023114 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn-next/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python Username: barry Info: Command: mkdir testroot-04 Info: Command: cd testroot-04 Info: Command: mkdir tmp Info: Command: svnadmin create /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos Info: Testing - mkdir Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos/trunk -m test-04 add trunk Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos/trunk/test -m test-04 add test Info: Install hooks Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos/trunk/test/a -m pre-commit test 1 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Tests/test_04_pre_commit_test_1.py /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos 2-1 Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos, 2-1) ... Info: revproplist() ... svn:log: pre-commit test 1 svn:check-locks: true svn:author: barry svn:date: 2008-10-07T19:55:31.759324Z Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: test_1.output end ------------------------------------------ Info: Add two files Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/configdir checkout file:///Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos/trunk/test /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc/a U /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc Checked out revision 3 Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc/file1.txt A /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc/a/file1.txt A /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/configdir checkin -m Add two files /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc A wc/a/file1.txt A wc/file1.txt Revision 4 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Tests/test_04_pre_commit_test_1.py /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos 3-1 Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos, 3-1) ... Info: revproplist() ... svn:log: Add two files svn:check-locks: true svn:author: barry svn:date: 2008-10-07T19:55:34.542409Z Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: test_1.output end ------------------------------------------ Info: Mod one file Mod one prop Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/configdir propset svn:eol-style native /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/configdir checkin -m Mod one file Mod one prop /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc M wc/a/file1.txt M wc/file1.txt Revision 5 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Tests/test_04_pre_commit_test_1.py /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos 4-1 Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos, 4-1) ... Info: revproplist() ... svn:log: Mod one file Mod one prop svn:check-locks: true svn:author: barry svn:date: 2008-10-07T19:55:36.343643Z Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: test_1.output end ------------------------------------------ Info: Delete one file Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/configdir rm /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc/a/file1.txt D /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/configdir checkin -m Delete one file /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc D wc/a/file1.txt Revision 6 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Tests/test_04_pre_commit_test_1.py /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos 5-1 Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos, 5-1) ... Info: revproplist() ... svn:log: Delete one file svn:check-locks: true svn:author: barry svn:date: 2008-10-07T19:55:38.075866Z Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: test_1.output end ------------------------------------------ Info: Copy one file Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/configdir cp /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc/file1.txt /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc/file1copy.txt A /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc/file1copy.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/configdir checkin -m Copy one file /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/wc A wc/file1copy.txt Revision 7 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn-next/Extension/Tests/test_04_pre_commit_test_1.py /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos 6-1 Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-04/repos, 6-1) ... Info: revproplist() ... svn:log: Copy one file svn:check-locks: true svn:author: barry svn:date: 2008-10-07T19:55:40.622891Z Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path=u'/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: test_1.output end ------------------------------------------ pysvn-1.7.8/Tests/test-04.unix.known_good-py2-svn1.5.log000644 000771 000771 00000030217 11253135715 023112 0ustar00barrybarry000000 000000 WorkDir: /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25 PYTHON: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python Username: bscott Info: Command: mkdir testroot-04 Info: Command: cd testroot-04 Info: Command: mkdir tmp Info: Command: svnadmin create /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos Info: Testing - mkdir Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/configdir mkdir file:///Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos/trunk -m test-04 add trunk Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/configdir mkdir file:///Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos/trunk/test -m test-04 add test Info: Install hooks Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/configdir mkdir file:///Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos/trunk/test/a -m pre-commit test 1 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/test_04_pre_commit_test_1.py /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos 2-2 Info: pre commit test 1 Info: Transaction( /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos, 2-2) ... Info: revproplist() ... svn:log: pre-commit test 1 svn:check-locks: true svn:author: bscott svn:date: 2009-04-17T15:22:53.727841Z Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: test_1.output end ------------------------------------------ Info: Add two files Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/configdir checkout file:///Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos/trunk/test /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc A /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc/a U /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc Checked out revision 3 Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/configdir add /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc/file1.txt A /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/configdir add /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc/a/file1.txt A /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/configdir checkin -m Add two files /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc A wc/a/file1.txt A wc/file1.txt Revision 4 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/test_04_pre_commit_test_1.py /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos 3-3 Info: pre commit test 1 Info: Transaction( /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos, 3-3) ... Info: revproplist() ... svn:log: Add two files svn:check-locks: true svn:author: bscott svn:date: 2009-04-17T15:22:55.621602Z Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: test_1.output end ------------------------------------------ Info: Mod one file Mod one prop Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/configdir propset svn:eol-style native /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/configdir checkin -m Mod one file Mod one prop /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc M wc/a/file1.txt M wc/file1.txt Revision 5 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/test_04_pre_commit_test_1.py /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos 4-4 Info: pre commit test 1 Info: Transaction( /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos, 4-4) ... Info: revproplist() ... svn:log: Mod one file Mod one prop svn:check-locks: true svn:author: bscott svn:date: 2009-04-17T15:22:56.483707Z Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: test_1.output end ------------------------------------------ Info: Delete one file Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/configdir rm /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc/a/file1.txt D /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/configdir checkin -m Delete one file /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc D wc/a/file1.txt Revision 6 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/test_04_pre_commit_test_1.py /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos 5-5 Info: pre commit test 1 Info: Transaction( /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos, 5-5) ... Info: revproplist() ... svn:log: Delete one file svn:check-locks: true svn:author: bscott svn:date: 2009-04-17T15:22:57.458015Z Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: test_1.output end ------------------------------------------ Info: Copy one file Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/configdir cp /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc/file1.txt /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc/file1copy.txt A /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc/file1copy.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/configdir checkin -m Copy one file /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/wc A wc/file1copy.txt Revision 7 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/test_04_pre_commit_test_1.py /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos 6-6 Info: pre commit test 1 Info: Transaction( /Users/bscott/BuildTemp/Darwin_macmini/svn-1.5.6/pysvn/py25/Tests/testroot-04/repos, 6-6) ... Info: revproplist() ... svn:log: Copy one file svn:check-locks: true svn:author: bscott svn:date: 2009-04-17T15:22:59.276332Z Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path=u'/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: test_1.output end ------------------------------------------ pysvn-1.7.8/Tests/test-04.unix.known_good-py2-svn1.6.log000644 000771 000771 00000043565 12164337446 023134 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python Username: barry Info: Command: mkdir testroot-04 Info: Command: cd testroot-04 Info: Command: mkdir tmp Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos Info: Testing - mkdir Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk -m test-04 add trunk Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test -m test-04 add test Info: Install hooks Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test/a -m pre-commit test 1 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 2-2 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 2-2) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T17:37:25.566665Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 3 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 3, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T17:37:25.609987Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= Info: post_test_1.output end ------------------------------------- Info: Add two files Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc Checked out revision 3 Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Add two files /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Revision 4 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 3-3 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 3-3) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T17:37:26.169993Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 4 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 4, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T17:37:26.220972Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Mod one file Mod one prop Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Mod one file Mod one prop /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Revision 5 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 4-4 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 4-4) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T17:37:27.128077Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 5 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 5, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T17:37:27.177397Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Delete one file Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir rm /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Delete one file /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Revision 6 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 5-5 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 5-5) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T17:37:28.127076Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 6 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 6, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T17:37:28.177861Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Copy one file Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Copy one file /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt Revision 7 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 6-6 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 6-6) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T17:37:30.073400Z svn:log: Copy one file Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path=u'/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= /trunk/test/file1copy.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 7 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 7, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T17:37:30.119322Z svn:log: Copy one file Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path=u'/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= /trunk/test/file1copy.txt: kind= Info: post_test_1.output end ------------------------------------- pysvn-1.7.8/Tests/test-04.unix.known_good-py2-svn1.7.log000644 000771 000771 00000043675 12164346274 023136 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python Username: barry Info: Command: mkdir testroot-04 Info: Command: cd testroot-04 Info: Command: mkdir tmp Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos Info: Testing - mkdir Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk -m test-04 add trunk Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test -m test-04 add test Info: Install hooks Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test/a -m pre-commit test 1 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 2-2 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 2-2) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T18:34:59.699285Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 3 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 3, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T18:34:59.790538Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= Info: post_test_1.output end ------------------------------------- Info: Add two files Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc Checked out revision 3 Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Add two files /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Revision 4 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 3-3 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 3-3) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T18:35:00.173859Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 4 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 4, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T18:35:00.225436Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Mod one file Mod one prop Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Mod one file Mod one prop /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Revision 5 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 4-4 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 4-4) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T18:35:01.132494Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 5 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 5, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T18:35:01.182200Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Delete one file Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir rm /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Delete one file /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Revision 6 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 5-5 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 5-5) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T18:35:02.133968Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 6 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 6, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T18:35:02.176682Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Copy one file Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Copy one file /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt Revision 7 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 6-6 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 6-6) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T18:35:04.076776Z svn:log: Copy one file Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path=u'/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= /trunk/test/file1copy.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 7 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 7, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T18:35:04.121631Z svn:log: Copy one file Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path=u'/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= /trunk/test/file1copy.txt: kind= Info: post_test_1.output end ------------------------------------- pysvn-1.7.8/Tests/test-04.unix.known_good-py2-svn1.8.log000644 000771 000771 00000044212 12177517456 023131 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python Username: barry Info: Command: mkdir testroot-04 Info: Command: cd testroot-04 Info: Command: mkdir tmp Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos Info: Testing - mkdir Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk -m test-04 add trunk Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test -m test-04 add test Info: Install hooks Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test/a -m pre-commit test 1 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 2-2 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 2-2) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T18:35:24.618341Z svn:log: pre-commit test 1 svn:txn-client-compat-version: 1.8.1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 3 2-2 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 3, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T18:35:24.711174Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= Info: post_test_1.output end ------------------------------------- Info: Add two files Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc Checked out revision 3 Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Add two files /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Revision 4 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 3-3 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 3-3) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T18:35:25.175479Z svn:log: Add two files svn:txn-client-compat-version: 1.8.1 Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 4 3-3 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 4, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T18:35:25.230460Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Mod one file Mod one prop Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Mod one file Mod one prop /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Revision 5 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 4-4 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 4-4) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T18:35:26.131797Z svn:log: Mod one file Mod one prop svn:txn-client-compat-version: 1.8.1 Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 5 4-4 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 5, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T18:35:26.183065Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Delete one file Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir rm /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Delete one file /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Revision 6 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 5-5 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 5-5) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T18:35:27.207856Z svn:log: Delete one file svn:txn-client-compat-version: 1.8.1 Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 6 5-5 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 6, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T18:35:27.280501Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Copy one file Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt Info: Command: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Copy one file /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt Revision 7 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 6-6 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 6-6) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T18:35:29.074183Z svn:log: Copy one file svn:txn-client-compat-version: 1.8.1 Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path=u'/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= /trunk/test/file1copy.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 7 6-6 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 7, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T18:35:29.122110Z svn:log: Copy one file Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path=u'/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= /trunk/test/file1copy.txt: kind= Info: post_test_1.output end ------------------------------------- pysvn-1.7.8/Tests/test-04.unix.known_good-py3-svn1.5.log000644 000771 000771 00000027610 11255417030 023111 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31 PYTHON: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python Username: barry Info: Command: mkdir testroot-04 Info: Command: cd testroot-04 Info: Command: mkdir tmp Info: Command: svnadmin create /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos Info: Testing - mkdir Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/configdir mkdir file:///Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos/trunk -m test-04 add trunk Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/configdir mkdir file:///Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos/trunk/test -m test-04 add test Info: Install hooks Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/configdir mkdir file:///Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos/trunk/test/a -m pre-commit test 1 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/test_04_pre_commit_test_1.py /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos 2-2 Info: pre commit test 1 Info: Transaction( /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos, 2-2) ... Info: revproplist() ... svn:log: pre-commit test 1 svn:check-locks: true svn:author: barry svn:date: 2009-09-20T12:11:45.157837Z Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: test_1.output end ------------------------------------------ Info: Add two files Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/configdir checkout file:///Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos/trunk/test /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc A /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc/a U /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc Checked out revision 3 Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/configdir add /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc/file1.txt A /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/configdir add /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc/a/file1.txt A /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/configdir checkin -m Add two files /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc A wc/a/file1.txt A wc/file1.txt Revision 4 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/test_04_pre_commit_test_1.py /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos 3-3 Info: pre commit test 1 Info: Transaction( /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos, 3-3) ... Info: revproplist() ... svn:log: Add two files svn:check-locks: true svn:author: barry svn:date: 2009-09-20T12:11:46.417625Z Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: test_1.output end ------------------------------------------ Info: Mod one file Mod one prop Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/configdir propset svn:eol-style native /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/configdir checkin -m Mod one file Mod one prop /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc M wc/a/file1.txt M wc/file1.txt Revision 5 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/test_04_pre_commit_test_1.py /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos 4-4 Info: pre commit test 1 Info: Transaction( /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos, 4-4) ... Info: revproplist() ... svn:log: Mod one file Mod one prop svn:check-locks: true svn:author: barry svn:date: 2009-09-20T12:11:47.298856Z Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: test_1.output end ------------------------------------------ Info: Delete one file Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/configdir rm /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc/a/file1.txt D /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/configdir checkin -m Delete one file /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc D wc/a/file1.txt Revision 6 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/test_04_pre_commit_test_1.py /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos 5-5 Info: pre commit test 1 Info: Transaction( /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos, 5-5) ... Info: revproplist() ... svn:log: Delete one file svn:check-locks: true svn:author: barry svn:date: 2009-09-20T12:11:48.318341Z Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: test_1.output end ------------------------------------------ Info: Copy one file Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/configdir cp /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc/file1.txt /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc/file1copy.txt A /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc/file1copy.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/configdir checkin -m Copy one file /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/wc A wc/file1copy.txt Revision 7 Info: test_1.output start ---------------------------------------- /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/test_04_pre_commit_test_1.py /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos 6-6 Info: pre commit test 1 Info: Transaction( /Users/barry/BuildTemp/Darwin_body/svn-1.5.6/pysvn/py31/Tests/testroot-04/repos, 6-6) ... Info: revproplist() ... svn:log: Copy one file svn:check-locks: true svn:author: barry svn:date: 2009-09-20T12:11:50.208276Z Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path='/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: test_1.output end ------------------------------------------ pysvn-1.7.8/Tests/test-04.unix.known_good-py3-svn1.6.log000644 000771 000771 00000043373 11507354105 023121 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python Username: barry Info: Command: mkdir testroot-04 Info: Command: cd testroot-04 Info: Command: mkdir tmp Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos Info: Testing - mkdir Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk -m test-04 add trunk Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test -m test-04 add test Info: Install hooks Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test/a -m pre-commit test 1 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 2-2 Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 2-2) ... Info: revproplist() ... svn:log: pre-commit test 1 svn:check-locks: true svn:author: barry svn:date: 2010-12-31T13:14:15.110936Z Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 3 is_revision Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 3, is_revision=True) ... Info: revproplist() ... svn:log: pre-commit test 1 svn:author: barry svn:date: 2010-12-31T13:14:15.226667Z Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= Info: post_test_1.output end ------------------------------------- Info: Add two files Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc Checked out revision 3 Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Add two files /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Revision 4 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 3-3 Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 3-3) ... Info: revproplist() ... svn:log: Add two files svn:check-locks: true svn:author: barry svn:date: 2010-12-31T13:14:16.246329Z Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 4 is_revision Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 4, is_revision=True) ... Info: revproplist() ... svn:log: Add two files svn:author: barry svn:date: 2010-12-31T13:14:16.482983Z Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Mod one file Mod one prop Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Mod one file Mod one prop /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Revision 5 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 4-4 Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 4-4) ... Info: revproplist() ... svn:log: Mod one file Mod one prop svn:check-locks: true svn:author: barry svn:date: 2010-12-31T13:14:17.199908Z Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 5 is_revision Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 5, is_revision=True) ... Info: revproplist() ... svn:log: Mod one file Mod one prop svn:author: barry svn:date: 2010-12-31T13:14:17.321251Z Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Delete one file Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir rm /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Delete one file /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Revision 6 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 5-5 Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 5-5) ... Info: revproplist() ... svn:log: Delete one file svn:check-locks: true svn:author: barry svn:date: 2010-12-31T13:14:18.193010Z Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 6 is_revision Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 6, is_revision=True) ... Info: revproplist() ... svn:log: Delete one file svn:author: barry svn:date: 2010-12-31T13:14:18.330038Z Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Copy one file Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Copy one file /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt Revision 7 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 6-6 Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 6-6) ... Info: revproplist() ... svn:log: Copy one file svn:check-locks: true svn:author: barry svn:date: 2010-12-31T13:14:20.182595Z Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path='/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= /trunk/test/file1copy.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/3.1/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 7 is_revision Info: pre commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 7, is_revision=True) ... Info: revproplist() ... svn:log: Copy one file svn:author: barry svn:date: 2010-12-31T13:14:20.722154Z Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path='/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= /trunk/test/file1copy.txt: kind= Info: post_test_1.output end ------------------------------------- pysvn-1.7.8/Tests/test-04.unix.known_good-py3-svn1.7.log000644 000771 000771 00000043673 12204164033 023117 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python Username: barry Info: Command: mkdir testroot-04 Info: Command: cd testroot-04 Info: Command: mkdir tmp Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos Info: Testing - mkdir Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk -m test-04 add trunk Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test -m test-04 add test Info: Install hooks Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test/a -m pre-commit test 1 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 2-2 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 2-2) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-18T15:25:59.705493Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 3 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 3, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-18T15:25:59.835390Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= Info: post_test_1.output end ------------------------------------- Info: Add two files Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc Checked out revision 3 Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Add two files /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Revision 4 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 3-3 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 3-3) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-18T15:26:01.229368Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 4 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 4, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-18T15:26:01.308129Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Mod one file Mod one prop Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Mod one file Mod one prop /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Revision 5 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 4-4 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 4-4) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-18T15:26:02.242510Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 5 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 5, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-18T15:26:02.314013Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Delete one file Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir rm /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Delete one file /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Revision 6 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 5-5 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 5-5) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-18T15:26:03.219870Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 6 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 6, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-18T15:26:03.283417Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Copy one file Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt Info: Command: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Copy one file /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt Revision 7 Info: pre_test_1.output start ------------------------------------ /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 6-6 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 6-6) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-18T15:26:05.104372Z svn:log: Copy one file Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path='/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= /trunk/test/file1copy.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 7 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 7, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-18T15:26:05.170124Z svn:log: Copy one file Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path='/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= /trunk/test/file1copy.txt: kind= Info: post_test_1.output end ------------------------------------- pysvn-1.7.8/Tests/test-04.unix.known_good-py3-svn1.8.log000644 000771 000771 00000041050 12177545222 023117 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/local/bin/python3.3 Username: barry Info: Command: mkdir testroot-04 Info: Command: cd testroot-04 Info: Command: mkdir tmp Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos Info: Testing - mkdir Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk -m test-04 add trunk Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test -m test-04 add test Info: Install hooks Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test/a -m pre-commit test 1 Info: pre_test_1.output start ------------------------------------ /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 2-2 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 2-2) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T20:54:48.624568Z svn:log: pre-commit test 1 svn:txn-client-compat-version: 1.8.1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 3 2-2 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 3, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T20:54:48.731535Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= Info: post_test_1.output end ------------------------------------- Info: Add two files Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos/trunk/test /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc Checked out revision 3 Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir add /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Add two files /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Revision 4 Info: pre_test_1.output start ------------------------------------ /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 3-3 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 3-3) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T20:54:49.208094Z svn:log: Add two files svn:txn-client-compat-version: 1.8.1 Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 4 3-3 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 4, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T20:54:49.274560Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Mod one file Mod one prop Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir propset svn:eol-style native /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt property_added /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Mod one file Mod one prop /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt Revision 5 Info: pre_test_1.output start ------------------------------------ /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 4-4 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 4-4) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T20:54:50.153490Z svn:log: Mod one file Mod one prop svn:txn-client-compat-version: 1.8.1 Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 5 4-4 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 5, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T20:54:50.217424Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=0, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A\n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Delete one file Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir rm /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Delete one file /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc D /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/a/file1.txt Revision 6 Info: pre_test_1.output start ------------------------------------ /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 5-5 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 5-5) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T20:54:51.153698Z svn:log: Delete one file svn:txn-client-compat-version: 1.8.1 Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 6 5-5 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 6, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T20:54:51.212357Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= Info: post_test_1.output end ------------------------------------- Info: Copy one file Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir cp /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1.txt /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt Info: Command: /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.01.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/configdir checkin -m Copy one file /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/wc/file1copy.txt Revision 7 Info: pre_test_1.output start ------------------------------------ /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py pre-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 6-6 Info: pre-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 6-6) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T20:54:53.084672Z svn:log: Copy one file svn:txn-client-compat-version: 1.8.1 Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path='/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= /trunk/test/file1copy.txt: kind= Info: pre_test_1.output end -------------------------------------- Info: post_test_1.output start ----------------------------------- /usr/local/bin/python3.3 /Users/barry/wc/svn/pysvn/Extension/Tests/test_04_commit_hook_test_1.py post-commit /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos 7 6-6 is_revision Info: post-commit test 1 Info: Transaction( /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-04/repos, 7, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T20:54:53.145486Z svn:log: Copy one file Info: changed() ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 contents: 'file1 ROOT ln 2\n' Info: changed( copy_info=True ) ... trunk/test/file1copy.txt: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=5 copyfrom_path='/trunk/test/file1.txt' contents: 'file1 ROOT ln 2\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= /trunk/test/file1copy.txt: kind= Info: post_test_1.output end ------------------------------------- pysvn-1.7.8/Tests/test-04.win32.known_good-py2-svn1.4.log000644 000771 000771 00000017274 11253135715 023100 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests > setlocal L:\wc\pysvn\trunk\pysvn\Extension\Tests > set PYTHONPATH=L:\wc\pysvn\trunk\pysvn\Extension\Source;L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client L:\wc\pysvn\trunk\pysvn\Extension\Tests > set PYSVN=c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir L:\wc\pysvn\trunk\pysvn\Extension\Tests > mkdir testroot-04 L:\wc\pysvn\trunk\pysvn\Extension\Tests > subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-04 L:\wc\pysvn\trunk\pysvn\Extension\Tests > cd /d b:\ B:\ > svnadmin create b:\repos B:\ > rem mkdir B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk -m "test-01 add trunk" B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test -m "test-01 add test" B:\ > rem Install hooks B:\ > rem echo echo svnlook info %1 -t %2 ^>b:\test_1.output >b:\repos\hooks\pre-commit.cmd B:\ > rem echo svnlook info %1 -t %2 ^>^>b:\test_1.output >>b:\repos\hooks\pre-commit.cmd B:\ > rem echo echo svnlook changed %1 -t %2 ^>^>b:\test_1.output >>b:\repos\hooks\pre-commit.cmd B:\ > rem echo svnlook changed %1 -t %2 ^>^>b:\test_1.output >>b:\repos\hooks\pre-commit.cmd B:\ > echo echo c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py %* >b:\test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo set PYTHONPATH=L:\wc\pysvn\trunk\pysvn\Extension\Source;L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py %* >>b:\test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > rem Add one dir B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test/a -m "pre-commit test 1" B:\ > rem test_1.output start ---------------------------------------- B:\ > type b:\test_1.output c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py b:/repos 2-1 Info: pre commit test 1 Info: Transaction( b:/repos, 2-1) ... Info: revproplist() ... svn:log: pre-commit test 1 svn:check-locks: true svn:author: barry svn:date: 2008-10-12T13:12:57.855539Z Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None B:\ > rem test_1.output end ------------------------------------------ B:\ > rem Add two files B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir co file:///b:/repos/trunk/test b:\wc A b:/wc/a U b:/wc Checked out revision 3 B:\ > echo file1 ROOT 1>b:\wc\file1.txt B:\ > echo file1 A 1>b:\wc\a\file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\file1.txt A b:/wc/file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\a\file1.txt A b:/wc/a/file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Add two files" b:\wc A wc/a/file1.txt A wc/file1.txt Revision 4 B:\ > rem test_1.output start ---------------------------------------- B:\ > type b:\test_1.output c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py b:/repos 3-1 Info: pre commit test 1 Info: Transaction( b:/repos, 3-1) ... Info: revproplist() ... svn:log: Add two files svn:check-locks: true svn:author: barry svn:date: 2008-10-12T13:12:59.818459Z Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' B:\ > rem test_1.output end ------------------------------------------ B:\ > rem Mod one file Mod one prop B:\ > echo file1 ROOT ln 2 1>b:\wc\file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir propset svn:eol-style native b:\wc\a\file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Mod one file Mod one prop" b:\wc M wc/a/file1.txt M wc/file1.txt Revision 5 B:\ > rem test_1.output start ---------------------------------------- B:\ > type b:\test_1.output c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py b:/repos 4-1 Info: pre commit test 1 Info: Transaction( b:/repos, 4-1) ... Info: revproplist() ... svn:log: Mod one file Mod one prop svn:check-locks: true svn:author: barry svn:date: 2008-10-12T13:13:01.571067Z Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' B:\ > rem test_1.output end ------------------------------------------ B:\ > rem Delete one file B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir rm b:\wc\a\file1.txt D b:/wc/a/file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Delete one file" b:\wc D wc/a/file1.txt Revision 6 B:\ > rem test_1.output start ---------------------------------------- B:\ > type b:\test_1.output c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py b:/repos 5-1 Info: pre commit test 1 Info: Transaction( b:/repos, 5-1) ... Info: revproplist() ... svn:log: Delete one file svn:check-locks: true svn:author: barry svn:date: 2008-10-12T13:13:03.584062Z Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None B:\ > rem test_1.output end ------------------------------------------ B:\ > endlocal pysvn-1.7.8/Tests/test-04.win32.known_good-py2-svn1.5.log000644 000771 000771 00000017315 11253135715 023075 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python25\python.exe Username: barry L:\wc\pysvn\trunk\pysvn\Extension\Tests > setlocal L:\wc\pysvn\trunk\pysvn\Extension\Tests > set PYTHONPATH=L:\wc\pysvn\trunk\pysvn\Extension\Source;L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client L:\wc\pysvn\trunk\pysvn\Extension\Tests > set PYSVN=c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir L:\wc\pysvn\trunk\pysvn\Extension\Tests > mkdir testroot-04 L:\wc\pysvn\trunk\pysvn\Extension\Tests > subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-04 L:\wc\pysvn\trunk\pysvn\Extension\Tests > cd /d b:\ B:\ > svnadmin create b:\repos B:\ > rem mkdir B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk -m "test-01 add trunk" B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test -m "test-01 add test" B:\ > rem Install hooks B:\ > rem echo echo svnlook info %1 -t %2 ^>b:\test_1.output >b:\repos\hooks\pre-commit.cmd B:\ > rem echo svnlook info %1 -t %2 ^>^>b:\test_1.output >>b:\repos\hooks\pre-commit.cmd B:\ > rem echo echo svnlook changed %1 -t %2 ^>^>b:\test_1.output >>b:\repos\hooks\pre-commit.cmd B:\ > rem echo svnlook changed %1 -t %2 ^>^>b:\test_1.output >>b:\repos\hooks\pre-commit.cmd B:\ > echo echo c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py %* >b:\test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo set PYTHONPATH=L:\wc\pysvn\trunk\pysvn\Extension\Source;L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py %* >>b:\test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > rem Add one dir B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test/a -m "pre-commit test 1" B:\ > rem test_1.output start ---------------------------------------- B:\ > type b:\test_1.output c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py b:\repos 2-2 Info: pre commit test 1 Info: Transaction( b:\repos, 2-2) ... Info: revproplist() ... svn:log: pre-commit test 1 svn:check-locks: true svn:author: barry svn:date: 2008-10-12T11:04:04.078898Z Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None B:\ > rem test_1.output end ------------------------------------------ B:\ > rem Add two files B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir co file:///b:/repos/trunk/test b:\wc A b:/wc/a U b:/wc Checked out revision 3 B:\ > echo file1 ROOT 1>b:\wc\file1.txt B:\ > echo file1 A 1>b:\wc\a\file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\file1.txt A b:/wc/file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\a\file1.txt A b:/wc/a/file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Add two files" b:\wc A wc/a/file1.txt A wc/file1.txt Revision 4 B:\ > rem test_1.output start ---------------------------------------- B:\ > type b:\test_1.output c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py b:\repos 3-3 Info: pre commit test 1 Info: Transaction( b:\repos, 3-3) ... Info: revproplist() ... svn:log: Add two files svn:check-locks: true svn:author: barry svn:date: 2008-10-12T11:04:06.912889Z Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' B:\ > rem test_1.output end ------------------------------------------ B:\ > rem Mod one file Mod one prop B:\ > echo file1 ROOT ln 2 1>b:\wc\file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir propset svn:eol-style native b:\wc\a\file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Mod one file Mod one prop" b:\wc M wc/a/file1.txt M wc/file1.txt Revision 5 B:\ > rem test_1.output start ---------------------------------------- B:\ > type b:\test_1.output c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py b:\repos 4-4 Info: pre commit test 1 Info: Transaction( b:\repos, 4-4) ... Info: revproplist() ... svn:log: Mod one file Mod one prop svn:check-locks: true svn:author: barry svn:date: 2008-10-12T11:04:08.655342Z Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' B:\ > rem test_1.output end ------------------------------------------ B:\ > rem Delete one file B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir rm b:\wc\a\file1.txt D b:/wc/a/file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Delete one file" b:\wc D wc/a/file1.txt Revision 6 B:\ > rem test_1.output start ---------------------------------------- B:\ > type b:\test_1.output c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py b:\repos 5-5 Info: pre commit test 1 Info: Transaction( b:\repos, 5-5) ... Info: revproplist() ... svn:log: Delete one file svn:check-locks: true svn:author: barry svn:date: 2008-10-12T11:04:10.698218Z Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None B:\ > rem test_1.output end ------------------------------------------ B:\ > endlocal pysvn-1.7.8/Tests/test-04.win32.known_good-py2-svn1.6.log000644 000771 000771 00000031554 12052506061 023071 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python27.win32\python.exe Username: barry C:\wc\svn\pysvn\Extension\Tests > setlocal C:\wc\svn\pysvn\Extension\Tests > set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client C:\wc\svn\pysvn\Extension\Tests > set PYSVN=c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir C:\wc\svn\pysvn\Extension\Tests > mkdir testroot-04 C:\wc\svn\pysvn\Extension\Tests > subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-04 C:\wc\svn\pysvn\Extension\Tests > cd /d B:\ B:\ > svnadmin create b:\repos B:\ > rem mkdir B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk -m "test-01 add trunk" B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test -m "test-01 add test" B:\ > rem Install hooks B:\ > echo echo c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py %* >b:\pre_test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py %* >>b:\pre_test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo echo c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py %* is_revision >b:\post_test_1.output 1>>b:\repos\hooks\post-commit.cmd B:\ > echo set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\post-commit.cmd B:\ > echo c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py %* is_revision >>b:\post_test_1.output 1>>b:\repos\hooks\post-commit.cmd B:\ > rem Add one dir B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test/a -m "pre-commit test 1" B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 2-2 Info: pre commit test 1 Info: Transaction( B:\repos, 2-2) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2012-11-19T19:41:12.416405Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 3 is_revision Info: pre commit test 1 Info: Transaction( B:\repos, 3, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2012-11-19T19:41:12.509997Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Add two files B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir co file:///b:/repos/trunk/test b:\wc A b:/wc/a U b:/wc Checked out revision 3 B:\ > echo file1 ROOT 1>b:\wc\file1.txt B:\ > echo file1 A 1>b:\wc\a\file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\file1.txt A b:/wc/file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\a\file1.txt A b:/wc/a/file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Add two files" b:\wc A B:/wc/a/file1.txt A B:/wc/file1.txt Revision 4 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 3-3 Info: pre commit test 1 Info: Transaction( B:\repos, 3-3) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2012-11-19T19:41:12.884366Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 4 is_revision Info: pre commit test 1 Info: Transaction( B:\repos, 4, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2012-11-19T19:41:12.993557Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Mod one file Mod one prop B:\ > echo file1 ROOT ln 2 1>b:\wc\file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir propset svn:eol-style native b:\wc\a\file1.txt property_added b:/wc/a/file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Mod one file Mod one prop" b:\wc M B:/wc/a/file1.txt M B:/wc/file1.txt Revision 5 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 4-4 Info: pre commit test 1 Info: Transaction( B:\repos, 4-4) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2012-11-19T19:41:13.227537Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 5 is_revision Info: pre commit test 1 Info: Transaction( B:\repos, 5, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2012-11-19T19:41:13.336728Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Delete one file B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir rm b:\wc\a\file1.txt D b:/wc/a/file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Delete one file" b:\wc D B:/wc/a/file1.txt Revision 6 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 5-5 Info: pre commit test 1 Info: Transaction( B:\repos, 5-5) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2012-11-19T19:41:13.601906Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 6 is_revision Info: pre commit test 1 Info: Transaction( B:\repos, 6, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2012-11-19T19:41:13.679900Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > endlocal pysvn-1.7.8/Tests/test-04.win32.known_good-py2-svn1.7.log000644 000771 000771 00000032020 12164357546 023077 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python27.win32\python.exe Username: barry C:\wc\svn\pysvn\Extension\Tests > setlocal C:\wc\svn\pysvn\Extension\Tests > set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client C:\wc\svn\pysvn\Extension\Tests > set PYSVN=c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir C:\wc\svn\pysvn\Extension\Tests > mkdir testroot-04 C:\wc\svn\pysvn\Extension\Tests > subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-04 C:\wc\svn\pysvn\Extension\Tests > cd /d B:\ B:\ > svnadmin create b:\repos B:\ > rem mkdir B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk -m "test-01 add trunk" B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test -m "test-01 add test" B:\ > rem Install hooks B:\ > echo echo c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit %* >b:\pre_test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit %* >>b:\pre_test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo echo c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit %* is_revision >b:\post_test_1.output 1>>b:\repos\hooks\post-commit.cmd B:\ > echo set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\post-commit.cmd B:\ > echo c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit %* is_revision >>b:\post_test_1.output 1>>b:\repos\hooks\post-commit.cmd B:\ > rem Add one dir B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test/a -m "pre-commit test 1" B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 2-2 Info: pre-commit test 1 Info: Transaction( B:\repos, 2-2) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T19:43:13.731229Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 3 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 3, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T19:43:13.824780Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Add two files B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir co file:///b:/repos/trunk/test b:\wc A B:/wc/a U B:/wc update_started B:/wc Checked out revision 3 B:\ > echo file1 ROOT 1>b:\wc\file1.txt B:\ > echo file1 A 1>b:\wc\a\file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\file1.txt A B:/wc/file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\a\file1.txt A B:/wc/a/file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Add two files" b:\wc A B:/wc/a/file1.txt A B:/wc/file1.txt Revision 4 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 3-3 Info: pre-commit test 1 Info: Transaction( B:\repos, 3-3) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T19:43:14.245757Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 4 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 4, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T19:43:14.370491Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Mod one file Mod one prop B:\ > echo file1 ROOT ln 2 1>b:\wc\file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir propset svn:eol-style native b:\wc\a\file1.txt property_added B:/wc/a/file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Mod one file Mod one prop" b:\wc M B:/wc/a/file1.txt M B:/wc/file1.txt Revision 5 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 4-4 Info: pre-commit test 1 Info: Transaction( B:\repos, 4-4) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T19:43:14.635549Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 5 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 5, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T19:43:14.744691Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Delete one file B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir rm b:\wc\a\file1.txt D B:/wc/a/file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Delete one file" b:\wc D B:/wc/a/file1.txt Revision 6 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 5-5 Info: pre-commit test 1 Info: Transaction( B:\repos, 5-5) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T19:43:15.025342Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 6 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 6, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T19:43:15.118892Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > endlocal pysvn-1.7.8/Tests/test-04.win32.known_good-py2-svn1.8.log000644 000771 000771 00000032270 12164262477 023105 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python27.win32\python.exe Username: barry C:\wc\svn\pysvn\Extension\Tests > setlocal C:\wc\svn\pysvn\Extension\Tests > set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client C:\wc\svn\pysvn\Extension\Tests > set PYSVN=c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir C:\wc\svn\pysvn\Extension\Tests > mkdir testroot-04 C:\wc\svn\pysvn\Extension\Tests > subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-04 C:\wc\svn\pysvn\Extension\Tests > cd /d B:\ B:\ > svnadmin create b:\repos B:\ > rem mkdir B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk -m "test-01 add trunk" B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test -m "test-01 add test" B:\ > rem Install hooks B:\ > echo echo c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit %* >b:\pre_test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit %* >>b:\pre_test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo echo c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit %* is_revision >b:\post_test_1.output 1>>b:\repos\hooks\post-commit.cmd B:\ > echo set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\post-commit.cmd B:\ > echo c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit %* is_revision >>b:\post_test_1.output 1>>b:\repos\hooks\post-commit.cmd B:\ > rem Add one dir B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test/a -m "pre-commit test 1" B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 2-2 Info: pre-commit test 1 Info: Transaction( B:\repos, 2-2) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T11:12:24.739260Z svn:log: pre-commit test 1 svn:txn-client-compat-version: 1.8.0 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 3 2-2 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 3, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T11:12:24.832813Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Add two files B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir co file:///b:/repos/trunk/test b:\wc A B:/wc/a U B:/wc update_started B:/wc Checked out revision 3 B:\ > echo file1 ROOT 1>b:\wc\file1.txt B:\ > echo file1 A 1>b:\wc\a\file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\file1.txt A B:/wc/file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\a\file1.txt A B:/wc/a/file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Add two files" b:\wc A B:/wc/a/file1.txt A B:/wc/file1.txt Revision 4 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 3-3 Info: pre-commit test 1 Info: Transaction( B:\repos, 3-3) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T11:12:25.222618Z svn:log: Add two files svn:txn-client-compat-version: 1.8.0 Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 4 3-3 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 4, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T11:12:25.394132Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Mod one file Mod one prop B:\ > echo file1 ROOT ln 2 1>b:\wc\file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir propset svn:eol-style native b:\wc\a\file1.txt property_added B:/wc/a/file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Mod one file Mod one prop" b:\wc M B:/wc/a/file1.txt M B:/wc/file1.txt Revision 5 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 4-4 Info: pre-commit test 1 Info: Transaction( B:\repos, 4-4) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T11:12:25.659200Z svn:log: Mod one file Mod one prop svn:txn-client-compat-version: 1.8.0 Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 5 4-4 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 5, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T11:12:25.799530Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Delete one file B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir rm b:\wc\a\file1.txt D B:/wc/a/file1.txt B:\ > c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Delete one file" b:\wc D B:/wc/a/file1.txt Revision 6 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 5-5 Info: pre-commit test 1 Info: Transaction( B:\repos, 5-5) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-07-01T11:12:26.049005Z svn:log: Delete one file svn:txn-client-compat-version: 1.8.0 Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 6 5-5 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 6, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-07-01T11:12:26.173742Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > endlocal pysvn-1.7.8/Tests/test-04.win32.known_good-py3-svn1.5.log000644 000771 000771 00000017315 11255444226 023100 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python25\python.exe Username: barry L:\wc\pysvn\trunk\pysvn\Extension\Tests > setlocal L:\wc\pysvn\trunk\pysvn\Extension\Tests > set PYTHONPATH=L:\wc\pysvn\trunk\pysvn\Extension\Source;L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client L:\wc\pysvn\trunk\pysvn\Extension\Tests > set PYSVN=c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir L:\wc\pysvn\trunk\pysvn\Extension\Tests > mkdir testroot-04 L:\wc\pysvn\trunk\pysvn\Extension\Tests > subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-04 L:\wc\pysvn\trunk\pysvn\Extension\Tests > cd /d b:\ B:\ > svnadmin create b:\repos B:\ > rem mkdir B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk -m "test-01 add trunk" B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test -m "test-01 add test" B:\ > rem Install hooks B:\ > rem echo echo svnlook info %1 -t %2 ^>b:\test_1.output >b:\repos\hooks\pre-commit.cmd B:\ > rem echo svnlook info %1 -t %2 ^>^>b:\test_1.output >>b:\repos\hooks\pre-commit.cmd B:\ > rem echo echo svnlook changed %1 -t %2 ^>^>b:\test_1.output >>b:\repos\hooks\pre-commit.cmd B:\ > rem echo svnlook changed %1 -t %2 ^>^>b:\test_1.output >>b:\repos\hooks\pre-commit.cmd B:\ > echo echo c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py %* >b:\test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo set PYTHONPATH=L:\wc\pysvn\trunk\pysvn\Extension\Source;L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py %* >>b:\test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > rem Add one dir B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test/a -m "pre-commit test 1" B:\ > rem test_1.output start ---------------------------------------- B:\ > type b:\test_1.output c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py b:\repos 2-2 Info: pre commit test 1 Info: Transaction( b:\repos, 2-2) ... Info: revproplist() ... svn:log: pre-commit test 1 svn:check-locks: true svn:author: barry svn:date: 2008-10-12T11:04:04.078898Z Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None B:\ > rem test_1.output end ------------------------------------------ B:\ > rem Add two files B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir co file:///b:/repos/trunk/test b:\wc A b:/wc/a U b:/wc Checked out revision 3 B:\ > echo file1 ROOT 1>b:\wc\file1.txt B:\ > echo file1 A 1>b:\wc\a\file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\file1.txt A b:/wc/file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\a\file1.txt A b:/wc/a/file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Add two files" b:\wc A wc/a/file1.txt A wc/file1.txt Revision 4 B:\ > rem test_1.output start ---------------------------------------- B:\ > type b:\test_1.output c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py b:\repos 3-3 Info: pre commit test 1 Info: Transaction( b:\repos, 3-3) ... Info: revproplist() ... svn:log: Add two files svn:check-locks: true svn:author: barry svn:date: 2008-10-12T11:04:06.912889Z Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' B:\ > rem test_1.output end ------------------------------------------ B:\ > rem Mod one file Mod one prop B:\ > echo file1 ROOT ln 2 1>b:\wc\file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir propset svn:eol-style native b:\wc\a\file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Mod one file Mod one prop" b:\wc M wc/a/file1.txt M wc/file1.txt Revision 5 B:\ > rem test_1.output start ---------------------------------------- B:\ > type b:\test_1.output c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py b:\repos 4-4 Info: pre commit test 1 Info: Transaction( b:\repos, 4-4) ... Info: revproplist() ... svn:log: Mod one file Mod one prop svn:check-locks: true svn:author: barry svn:date: 2008-10-12T11:04:08.655342Z Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' B:\ > rem test_1.output end ------------------------------------------ B:\ > rem Delete one file B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir rm b:\wc\a\file1.txt D b:/wc/a/file1.txt B:\ > c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Delete one file" b:\wc D wc/a/file1.txt Revision 6 B:\ > rem test_1.output start ---------------------------------------- B:\ > type b:\test_1.output c:\python25\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Tests\test_04_pre_commit_test_1.py b:\repos 5-5 Info: pre commit test 1 Info: Transaction( b:\repos, 5-5) ... Info: revproplist() ... svn:log: Delete one file svn:check-locks: true svn:author: barry svn:date: 2008-10-12T11:04:10.698218Z Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None B:\ > rem test_1.output end ------------------------------------------ B:\ > endlocal pysvn-1.7.8/Tests/test-04.win32.known_good-py3-svn1.6.log000644 000771 000771 00000031303 12052502536 023065 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry C:\wc\svn\pysvn\Extension\Tests > setlocal C:\wc\svn\pysvn\Extension\Tests > set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client C:\wc\svn\pysvn\Extension\Tests > set PYSVN=c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir C:\wc\svn\pysvn\Extension\Tests > mkdir testroot-04 C:\wc\svn\pysvn\Extension\Tests > subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-04 C:\wc\svn\pysvn\Extension\Tests > cd /d B:\ B:\ > svnadmin create b:\repos B:\ > rem mkdir B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk -m "test-01 add trunk" B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test -m "test-01 add test" B:\ > rem Install hooks B:\ > echo echo c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py %* >b:\pre_test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py %* >>b:\pre_test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo echo c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py %* is_revision >b:\post_test_1.output 1>>b:\repos\hooks\post-commit.cmd B:\ > echo set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\post-commit.cmd B:\ > echo c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py %* is_revision >>b:\post_test_1.output 1>>b:\repos\hooks\post-commit.cmd B:\ > rem Add one dir B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test/a -m "pre-commit test 1" B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 2-2 Info: pre commit test 1 Info: Transaction( B:\repos, 2-2) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2012-11-19T19:13:48.732162Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 3 is_revision Info: pre commit test 1 Info: Transaction( B:\repos, 3, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2012-11-19T19:13:48.856950Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Add two files B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir co file:///b:/repos/trunk/test b:\wc A b:/wc/a U b:/wc Checked out revision 3 B:\ > echo file1 ROOT 1>b:\wc\file1.txt B:\ > echo file1 A 1>b:\wc\a\file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\file1.txt A b:/wc/file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\a\file1.txt A b:/wc/a/file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Add two files" b:\wc A B:/wc/a/file1.txt A B:/wc/file1.txt Revision 4 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 3-3 Info: pre commit test 1 Info: Transaction( B:\repos, 3-3) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2012-11-19T19:13:49.402897Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 4 is_revision Info: pre commit test 1 Info: Transaction( B:\repos, 4, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2012-11-19T19:13:49.543284Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Mod one file Mod one prop B:\ > echo file1 ROOT ln 2 1>b:\wc\file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir propset svn:eol-style native b:\wc\a\file1.txt property_added b:/wc/a/file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Mod one file Mod one prop" b:\wc M B:/wc/a/file1.txt M B:/wc/file1.txt Revision 5 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 4-4 Info: pre commit test 1 Info: Transaction( B:\repos, 4-4) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2012-11-19T19:13:49.886451Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 5 is_revision Info: pre commit test 1 Info: Transaction( B:\repos, 5, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2012-11-19T19:13:50.026837Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Delete one file B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir rm b:\wc\a\file1.txt D b:/wc/a/file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Delete one file" b:\wc D B:/wc/a/file1.txt Revision 6 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 5-5 Info: pre commit test 1 Info: Transaction( B:\repos, 5-5) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2012-11-19T19:13:50.370004Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py B:\repos 6 is_revision Info: pre commit test 1 Info: Transaction( B:\repos, 6, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2012-11-19T19:13:50.479194Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > endlocal pysvn-1.7.8/Tests/test-04.win32.known_good-py3-svn1.7.log000644 000771 000771 00000031546 12177165073 023110 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry C:\wc\svn\pysvn\Extension\Tests > setlocal C:\wc\svn\pysvn\Extension\Tests > set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client C:\wc\svn\pysvn\Extension\Tests > set PYSVN=c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir C:\wc\svn\pysvn\Extension\Tests > mkdir testroot-04 C:\wc\svn\pysvn\Extension\Tests > subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-04 C:\wc\svn\pysvn\Extension\Tests > cd /d B:\ B:\ > svnadmin create b:\repos B:\ > rem mkdir B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk -m "test-01 add trunk" B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test -m "test-01 add test" B:\ > rem Install hooks B:\ > echo echo c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit %* >b:\pre_test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit %* >>b:\pre_test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo echo c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit %* is_revision >b:\post_test_1.output 1>>b:\repos\hooks\post-commit.cmd B:\ > echo set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\post-commit.cmd B:\ > echo c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit %* is_revision >>b:\post_test_1.output 1>>b:\repos\hooks\post-commit.cmd B:\ > rem Add one dir B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test/a -m "pre-commit test 1" B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 2-2 Info: pre-commit test 1 Info: Transaction( B:\repos, 2-2) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-03T11:29:50.106219Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 3 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 3, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-03T11:29:50.230956Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Add two files B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir co file:///b:/repos/trunk/test b:\wc A B:/wc/a U B:/wc update_started B:/wc Checked out revision 3 B:\ > echo file1 ROOT 1>b:\wc\file1.txt B:\ > echo file1 A 1>b:\wc\a\file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\file1.txt A B:/wc/file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\a\file1.txt A B:/wc/a/file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Add two files" b:\wc A B:/wc/a/file1.txt A B:/wc/file1.txt Revision 4 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 3-3 Info: pre-commit test 1 Info: Transaction( B:\repos, 3-3) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-03T11:29:50.870232Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 4 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 4, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-03T11:29:51.041745Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Mod one file Mod one prop B:\ > echo file1 ROOT ln 2 1>b:\wc\file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir propset svn:eol-style native b:\wc\a\file1.txt property_added B:/wc/a/file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Mod one file Mod one prop" b:\wc M B:/wc/a/file1.txt M B:/wc/file1.txt Revision 5 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 4-4 Info: pre-commit test 1 Info: Transaction( B:\repos, 4-4) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-03T11:29:51.400363Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 5 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 5, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-03T11:29:51.571876Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Delete one file B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir rm b:\wc\a\file1.txt D B:/wc/a/file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Delete one file" b:\wc D B:/wc/a/file1.txt Revision 6 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 5-5 Info: pre-commit test 1 Info: Transaction( B:\repos, 5-5) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-03T11:29:51.930495Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 6 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 6, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-03T11:29:52.070824Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > endlocal pysvn-1.7.8/Tests/test-04.win32.known_good-py3-svn1.8.log000644 000771 000771 00000032012 12177447646 023107 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry C:\wc\svn\pysvn\Extension\Tests > setlocal C:\wc\svn\pysvn\Extension\Tests > set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client C:\wc\svn\pysvn\Extension\Tests > set PYSVN=c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir C:\wc\svn\pysvn\Extension\Tests > mkdir testroot-04 C:\wc\svn\pysvn\Extension\Tests > subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-04 C:\wc\svn\pysvn\Extension\Tests > cd /d B:\ B:\ > svnadmin create b:\repos B:\ > rem mkdir B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk -m "test-01 add trunk" B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test -m "test-01 add test" B:\ > rem Install hooks B:\ > echo echo c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit %* >b:\pre_test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit %* >>b:\pre_test_1.output 1>>b:\repos\hooks\pre-commit.cmd B:\ > echo echo c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit %* is_revision >b:\post_test_1.output 1>>b:\repos\hooks\post-commit.cmd B:\ > echo set PYTHONPATH=C:\wc\svn\pysvn\Extension\Source;C:\wc\svn\pysvn\Extension\Examples\Client 1>>b:\repos\hooks\post-commit.cmd B:\ > echo c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit %* is_revision >>b:\post_test_1.output 1>>b:\repos\hooks\post-commit.cmd B:\ > rem Add one dir B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir mkdir file:///b:/repos/trunk/test/a -m "pre-commit test 1" B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 2-2 Info: pre-commit test 1 Info: Transaction( B:\repos, 2-2) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T12:55:11.892598Z svn:log: pre-commit test 1 svn:txn-client-compat-version: 1.8.0 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 3 2-2 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 3, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T12:55:12.017334Z svn:log: pre-commit test 1 Info: changed() ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a: action='A', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Add two files B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir co file:///b:/repos/trunk/test b:\wc A B:/wc/a U B:/wc update_started B:/wc Checked out revision 3 B:\ > echo file1 ROOT 1>b:\wc\file1.txt B:\ > echo file1 A 1>b:\wc\a\file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\file1.txt A B:/wc/file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir add b:\wc\a\file1.txt A B:/wc/a/file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Add two files" b:\wc A B:/wc/a/file1.txt A B:/wc/file1.txt Revision 4 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 3-3 Info: pre-commit test 1 Info: Transaction( B:\repos, 3-3) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T12:55:12.609830Z svn:log: Add two files svn:txn-client-compat-version: 1.8.0 Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 4 3-3 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 4, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T12:55:12.765750Z svn:log: Add two files Info: changed() ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 A \r\n' trunk/test/file1.txt: action='A', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Mod one file Mod one prop B:\ > echo file1 ROOT ln 2 1>b:\wc\file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir propset svn:eol-style native b:\wc\a\file1.txt property_added B:/wc/a/file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Mod one file Mod one prop" b:\wc M B:/wc/a/file1.txt M B:/wc/file1.txt Revision 5 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 4-4 Info: pre-commit test 1 Info: Transaction( B:\repos, 4-4) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T12:55:13.124366Z svn:log: Mod one file Mod one prop svn:txn-client-compat-version: 1.8.0 Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 5 4-4 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 5, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T12:55:13.327062Z svn:log: Mod one file Mod one prop Info: changed() ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 contents: 'file1 ROOT ln 2 \r\n' Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='R', kind=, text_mod=1, prop_mod=1 copyfrom_rev=0 copyfrom_path=None svn:eol-style: native contents: 'file1 A \n' trunk/test/file1.txt: action='R', kind=, text_mod=1, prop_mod=0 copyfrom_rev=0 copyfrom_path=None contents: 'file1 ROOT ln 2 \r\n' Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/a/file1.txt: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > rem Delete one file B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir rm b:\wc\a\file1.txt D B:/wc/a/file1.txt B:\ > c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.02.01 --config-dir b:\configdir checkin -m "Delete one file" b:\wc D B:/wc/a/file1.txt Revision 6 B:\ > rem pre_test_1.output start ---------------------------------------- B:\ > type b:\pre_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py pre-commit B:\repos 5-5 Info: pre-commit test 1 Info: Transaction( B:\repos, 5-5) ... Info: revproplist() ... svn:author: barry svn:check-locks: true svn:date: 2013-08-04T12:55:13.685678Z svn:log: Delete one file svn:txn-client-compat-version: 1.8.0 Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= B:\ > rem pre_test_1.output end ------------------------------------------ B:\ > rem post_test_1.output start ---------------------------------------- B:\ > type b:\post_test_1.output c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Tests\test_04_commit_hook_test_1.py post-commit B:\repos 6 5-5 is_revision Info: post-commit test 1 Info: Transaction( B:\repos, 6, is_revision=True) ... Info: revproplist() ... svn:author: barry svn:date: 2013-08-04T12:55:13.841598Z svn:log: Delete one file Info: changed() ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 Info: changed( copy_info=True ) ... trunk/test/a/file1.txt: action='D', kind=, text_mod=0, prop_mod=0 copyfrom_rev=0 copyfrom_path=None Info: list() ... /trunk: kind= /trunk/test: kind= /trunk/test/a: kind= /trunk/test/file1.txt: kind= B:\ > rem post_test_1.output end ------------------------------------------ B:\ > endlocal pysvn-1.7.8/Tests/test-05.cmd000644 000771 000771 00000006630 11166142161 016206 0ustar00barrybarry000000 000000 @echo off @prompt $P$S$G @echo WorkDir: %WORKDIR% @echo PYTHON: %PYTHON% @echo Username: %USERNAME% setlocal set PYTHONPATH=%WORKDIR%\Source;%WORKDIR%\Examples\Client set PYSVN=%PYTHON% %WORKDIR%\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir echo Info: PYSVN CMD %PYSVN% call :cmd_shell mkdir testroot-05 call :cmd_shell subst b: %CD%\testroot-05 call :cmd_shell cd /d b:\ call :cmd_shell svnadmin create b:/repos echo Info: Setup - mkdir call :cmd_pysvn mkdir file:///b:/repos/trunk -m "test-05 add trunk" call :cmd_pysvn mkdir file:///b:/repos/trunk/test -m "test-05 add test" echo Info: Setup - checkout wc1 call :cmd_pysvn checkout file:///b:/repos/trunk b:\wc1 call :cmd_shell cd b:\wc1\test echo Info: Setup - add files call :cmd_createfile file1.txt test add file 1 call :cmd_createfile file2.txt test add file 2 call :cmd_pysvn add file1.txt call :cmd_pysvn add file2.txt call :cmd_pysvn checkin -m "commit added files" echo Info: Setup - checkout wc2 call :cmd_pysvn checkout file:///b:/repos/trunk b:\wc2 echo Info: Test - status of unlocked files call :cmd_pysvn status --verbose b:\wc1 echo Info: Test - info2 of unlocked files call :cmd_pysvn info2 b:\wc1\test\file1.txt echo Info: Test - lock unlocked file call :cmd_pysvn lock b:\wc1\test\file1.txt echo Info: Test - status of locked files call :cmd_pysvn status --verbose b:\wc1 echo Info: Test - info2 of locked files call :cmd_pysvn info2 b:\wc1\test\file1.txt echo Info: Test - attempt to checkin over a locked file call :cmd_shell cd b:\wc2\test call :cmd_appendfile file1.txt Change to file 1 call :cmd_appendfile file2.txt Change to file 2 call :cmd_pysvn commit -m "change when file locked in other wc" . echo Info: Test - lock locked file call :cmd_pysvn lock b:\wc2\test\file1.txt echo Info: Test - lock --force locked file call :cmd_pysvn lock --force b:\wc2\test\file1.txt -m "Stealing lock" echo Info: Test - info2 of locked files call :cmd_pysvn info2 b:\wc2\test\file1.txt echo Info: Test - status of locked files call :cmd_pysvn status --verbose b:\wc2 echo Info: Test - commit with lock call :cmd_pysvn commit -m "change when file locked in this wc" . echo Info: Test - status of locked files call :cmd_pysvn status --verbose b:\wc2 echo Info: Test - unlock locked file call :cmd_pysvn unlock b:\wc2\test\file1.txt echo Info: Test - status of locked files call :cmd_pysvn status --verbose b:\wc2 echo Info: Test - status of locked files call :cmd_pysvn status --verbose b:\wc1 echo Info: Test - update with stolen lock call :cmd_pysvn update b:\wc1\test echo Info: Test - status of locked files call :cmd_pysvn status --verbose b:\wc1 echo Info: Test - info2 of URL call :cmd_pysvn info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt goto :eof endlocal :cmd_shell echo. echo Info: CMD %* %* goto :eof :cmd_pysvn echo. echo Info: PYSVN CMD %* %PYSVN% %* goto :eof :cmd_createfile set FILENAME=%1 shift echo Info: Create File %FILENAME% - %1 %2 %3 %4 %5 %6 %7 %8 %9 call :cmd__echo %1 %2 %3 %4 %5 %6 %7 %8 %9 >%FILENAME% goto :eof :cmd_appendfile set FILENAME=%1 shift echo Info: Append File %FILENAME% - %1 %2 %3 %4 %5 %6 %7 %8 %9 call :cmd__echo %1 %2 %3 %4 %5 %6 %7 %8 %9 >>%FILENAME% goto :eof :cmd__echo echo %* goto :eof pysvn-1.7.8/Tests/test-05.sh000755 000771 000771 00000006050 11076210000 016040 0ustar00barrybarry000000 000000 #!/bin/sh # need to get rid of any symbolic links in the WORKDIR export WORKDIR=$( ${PYTHON} -c 'import os;os.chdir("..");print( os.getcwd() )' ) cd ${WORKDIR}/Tests echo WorkDir: ${WORKDIR} echo PYTHON: ${PYTHON} echo Username: $(id -u -n) cmd () { echo Info: CWD: $(pwd) echo Info: Command: $* "$@" } cmd_pysvn () { echo Info: CWD: $(pwd) echo Info: pysvn command: $* ${PYSVN} "$@" } cmd mkdir testroot-05 cmd cd testroot-05 TESTROOT=${WORKDIR}/Tests/testroot-05 cmd mkdir tmp export TMPDIR=${TESTROOT}/tmp export PYTHONPATH=${WORKDIR}/Source:${WORKDIR}/Examples/Client export PYSVN="${PYTHON} ${WORKDIR}/Examples/Client/svn_cmd.py --pysvn-testing 01.02.01 --config-dir ${TESTROOT}/configdir" echo Info: PYSVN command ${PYSVN} cmd svnadmin create ${TESTROOT}/repos echo Info: Setup - mkdir cmd_pysvn mkdir file://${TESTROOT}/repos/trunk -m "test-05 add trunk" cmd_pysvn mkdir file://${TESTROOT}/repos/trunk/test -m "test-05 add test" echo Info: Setup - checkout wc1 cmd_pysvn checkout file://${TESTROOT}/repos/trunk ${TESTROOT}/wc1 cmd cd ${TESTROOT}/wc1/test echo Info: Setup - add files echo test add file 1 >file1.txt echo test add file 2 >file2.txt cmd_pysvn add file1.txt cmd_pysvn add file2.txt cmd_pysvn checkin -m "commit added files" echo Info: Setup - checkout wc2 cmd_pysvn checkout file://${TESTROOT}/repos/trunk ${TESTROOT}/wc2 echo Info: Test - status of unlocked files cmd_pysvn status --verbose ${TESTROOT}/wc1 echo Info: Test - info2 of unlocked files cmd_pysvn info2 ${TESTROOT}/wc1/test/file1.txt echo Info: Test - lock unlocked file cmd_pysvn lock ${TESTROOT}/wc1/test/file1.txt echo Info: Test - status of locked files cmd_pysvn status --verbose ${TESTROOT}/wc1 echo Info: Test - info2 of locked files cmd_pysvn info2 ${TESTROOT}/wc1/test/file1.txt echo Info: Test - attempt to checkin over a locked file cmd cd ${TESTROOT}/wc2/test echo Change to file 1 >>file1.txt echo Change to file 2 >>file2.txt cmd_pysvn commit -m "change when file locked in other wc" . echo Info: Test - lock locked file cmd_pysvn lock ${TESTROOT}/wc2/test/file1.txt echo Info: Test - lock --force locked file cmd_pysvn lock --force ${TESTROOT}/wc2/test/file1.txt -m "Stealing lock" echo Info: Test - info2 of locked files cmd_pysvn info2 ${TESTROOT}/wc2/test/file1.txt echo Info: Test - status of locked files cmd_pysvn status --verbose ${TESTROOT}/wc2 echo Info: Test - commit with lock cmd_pysvn commit -m "change when file locked in this wc" . echo Info: Test - status of locked files cmd_pysvn status --verbose ${TESTROOT}/wc2 echo Info: Test - unlock locked file cmd_pysvn unlock ${TESTROOT}/wc2/test/file1.txt echo Info: Test - status of locked files cmd_pysvn status --verbose ${TESTROOT}/wc2 echo Info: Test - status of locked files cmd_pysvn status --verbose ${TESTROOT}/wc1 echo Info: Test - update with stolen lock cmd_pysvn update ${TESTROOT}/wc1/test echo Info: Test - status of locked files cmd_pysvn status --verbose ${TESTROOT}/wc1 echo Info: Test - info2 of URL cmd_pysvn info2 --revision HEAD file://${TESTROOT}/repos/trunk/test/file1.txt true pysvn-1.7.8/Tests/test-05.unix.known_good-py2-svn1.4.log000644 000771 000771 00000027312 11253135715 023114 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Users/barry/bin/python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: mkdir tmp Info: PYSVN command /Users/barry/bin/python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.02.01 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk -m test-05 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test -m test-05 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkin -m commit added files A test/file1.txt A test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 532b0617-ff1c-4f01-b9b5-ab21cb205ba3 Last changed author: barry Last Changed Date: 23-Sep-2006 19:07:17 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 23-Sep-2006 19:07:15 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - lock unlocked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt locked file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 532b0617-ff1c-4f01-b9b5-ab21cb205ba3 Last changed author: barry Last Changed Date: 23-Sep-2006 19:07:17 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 23-Sep-2006 19:07:20 Lock Token: opaquelocktoken:c3104da4-2f7d-490c-8590-65d020e0a4c6 Lock Comment: Schedule: normal Text Last Updated: 23-Sep-2006 19:07:15 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - attempt to checkin over a locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in other wc . M test/file1.txt M test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt failed_lock file1.txt Info: Test - lock --force locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock --force /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt -m Stealing lock locked file1.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 532b0617-ff1c-4f01-b9b5-ab21cb205ba3 Last changed author: barry Last Changed Date: 23-Sep-2006 19:07:17 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 23-Sep-2006 19:07:24 Lock Token: opaquelocktoken:a2aaf3f2-f065-4f75-b7f8-dc67885687a4 Lock Comment: Stealing lock Schedule: normal Text Last Updated: 23-Sep-2006 19:07:18 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test M K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - commit with lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in this wc . M test/file1.txt M test/file2.txt Revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test K 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - unlock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: unlock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt unlocked file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - update with stolen lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Updated to revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 4 Repository UUID: 532b0617-ff1c-4f01-b9b5-ab21cb205ba3 Last changed author: barry Last Changed Date: 23-Sep-2006 19:07:26 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.unix.known_good-py2-svn1.5.log000644 000771 000771 00000027312 11253135715 023115 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Users/barry/bin/python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: mkdir tmp Info: PYSVN command /Users/barry/bin/python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.02.01 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk -m test-05 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test -m test-05 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkin -m commit added files A test/file1.txt A test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 532b0617-ff1c-4f01-b9b5-ab21cb205ba3 Last changed author: barry Last Changed Date: 23-Sep-2006 19:07:17 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 23-Sep-2006 19:07:15 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - lock unlocked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt locked file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 532b0617-ff1c-4f01-b9b5-ab21cb205ba3 Last changed author: barry Last Changed Date: 23-Sep-2006 19:07:17 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 23-Sep-2006 19:07:20 Lock Token: opaquelocktoken:c3104da4-2f7d-490c-8590-65d020e0a4c6 Lock Comment: Schedule: normal Text Last Updated: 23-Sep-2006 19:07:15 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - attempt to checkin over a locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in other wc . M test/file1.txt M test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt failed_lock file1.txt Info: Test - lock --force locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock --force /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt -m Stealing lock locked file1.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 532b0617-ff1c-4f01-b9b5-ab21cb205ba3 Last changed author: barry Last Changed Date: 23-Sep-2006 19:07:17 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 23-Sep-2006 19:07:24 Lock Token: opaquelocktoken:a2aaf3f2-f065-4f75-b7f8-dc67885687a4 Lock Comment: Stealing lock Schedule: normal Text Last Updated: 23-Sep-2006 19:07:18 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test M K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - commit with lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in this wc . M test/file1.txt M test/file2.txt Revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test K 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - unlock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: unlock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt unlocked file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - update with stolen lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Updated to revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 4 Repository UUID: 532b0617-ff1c-4f01-b9b5-ab21cb205ba3 Last changed author: barry Last Changed Date: 23-Sep-2006 19:07:26 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.unix.known_good-py2-svn1.6.log000644 000771 000771 00000030654 11253135715 023121 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.02.01 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk -m test-05 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test -m test-05 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 06ed4d2f-476d-4582-9569-b3da6af11f05 Last changed author: barry Last Changed Date: 01-Mar-2009 14:58:20 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 01-Mar-2009 14:58:20 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - lock unlocked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt locked /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 06ed4d2f-476d-4582-9569-b3da6af11f05 Last changed author: barry Last Changed Date: 01-Mar-2009 14:58:20 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 01-Mar-2009 14:58:22 Lock Token: opaquelocktoken:0939893a-7e80-44d4-ae76-cccbb5c5a023 Lock Comment: Schedule: normal Text Last Updated: 01-Mar-2009 14:58:20 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - attempt to checkin over a locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in other wc . M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt failed_lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - lock --force locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock --force /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt -m Stealing lock locked /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 06ed4d2f-476d-4582-9569-b3da6af11f05 Last changed author: barry Last Changed Date: 01-Mar-2009 14:58:20 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 01-Mar-2009 14:58:23 Lock Token: opaquelocktoken:ff31e1cb-cae4-435d-98b2-f693fa6c2e39 Lock Comment: Stealing lock Schedule: normal Text Last Updated: 01-Mar-2009 14:58:21 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test M K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - commit with lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in this wc . M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test K 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - unlock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: unlock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt unlocked /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - update with stolen lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Updated to revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 4 Repository UUID: 06ed4d2f-476d-4582-9569-b3da6af11f05 Last changed author: barry Last Changed Date: 01-Mar-2009 14:58:23 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.unix.known_good-py2-svn1.7.log000644 000771 000771 00000030771 11646621252 023124 0ustar00barrybarry000000 000000 WorkDir: /home/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python Username: barry Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-05 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-05 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: mkdir tmp Info: PYSVN command /usr/bin/python /home/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.02.01 --config-dir /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/configdir Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: svnadmin create /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos Info: Setup - mkdir Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk -m test-05 add trunk Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test -m test-05 add test Info: Setup - checkout wc1 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: checkout file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 update_started /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 Checked out revision 2 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: cd /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Setup - add files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file1.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file2.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkin -m commit added files A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkout file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 update_started /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of unlocked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 253c7a72-4057-4a2c-bd81-09e280fdb83c Last changed author: barry Last Changed Date: 31-Jul-2011 20:13:59 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 31-Jul-2011 20:13:59 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - lock unlocked file Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: lock /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt locked /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Info: Test - status of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 253c7a72-4057-4a2c-bd81-09e280fdb83c Last changed author: barry Last Changed Date: 31-Jul-2011 20:13:59 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 31-Jul-2011 20:14:00 Lock Token: opaquelocktoken:f9b9410e-3ca2-44b1-a71d-349171145d1b Lock Comment: Schedule: normal Text Last Updated: 31-Jul-2011 20:13:59 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - attempt to checkin over a locked file Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Command: cd /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in other wc . M /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt failed_lock /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - lock --force locked file Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock --force /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt -m Stealing lock locked /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - info2 of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Path: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 253c7a72-4057-4a2c-bd81-09e280fdb83c Last changed author: barry Last Changed Date: 31-Jul-2011 20:13:59 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 31-Jul-2011 20:14:00 Lock Token: opaquelocktoken:6fa5172e-5fe3-4959-85ef-caa61a29c7b6 Lock Comment: Stealing lock Schedule: normal Text Last Updated: 31-Jul-2011 20:14:00 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - status of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test M K 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - commit with lock Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in this wc . M /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Revision 4 Info: Test - status of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test K 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - unlock locked file Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: unlock /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt unlocked /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - status of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - status of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - update with stolen lock Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: update /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt update_started /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Updated to revision 4 Info: Test - status of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of URL Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 --revision HEAD file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Path: file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 4 Repository UUID: 253c7a72-4057-4a2c-bd81-09e280fdb83c Last changed author: barry Last Changed Date: 31-Jul-2011 20:14:01 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.unix.known_good-py2-svn1.8.log000644 000771 000771 00000030771 12164247515 023127 0ustar00barrybarry000000 000000 WorkDir: /home/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python Username: barry Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-05 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-05 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: mkdir tmp Info: PYSVN command /usr/bin/python /home/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.02.01 --config-dir /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/configdir Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: svnadmin create /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos Info: Setup - mkdir Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk -m test-05 add trunk Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test -m test-05 add test Info: Setup - checkout wc1 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: checkout file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 update_started /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 Checked out revision 2 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: cd /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Setup - add files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file1.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file2.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkin -m commit added files A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkout file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 update_started /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of unlocked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 253c7a72-4057-4a2c-bd81-09e280fdb83c Last changed author: barry Last Changed Date: 31-Jul-2011 20:13:59 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 31-Jul-2011 20:13:59 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - lock unlocked file Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: lock /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt locked /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Info: Test - status of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 253c7a72-4057-4a2c-bd81-09e280fdb83c Last changed author: barry Last Changed Date: 31-Jul-2011 20:13:59 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 31-Jul-2011 20:14:00 Lock Token: opaquelocktoken:f9b9410e-3ca2-44b1-a71d-349171145d1b Lock Comment: Schedule: normal Text Last Updated: 31-Jul-2011 20:13:59 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - attempt to checkin over a locked file Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Command: cd /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in other wc . M /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt failed_lock /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - lock --force locked file Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock --force /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt -m Stealing lock locked /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - info2 of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Path: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 253c7a72-4057-4a2c-bd81-09e280fdb83c Last changed author: barry Last Changed Date: 31-Jul-2011 20:13:59 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 31-Jul-2011 20:14:00 Lock Token: opaquelocktoken:6fa5172e-5fe3-4959-85ef-caa61a29c7b6 Lock Comment: Stealing lock Schedule: normal Text Last Updated: 31-Jul-2011 20:14:00 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - status of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test M K 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - commit with lock Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in this wc . M /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Revision 4 Info: Test - status of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test K 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - unlock locked file Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: unlock /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt unlocked /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - status of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - status of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - update with stolen lock Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: update /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt update_started /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Updated to revision 4 Info: Test - status of locked files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 4 4 barry /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of URL Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 --revision HEAD file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Path: file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 4 Repository UUID: 253c7a72-4057-4a2c-bd81-09e280fdb83c Last changed author: barry Last Changed Date: 31-Jul-2011 20:14:01 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.unix.known_good-py3-svn1.5.log000644 000771 000771 00000027312 11255417030 023111 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Users/barry/bin/python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: mkdir tmp Info: PYSVN command /Users/barry/bin/python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.02.01 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk -m test-05 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test -m test-05 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkin -m commit added files A test/file1.txt A test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 532b0617-ff1c-4f01-b9b5-ab21cb205ba3 Last changed author: barry Last Changed Date: 23-Sep-2006 19:07:17 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 23-Sep-2006 19:07:15 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - lock unlocked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt locked file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 532b0617-ff1c-4f01-b9b5-ab21cb205ba3 Last changed author: barry Last Changed Date: 23-Sep-2006 19:07:17 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 23-Sep-2006 19:07:20 Lock Token: opaquelocktoken:c3104da4-2f7d-490c-8590-65d020e0a4c6 Lock Comment: Schedule: normal Text Last Updated: 23-Sep-2006 19:07:15 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - attempt to checkin over a locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in other wc . M test/file1.txt M test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt failed_lock file1.txt Info: Test - lock --force locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock --force /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt -m Stealing lock locked file1.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 532b0617-ff1c-4f01-b9b5-ab21cb205ba3 Last changed author: barry Last Changed Date: 23-Sep-2006 19:07:17 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 23-Sep-2006 19:07:24 Lock Token: opaquelocktoken:a2aaf3f2-f065-4f75-b7f8-dc67885687a4 Lock Comment: Stealing lock Schedule: normal Text Last Updated: 23-Sep-2006 19:07:18 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test M K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - commit with lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in this wc . M test/file1.txt M test/file2.txt Revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test K 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - unlock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: unlock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt unlocked file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - update with stolen lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Updated to revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 4 Repository UUID: 532b0617-ff1c-4f01-b9b5-ab21cb205ba3 Last changed author: barry Last Changed Date: 23-Sep-2006 19:07:26 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.unix.known_good-py3-svn1.6.log000644 000771 000771 00000030654 11253135715 023122 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.02.01 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk -m test-05 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test -m test-05 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 06ed4d2f-476d-4582-9569-b3da6af11f05 Last changed author: barry Last Changed Date: 01-Mar-2009 14:58:20 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 01-Mar-2009 14:58:20 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - lock unlocked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt locked /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 06ed4d2f-476d-4582-9569-b3da6af11f05 Last changed author: barry Last Changed Date: 01-Mar-2009 14:58:20 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 01-Mar-2009 14:58:22 Lock Token: opaquelocktoken:0939893a-7e80-44d4-ae76-cccbb5c5a023 Lock Comment: Schedule: normal Text Last Updated: 01-Mar-2009 14:58:20 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - attempt to checkin over a locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in other wc . M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt failed_lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - lock --force locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock --force /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt -m Stealing lock locked /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 06ed4d2f-476d-4582-9569-b3da6af11f05 Last changed author: barry Last Changed Date: 01-Mar-2009 14:58:20 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 01-Mar-2009 14:58:23 Lock Token: opaquelocktoken:ff31e1cb-cae4-435d-98b2-f693fa6c2e39 Lock Comment: Stealing lock Schedule: normal Text Last Updated: 01-Mar-2009 14:58:21 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test M K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - commit with lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in this wc . M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test K 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - unlock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: unlock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt unlocked /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - update with stolen lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Updated to revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 4 Repository UUID: 06ed4d2f-476d-4582-9569-b3da6af11f05 Last changed author: barry Last Changed Date: 01-Mar-2009 14:58:23 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.unix.known_good-py3-svn1.7.log000644 000771 000771 00000031412 11646632567 023131 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.02.01 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk -m test-05 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test -m test-05 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 52fb8599-0a0b-468a-9ced-0767d0e3dfd8 Last changed author: barry Last Changed Date: 16-Oct-2011 20:46:49 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 16-Oct-2011 20:46:49 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - lock unlocked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt locked /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 52fb8599-0a0b-468a-9ced-0767d0e3dfd8 Last changed author: barry Last Changed Date: 16-Oct-2011 20:46:49 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 16-Oct-2011 20:46:51 Lock Token: opaquelocktoken:2fd12ce4-22ff-4606-818a-8a098a04afe6 Lock Comment: Schedule: normal Text Last Updated: 16-Oct-2011 20:46:49 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - attempt to checkin over a locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in other wc . M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt failed_lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - lock --force locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock --force /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt -m Stealing lock locked /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 52fb8599-0a0b-468a-9ced-0767d0e3dfd8 Last changed author: barry Last Changed Date: 16-Oct-2011 20:46:49 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 16-Oct-2011 20:46:52 Lock Token: opaquelocktoken:63754c79-27fe-41f5-ae95-32203f788e85 Lock Comment: Stealing lock Schedule: normal Text Last Updated: 16-Oct-2011 20:46:50 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test M K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - commit with lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in this wc . M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test K 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - unlock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: unlock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt unlocked /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - update with stolen lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Updated to revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 4 Repository UUID: 52fb8599-0a0b-468a-9ced-0767d0e3dfd8 Last changed author: barry Last Changed Date: 16-Oct-2011 20:46:52 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.unix.known_good-py3-svn1.8.log000644 000771 000771 00000031412 12164247515 023121 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-05 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.02.01 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk -m test-05 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test -m test-05 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: add file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of unlocked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 52fb8599-0a0b-468a-9ced-0767d0e3dfd8 Last changed author: barry Last Changed Date: 16-Oct-2011 20:46:49 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 16-Oct-2011 20:46:49 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - lock unlocked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt locked /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 52fb8599-0a0b-468a-9ced-0767d0e3dfd8 Last changed author: barry Last Changed Date: 16-Oct-2011 20:46:49 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 16-Oct-2011 20:46:51 Lock Token: opaquelocktoken:2fd12ce4-22ff-4606-818a-8a098a04afe6 Lock Comment: Schedule: normal Text Last Updated: 16-Oct-2011 20:46:49 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - attempt to checkin over a locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in other wc . M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt failed_lock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - lock --force locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: lock --force /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt -m Stealing lock locked /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - info2 of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Path: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 3 Repository UUID: 52fb8599-0a0b-468a-9ced-0767d0e3dfd8 Last changed author: barry Last Changed Date: 16-Oct-2011 20:46:49 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 16-Oct-2011 20:46:52 Lock Token: opaquelocktoken:63754c79-27fe-41f5-ae95-32203f788e85 Lock Comment: Stealing lock Schedule: normal Text Last Updated: 16-Oct-2011 20:46:50 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test M K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - commit with lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: commit -m change when file locked in this wc . M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt M /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test K 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - unlock locked file Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: unlock /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt unlocked /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test/file2.txt Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test K 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - update with stolen lock Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: update /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test Updated to revision 4 Info: Test - status of locked files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc1/test/file2.txt Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/wc2/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-05/repos/trunk/test/file1.txt Revision: 4 Repository UUID: 52fb8599-0a0b-468a-9ced-0767d0e3dfd8 Last changed author: barry Last Changed Date: 16-Oct-2011 20:46:52 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.win32.known_good-py2-svn1.4.log000644 000771 000771 00000014760 11331322163 023066 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python24\python.exe Info: PYSVN CMD c:\python24\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-05 Info: CMD subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-05 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-05 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-05 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD checkin -m "commit added files" A test/file1.txt A test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A b:/wc2/test A b:/wc2/test/file1.txt A b:/wc2/test/file2.txt U b:/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - info2 of unlocked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: b:/wc1/test/file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: cc4484c8-542a-2742-be80-984bdf6d37c5 Last changed author: barry Last Changed Date: 23-Sep-2006 16:21:22 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 23-Sep-2006 16:21:21 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - lock unlocked file Info: PYSVN CMD lock b:\wc1\test\file1.txt locked file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test K 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: b:/wc1/test/file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: cc4484c8-542a-2742-be80-984bdf6d37c5 Last changed author: barry Last Changed Date: 23-Sep-2006 16:21:22 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 23-Sep-2006 16:21:24 Lock Token: opaquelocktoken:01ee0e7b-022a-8b4d-8cd4-82d52a2125a2 Lock Comment: Schedule: normal Text Last Updated: 23-Sep-2006 16:21:21 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - attempt to checkin over a locked file Info: CMD cd b:\wc2\test Info: Append File file1.txt - Change to file 1 Info: Append File file2.txt - Change to file 2 Info: PYSVN CMD commit -m "change when file locked in other wc" . M test/file1.txt M test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: PYSVN CMD lock b:\wc2\test\file1.txt failed_lock file1.txt Info: Test - lock --force locked file Info: PYSVN CMD lock --force b:\wc2\test\file1.txt -m "Stealing lock" locked file1.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc2\test\file1.txt Path: b:/wc2/test/file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: cc4484c8-542a-2742-be80-984bdf6d37c5 Last changed author: barry Last Changed Date: 23-Sep-2006 16:21:22 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 23-Sep-2006 16:21:26 Lock Token: opaquelocktoken:a24fb0d6-0286-0040-9fa4-2feb7c02c4fa Lock Comment: Stealing lock Schedule: normal Text Last Updated: 23-Sep-2006 16:21:23 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test M K 3 3 barry b:\wc2\test\file1.txt M 3 3 barry b:\wc2\test\file2.txt Info: Test - commit with lock Info: PYSVN CMD commit -m "change when file locked in this wc" . M test/file1.txt M test/file2.txt Revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test K 4 4 barry b:\wc2\test\file1.txt 4 4 barry b:\wc2\test\file2.txt Info: Test - unlock locked file Info: PYSVN CMD unlock b:\wc2\test\file1.txt unlocked file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 4 4 barry b:\wc2\test\file2.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test K 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - update with stolen lock Info: PYSVN CMD update b:\wc1\test U b:/wc1 U b:/wc1/test U b:/wc1/test/file1.txt U b:/wc1/test/file2.txt Updated to revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 4 4 barry b:\wc1\test 4 4 barry b:\wc1\test\file1.txt 4 4 barry b:\wc1\test\file2.txt Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 4 Repository root_URL: file:///b:/repos Repository UUID: cc4484c8-542a-2742-be80-984bdf6d37c5 Last changed author: barry Last Changed Date: 23-Sep-2006 16:21:27 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.win32.known_good-py2-svn1.5.log000644 000771 000771 00000015001 11331322163 023054 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python24\python.exe Username: barry Info: PYSVN CMD c:\python24\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-05 Info: CMD subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-05 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-05 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-05 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD checkin -m "commit added files" A test/file1.txt A test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A b:/wc2/test A b:/wc2/test/file1.txt A b:/wc2/test/file2.txt U b:/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - info2 of unlocked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: b:/wc1/test/file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: cc4484c8-542a-2742-be80-984bdf6d37c5 Last changed author: barry Last Changed Date: 23-Sep-2006 16:21:22 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 23-Sep-2006 16:21:21 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - lock unlocked file Info: PYSVN CMD lock b:\wc1\test\file1.txt locked file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test K 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: b:/wc1/test/file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: cc4484c8-542a-2742-be80-984bdf6d37c5 Last changed author: barry Last Changed Date: 23-Sep-2006 16:21:22 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 23-Sep-2006 16:21:24 Lock Token: opaquelocktoken:01ee0e7b-022a-8b4d-8cd4-82d52a2125a2 Lock Comment: Schedule: normal Text Last Updated: 23-Sep-2006 16:21:21 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - attempt to checkin over a locked file Info: CMD cd b:\wc2\test Info: Append File file1.txt - Change to file 1 Info: Append File file2.txt - Change to file 2 Info: PYSVN CMD commit -m "change when file locked in other wc" . M test/file1.txt M test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: PYSVN CMD lock b:\wc2\test\file1.txt failed_lock file1.txt Info: Test - lock --force locked file Info: PYSVN CMD lock --force b:\wc2\test\file1.txt -m "Stealing lock" locked file1.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc2\test\file1.txt Path: b:/wc2/test/file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: cc4484c8-542a-2742-be80-984bdf6d37c5 Last changed author: barry Last Changed Date: 23-Sep-2006 16:21:22 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 23-Sep-2006 16:21:26 Lock Token: opaquelocktoken:a24fb0d6-0286-0040-9fa4-2feb7c02c4fa Lock Comment: Stealing lock Schedule: normal Text Last Updated: 23-Sep-2006 16:21:23 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test M K 3 3 barry b:\wc2\test\file1.txt M 3 3 barry b:\wc2\test\file2.txt Info: Test - commit with lock Info: PYSVN CMD commit -m "change when file locked in this wc" . M test/file1.txt M test/file2.txt Revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test K 4 4 barry b:\wc2\test\file1.txt 4 4 barry b:\wc2\test\file2.txt Info: Test - unlock locked file Info: PYSVN CMD unlock b:\wc2\test\file1.txt unlocked file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 4 4 barry b:\wc2\test\file2.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test K 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - update with stolen lock Info: PYSVN CMD update b:\wc1\test U b:/wc1 U b:/wc1/test U b:/wc1/test/file1.txt U b:/wc1/test/file2.txt Updated to revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 4 4 barry b:\wc1\test 4 4 barry b:\wc1\test\file1.txt 4 4 barry b:\wc1\test\file2.txt Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 4 Repository root_URL: file:///b:/repos Repository UUID: cc4484c8-542a-2742-be80-984bdf6d37c5 Last changed author: barry Last Changed Date: 23-Sep-2006 16:21:27 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.win32.known_good-py2-svn1.6.log000644 000771 000771 00000015117 11723221274 023073 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python27.win32\python.exe Username: barry Info: PYSVN CMD c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-05 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-05 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-05 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-05 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD checkin -m "commit added files" A b:/wc1/test/file1.txt A b:/wc1/test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A b:/wc2/test A b:/wc2/test/file1.txt A b:/wc2/test/file2.txt U b:/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - info2 of unlocked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: b:/wc1/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: e3fc991c-be68-a646-aad7-03fed51bb128 Last changed author: barry Last Changed Date: 28-Feb-2012 12:55:39 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 28-Feb-2012 12:55:38 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - lock unlocked file Info: PYSVN CMD lock b:\wc1\test\file1.txt locked B:/wc1/test/file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test K 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: b:/wc1/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: e3fc991c-be68-a646-aad7-03fed51bb128 Last changed author: barry Last Changed Date: 28-Feb-2012 12:55:39 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 28-Feb-2012 12:55:40 Lock Token: opaquelocktoken:df9c8d78-afcf-0746-8912-9b4587a68aed Lock Comment: Schedule: normal Text Last Updated: 28-Feb-2012 12:55:38 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - attempt to checkin over a locked file Info: CMD cd b:\wc2\test Info: Append File file1.txt - Change to file 1 Info: Append File file2.txt - Change to file 2 Info: PYSVN CMD commit -m "change when file locked in other wc" . M b:/wc2/test/file1.txt M b:/wc2/test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: PYSVN CMD lock b:\wc2\test\file1.txt failed_lock B:/wc2/test/file1.txt Info: Test - lock --force locked file Info: PYSVN CMD lock --force b:\wc2\test\file1.txt -m "Stealing lock" locked B:/wc2/test/file1.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc2\test\file1.txt Path: b:/wc2/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: e3fc991c-be68-a646-aad7-03fed51bb128 Last changed author: barry Last Changed Date: 28-Feb-2012 12:55:39 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 28-Feb-2012 12:55:41 Lock Token: opaquelocktoken:6f7bc6be-f992-f642-a7f0-f1b0b195c75b Lock Comment: Stealing lock Schedule: normal Text Last Updated: 28-Feb-2012 12:55:39 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test M K 3 3 barry b:\wc2\test\file1.txt M 3 3 barry b:\wc2\test\file2.txt Info: Test - commit with lock Info: PYSVN CMD commit -m "change when file locked in this wc" . M b:/wc2/test/file1.txt M b:/wc2/test/file2.txt Revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test K 4 4 barry b:\wc2\test\file1.txt 4 4 barry b:\wc2\test\file2.txt Info: Test - unlock locked file Info: PYSVN CMD unlock b:\wc2\test\file1.txt unlocked B:/wc2/test/file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 4 4 barry b:\wc2\test\file2.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test K 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - update with stolen lock Info: PYSVN CMD update b:\wc1\test U b:/wc1 U b:/wc1/test U b:/wc1/test/file1.txt U b:/wc1/test/file2.txt Updated to revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 4 4 barry b:\wc1\test 4 4 barry b:\wc1\test\file1.txt 4 4 barry b:\wc1\test\file2.txt Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 4 Repository root_URL: file:///B:/repos Repository UUID: e3fc991c-be68-a646-aad7-03fed51bb128 Last changed author: barry Last Changed Date: 28-Feb-2012 12:55:42 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.win32.known_good-py2-svn1.7.log000644 000771 000771 00000015261 12164357546 023110 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python27.win32\python.exe Username: barry Info: PYSVN CMD c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-05 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-05 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-05 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-05 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A B:/wc1/test/file1.txt Info: PYSVN CMD add file2.txt A B:/wc1/test/file2.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file1.txt A B:/wc1/test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A B:/wc2/test A B:/wc2/test/file1.txt A B:/wc2/test/file2.txt U B:/wc2 update_started B:/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test 3 3 barry B:\wc1\test\file1.txt 3 3 barry B:\wc1\test\file2.txt Info: Test - info2 of unlocked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: B:/wc1/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 62fedaee-3de9-bc44-925e-c3f77b65eb00 Last changed author: barry Last Changed Date: 01-Jul-2013 20:45:06 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 01-Jul-2013 20:45:06 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - lock unlocked file Info: PYSVN CMD lock b:\wc1\test\file1.txt locked B:/wc1/test/file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test K 3 3 barry B:\wc1\test\file1.txt 3 3 barry B:\wc1\test\file2.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: B:/wc1/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 62fedaee-3de9-bc44-925e-c3f77b65eb00 Last changed author: barry Last Changed Date: 01-Jul-2013 20:45:06 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 01-Jul-2013 20:45:07 Lock Token: opaquelocktoken:7a9a769a-b629-a543-a2eb-505b04676ac4 Lock Comment: Schedule: normal Text Last Updated: 01-Jul-2013 20:45:06 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - attempt to checkin over a locked file Info: CMD cd b:\wc2\test Info: Append File file1.txt - Change to file 1 Info: Append File file2.txt - Change to file 2 Info: PYSVN CMD commit -m "change when file locked in other wc" . M B:/wc2/test/file1.txt M B:/wc2/test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: PYSVN CMD lock b:\wc2\test\file1.txt failed_lock B:/wc2/test/file1.txt Info: Test - lock --force locked file Info: PYSVN CMD lock --force b:\wc2\test\file1.txt -m "Stealing lock" locked B:/wc2/test/file1.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc2\test\file1.txt Path: B:/wc2/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 62fedaee-3de9-bc44-925e-c3f77b65eb00 Last changed author: barry Last Changed Date: 01-Jul-2013 20:45:06 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 01-Jul-2013 20:45:07 Lock Token: opaquelocktoken:02ae8099-35ad-3c44-8c5f-bd748120aedc Lock Comment: Stealing lock Schedule: normal Text Last Updated: 01-Jul-2013 20:45:06 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry B:\wc2 3 3 barry B:\wc2\test M K 3 3 barry B:\wc2\test\file1.txt M 3 3 barry B:\wc2\test\file2.txt Info: Test - commit with lock Info: PYSVN CMD commit -m "change when file locked in this wc" . M B:/wc2/test/file1.txt M B:/wc2/test/file2.txt Revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry B:\wc2 3 3 barry B:\wc2\test K 4 4 barry B:\wc2\test\file1.txt 4 4 barry B:\wc2\test\file2.txt Info: Test - unlock locked file Info: PYSVN CMD unlock b:\wc2\test\file1.txt unlocked B:/wc2/test/file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry B:\wc2 3 3 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 4 4 barry B:\wc2\test\file2.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test K 3 3 barry B:\wc1\test\file1.txt 3 3 barry B:\wc1\test\file2.txt Info: Test - update with stolen lock Info: PYSVN CMD update b:\wc1\test U B:/wc1 U B:/wc1/test U B:/wc1/test/file1.txt U B:/wc1/test/file2.txt update_started B:/wc1/test Updated to revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 4 4 barry B:\wc1\test 4 4 barry B:\wc1\test\file1.txt 4 4 barry B:\wc1\test\file2.txt Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 4 Repository root_URL: file:///B:/repos Repository UUID: 62fedaee-3de9-bc44-925e-c3f77b65eb00 Last changed author: barry Last Changed Date: 01-Jul-2013 20:45:07 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.win32.known_good-py2-svn1.8.log000644 000771 000771 00000015261 12164262477 023107 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python27.win32\python.exe Username: barry Info: PYSVN CMD c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-05 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-05 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-05 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-05 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A B:/wc1/test/file1.txt Info: PYSVN CMD add file2.txt A B:/wc1/test/file2.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file1.txt A B:/wc1/test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A B:/wc2/test A B:/wc2/test/file1.txt A B:/wc2/test/file2.txt U B:/wc2 update_started B:/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test 3 3 barry B:\wc1\test\file1.txt 3 3 barry B:\wc1\test\file2.txt Info: Test - info2 of unlocked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: B:/wc1/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 6a2a1220-720b-2043-8ffe-bfd78d666d1a Last changed author: barry Last Changed Date: 01-Jul-2013 12:14:55 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 01-Jul-2013 12:14:55 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - lock unlocked file Info: PYSVN CMD lock b:\wc1\test\file1.txt locked B:/wc1/test/file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test K 3 3 barry B:\wc1\test\file1.txt 3 3 barry B:\wc1\test\file2.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: B:/wc1/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 6a2a1220-720b-2043-8ffe-bfd78d666d1a Last changed author: barry Last Changed Date: 01-Jul-2013 12:14:55 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 01-Jul-2013 12:14:56 Lock Token: opaquelocktoken:d119b7dd-8ec3-4647-9214-89aed90d91d9 Lock Comment: Schedule: normal Text Last Updated: 01-Jul-2013 12:14:55 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - attempt to checkin over a locked file Info: CMD cd b:\wc2\test Info: Append File file1.txt - Change to file 1 Info: Append File file2.txt - Change to file 2 Info: PYSVN CMD commit -m "change when file locked in other wc" . M B:/wc2/test/file1.txt M B:/wc2/test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: PYSVN CMD lock b:\wc2\test\file1.txt failed_lock B:/wc2/test/file1.txt Info: Test - lock --force locked file Info: PYSVN CMD lock --force b:\wc2\test\file1.txt -m "Stealing lock" locked B:/wc2/test/file1.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc2\test\file1.txt Path: B:/wc2/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 6a2a1220-720b-2043-8ffe-bfd78d666d1a Last changed author: barry Last Changed Date: 01-Jul-2013 12:14:55 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 01-Jul-2013 12:14:56 Lock Token: opaquelocktoken:0cd76b2e-3093-384a-afdb-27055836211f Lock Comment: Stealing lock Schedule: normal Text Last Updated: 01-Jul-2013 12:14:56 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry B:\wc2 3 3 barry B:\wc2\test M K 3 3 barry B:\wc2\test\file1.txt M 3 3 barry B:\wc2\test\file2.txt Info: Test - commit with lock Info: PYSVN CMD commit -m "change when file locked in this wc" . M B:/wc2/test/file1.txt M B:/wc2/test/file2.txt Revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry B:\wc2 3 3 barry B:\wc2\test K 4 4 barry B:\wc2\test\file1.txt 4 4 barry B:\wc2\test\file2.txt Info: Test - unlock locked file Info: PYSVN CMD unlock b:\wc2\test\file1.txt unlocked B:/wc2/test/file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry B:\wc2 3 3 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 4 4 barry B:\wc2\test\file2.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test K 3 3 barry B:\wc1\test\file1.txt 3 3 barry B:\wc1\test\file2.txt Info: Test - update with stolen lock Info: PYSVN CMD update b:\wc1\test U B:/wc1 U B:/wc1/test U B:/wc1/test/file1.txt U B:/wc1/test/file2.txt update_started B:/wc1/test Updated to revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 4 4 barry B:\wc1\test 4 4 barry B:\wc1\test\file1.txt 4 4 barry B:\wc1\test\file2.txt Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 4 Repository root_URL: file:///B:/repos Repository UUID: 6a2a1220-720b-2043-8ffe-bfd78d666d1a Last changed author: barry Last Changed Date: 01-Jul-2013 12:14:56 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.win32.known_good-py3-svn1.5.log000644 000771 000771 00000015001 11331322163 023055 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python24\python.exe Username: barry Info: PYSVN CMD c:\python24\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-05 Info: CMD subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-05 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-05 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-05 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD checkin -m "commit added files" A test/file1.txt A test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A b:/wc2/test A b:/wc2/test/file1.txt A b:/wc2/test/file2.txt U b:/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - info2 of unlocked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: b:/wc1/test/file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: cc4484c8-542a-2742-be80-984bdf6d37c5 Last changed author: barry Last Changed Date: 23-Sep-2006 16:21:22 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 23-Sep-2006 16:21:21 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - lock unlocked file Info: PYSVN CMD lock b:\wc1\test\file1.txt locked file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test K 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: b:/wc1/test/file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: cc4484c8-542a-2742-be80-984bdf6d37c5 Last changed author: barry Last Changed Date: 23-Sep-2006 16:21:22 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 23-Sep-2006 16:21:24 Lock Token: opaquelocktoken:01ee0e7b-022a-8b4d-8cd4-82d52a2125a2 Lock Comment: Schedule: normal Text Last Updated: 23-Sep-2006 16:21:21 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - attempt to checkin over a locked file Info: CMD cd b:\wc2\test Info: Append File file1.txt - Change to file 1 Info: Append File file2.txt - Change to file 2 Info: PYSVN CMD commit -m "change when file locked in other wc" . M test/file1.txt M test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: PYSVN CMD lock b:\wc2\test\file1.txt failed_lock file1.txt Info: Test - lock --force locked file Info: PYSVN CMD lock --force b:\wc2\test\file1.txt -m "Stealing lock" locked file1.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc2\test\file1.txt Path: b:/wc2/test/file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: cc4484c8-542a-2742-be80-984bdf6d37c5 Last changed author: barry Last Changed Date: 23-Sep-2006 16:21:22 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 23-Sep-2006 16:21:26 Lock Token: opaquelocktoken:a24fb0d6-0286-0040-9fa4-2feb7c02c4fa Lock Comment: Stealing lock Schedule: normal Text Last Updated: 23-Sep-2006 16:21:23 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test M K 3 3 barry b:\wc2\test\file1.txt M 3 3 barry b:\wc2\test\file2.txt Info: Test - commit with lock Info: PYSVN CMD commit -m "change when file locked in this wc" . M test/file1.txt M test/file2.txt Revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test K 4 4 barry b:\wc2\test\file1.txt 4 4 barry b:\wc2\test\file2.txt Info: Test - unlock locked file Info: PYSVN CMD unlock b:\wc2\test\file1.txt unlocked file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 4 4 barry b:\wc2\test\file2.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test K 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - update with stolen lock Info: PYSVN CMD update b:\wc1\test U b:/wc1 U b:/wc1/test U b:/wc1/test/file1.txt U b:/wc1/test/file2.txt Updated to revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 4 4 barry b:\wc1\test 4 4 barry b:\wc1\test\file1.txt 4 4 barry b:\wc1\test\file2.txt Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 4 Repository root_URL: file:///b:/repos Repository UUID: cc4484c8-542a-2742-be80-984bdf6d37c5 Last changed author: barry Last Changed Date: 23-Sep-2006 16:21:27 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.win32.known_good-py3-svn1.6.log000644 000771 000771 00000014734 11723221274 023100 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry Info: PYSVN CMD c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-05 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-05 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-05 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-05 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD checkin -m "commit added files" A b:/wc1/test/file1.txt A b:/wc1/test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A b:/wc2/test A b:/wc2/test/file1.txt A b:/wc2/test/file2.txt U b:/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - info2 of unlocked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: b:/wc1/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 4517b923-dbb7-cd4d-ad80-263ab22bc0b8 Last changed author: barry Last Changed Date: 28-Feb-2012 13:01:48 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 28-Feb-2012 13:01:47 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - lock unlocked file Info: PYSVN CMD lock b:\wc1\test\file1.txt locked B:/wc1/test/file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test K 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: b:/wc1/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 4517b923-dbb7-cd4d-ad80-263ab22bc0b8 Last changed author: barry Last Changed Date: 28-Feb-2012 13:01:48 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 28-Feb-2012 13:01:49 Lock Token: opaquelocktoken:a6e9e98b-840c-6d45-ada8-064c0bbd60fd Lock Comment: Schedule: normal Text Last Updated: 28-Feb-2012 13:01:47 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - attempt to checkin over a locked file Info: CMD cd b:\wc2\test Info: Append File file1.txt - Change to file 1 Info: Append File file2.txt - Change to file 2 Info: PYSVN CMD commit -m "change when file locked in other wc" . M b:/wc2/test/file1.txt M b:/wc2/test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: PYSVN CMD lock b:\wc2\test\file1.txt failed_lock B:/wc2/test/file1.txt Info: Test - lock --force locked file Info: PYSVN CMD lock --force b:\wc2\test\file1.txt -m "Stealing lock" locked B:/wc2/test/file1.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc2\test\file1.txt Path: b:/wc2/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 4517b923-dbb7-cd4d-ad80-263ab22bc0b8 Last changed author: barry Last Changed Date: 28-Feb-2012 13:01:48 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 28-Feb-2012 13:01:50 Lock Token: opaquelocktoken:11fb5e41-8e7f-3940-bc05-69cacb5cff1f Lock Comment: Stealing lock Schedule: normal Text Last Updated: 28-Feb-2012 13:01:48 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test M K 3 3 barry b:\wc2\test\file1.txt M 3 3 barry b:\wc2\test\file2.txt Info: Test - commit with lock Info: PYSVN CMD commit -m "change when file locked in this wc" . M b:/wc2/test/file1.txt M b:/wc2/test/file2.txt Revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test K 4 4 barry b:\wc2\test\file1.txt 4 4 barry b:\wc2\test\file2.txt Info: Test - unlock locked file Info: PYSVN CMD unlock b:\wc2\test\file1.txt unlocked B:/wc2/test/file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry b:\wc2 3 3 barry b:\wc2\test 4 4 barry b:\wc2\test\file1.txt 4 4 barry b:\wc2\test\file2.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test K 3 3 barry b:\wc1\test\file1.txt 3 3 barry b:\wc1\test\file2.txt Info: Test - update with stolen lock Info: PYSVN CMD update b:\wc1\test U b:/wc1 U b:/wc1/test U b:/wc1/test/file1.txt U b:/wc1/test/file2.txt Updated to revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry b:\wc1 4 4 barry b:\wc1\test 4 4 barry b:\wc1\test\file1.txt 4 4 barry b:\wc1\test\file2.txt Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 4 Repository root_URL: file:///B:/repos Repository UUID: 4517b923-dbb7-cd4d-ad80-263ab22bc0b8 Last changed author: barry Last Changed Date: 28-Feb-2012 13:01:51 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.win32.known_good-py3-svn1.7.log000644 000771 000771 00000015073 12177165073 023106 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry Info: PYSVN CMD c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-05 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-05 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-05 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-05 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A B:/wc1/test/file1.txt Info: PYSVN CMD add file2.txt A B:/wc1/test/file2.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file1.txt A B:/wc1/test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A B:/wc2/test A B:/wc2/test/file1.txt A B:/wc2/test/file2.txt U B:/wc2 update_started B:/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test 3 3 barry B:\wc1\test\file1.txt 3 3 barry B:\wc1\test\file2.txt Info: Test - info2 of unlocked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: B:/wc1/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: b557e329-43a1-1e4a-960c-dfe06270db71 Last changed author: barry Last Changed Date: 03-Aug-2013 12:30:14 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 03-Aug-2013 12:30:14 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - lock unlocked file Info: PYSVN CMD lock b:\wc1\test\file1.txt locked B:/wc1/test/file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test K 3 3 barry B:\wc1\test\file1.txt 3 3 barry B:\wc1\test\file2.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: B:/wc1/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: b557e329-43a1-1e4a-960c-dfe06270db71 Last changed author: barry Last Changed Date: 03-Aug-2013 12:30:14 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 03-Aug-2013 12:30:15 Lock Token: opaquelocktoken:51770ee8-1176-ae46-a9d9-364b84212927 Lock Comment: Schedule: normal Text Last Updated: 03-Aug-2013 12:30:14 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - attempt to checkin over a locked file Info: CMD cd b:\wc2\test Info: Append File file1.txt - Change to file 1 Info: Append File file2.txt - Change to file 2 Info: PYSVN CMD commit -m "change when file locked in other wc" . M B:/wc2/test/file1.txt M B:/wc2/test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: PYSVN CMD lock b:\wc2\test\file1.txt failed_lock B:/wc2/test/file1.txt Info: Test - lock --force locked file Info: PYSVN CMD lock --force b:\wc2\test\file1.txt -m "Stealing lock" locked B:/wc2/test/file1.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc2\test\file1.txt Path: B:/wc2/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: b557e329-43a1-1e4a-960c-dfe06270db71 Last changed author: barry Last Changed Date: 03-Aug-2013 12:30:14 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 03-Aug-2013 12:30:15 Lock Token: opaquelocktoken:a854b8bd-4809-6e4d-b09d-b564dbc62c42 Lock Comment: Stealing lock Schedule: normal Text Last Updated: 03-Aug-2013 12:30:14 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry B:\wc2 3 3 barry B:\wc2\test M K 3 3 barry B:\wc2\test\file1.txt M 3 3 barry B:\wc2\test\file2.txt Info: Test - commit with lock Info: PYSVN CMD commit -m "change when file locked in this wc" . M B:/wc2/test/file1.txt M B:/wc2/test/file2.txt Revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry B:\wc2 3 3 barry B:\wc2\test K 4 4 barry B:\wc2\test\file1.txt 4 4 barry B:\wc2\test\file2.txt Info: Test - unlock locked file Info: PYSVN CMD unlock b:\wc2\test\file1.txt unlocked B:/wc2/test/file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry B:\wc2 3 3 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 4 4 barry B:\wc2\test\file2.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test K 3 3 barry B:\wc1\test\file1.txt 3 3 barry B:\wc1\test\file2.txt Info: Test - update with stolen lock Info: PYSVN CMD update b:\wc1\test U B:/wc1 U B:/wc1/test U B:/wc1/test/file1.txt U B:/wc1/test/file2.txt update_started B:/wc1/test Updated to revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 4 4 barry B:\wc1\test 4 4 barry B:\wc1\test\file1.txt 4 4 barry B:\wc1\test\file2.txt Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 4 Repository root_URL: file:///B:/repos Repository UUID: b557e329-43a1-1e4a-960c-dfe06270db71 Last changed author: barry Last Changed Date: 03-Aug-2013 12:30:16 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-05.win32.known_good-py3-svn1.8.log000644 000771 000771 00000015073 12177447646 023120 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry Info: PYSVN CMD c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-05 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-05 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-05 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-05 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A B:/wc1/test/file1.txt Info: PYSVN CMD add file2.txt A B:/wc1/test/file2.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file1.txt A B:/wc1/test/file2.txt Revision 3 Info: Setup - checkout wc2 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc2 A B:/wc2/test A B:/wc2/test/file1.txt A B:/wc2/test/file2.txt U B:/wc2 update_started B:/wc2 Checked out revision 3 Info: Test - status of unlocked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test 3 3 barry B:\wc1\test\file1.txt 3 3 barry B:\wc1\test\file2.txt Info: Test - info2 of unlocked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: B:/wc1/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 8fe59178-f2da-934d-9d6c-a582079119be Last changed author: barry Last Changed Date: 04-Aug-2013 13:55:56 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 04-Aug-2013 13:55:56 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - lock unlocked file Info: PYSVN CMD lock b:\wc1\test\file1.txt locked B:/wc1/test/file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test K 3 3 barry B:\wc1\test\file1.txt 3 3 barry B:\wc1\test\file2.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc1\test\file1.txt Path: B:/wc1/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 8fe59178-f2da-934d-9d6c-a582079119be Last changed author: barry Last Changed Date: 04-Aug-2013 13:55:56 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 04-Aug-2013 13:55:57 Lock Token: opaquelocktoken:14e94e40-0c17-c048-a03a-907f290761d5 Lock Comment: Schedule: normal Text Last Updated: 04-Aug-2013 13:55:56 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - attempt to checkin over a locked file Info: CMD cd b:\wc2\test Info: Append File file1.txt - Change to file 1 Info: Append File file2.txt - Change to file 2 Info: PYSVN CMD commit -m "change when file locked in other wc" . M B:/wc2/test/file1.txt M B:/wc2/test/file2.txt Commit failed (details follow): Cannot verify lock on path '/trunk/test/file1.txt'; no matching lock-token available Info: Test - lock locked file Info: PYSVN CMD lock b:\wc2\test\file1.txt failed_lock B:/wc2/test/file1.txt Info: Test - lock --force locked file Info: PYSVN CMD lock --force b:\wc2\test\file1.txt -m "Stealing lock" locked B:/wc2/test/file1.txt Info: Test - info2 of locked files Info: PYSVN CMD info2 b:\wc2\test\file1.txt Path: B:/wc2/test/file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 8fe59178-f2da-934d-9d6c-a582079119be Last changed author: barry Last Changed Date: 04-Aug-2013 13:55:56 Last changed revision: 3 Node kind: file Lock Owner: barry Lock Creation Date: 04-Aug-2013 13:55:57 Lock Token: opaquelocktoken:086544d3-41d4-0049-b727-11fb8786b7e7 Lock Comment: Stealing lock Schedule: normal Text Last Updated: 04-Aug-2013 13:55:56 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry B:\wc2 3 3 barry B:\wc2\test M K 3 3 barry B:\wc2\test\file1.txt M 3 3 barry B:\wc2\test\file2.txt Info: Test - commit with lock Info: PYSVN CMD commit -m "change when file locked in this wc" . M B:/wc2/test/file1.txt M B:/wc2/test/file2.txt Revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry B:\wc2 3 3 barry B:\wc2\test K 4 4 barry B:\wc2\test\file1.txt 4 4 barry B:\wc2\test\file2.txt Info: Test - unlock locked file Info: PYSVN CMD unlock b:\wc2\test\file1.txt unlocked B:/wc2/test/file1.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc2 3 3 barry B:\wc2 3 3 barry B:\wc2\test 4 4 barry B:\wc2\test\file1.txt 4 4 barry B:\wc2\test\file2.txt Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test K 3 3 barry B:\wc1\test\file1.txt 3 3 barry B:\wc1\test\file2.txt Info: Test - update with stolen lock Info: PYSVN CMD update b:\wc1\test U B:/wc1 U B:/wc1/test U B:/wc1/test/file1.txt U B:/wc1/test/file2.txt update_started B:/wc1/test Updated to revision 4 Info: Test - status of locked files Info: PYSVN CMD status --verbose b:\wc1 2 2 barry B:\wc1 4 4 barry B:\wc1\test 4 4 barry B:\wc1\test\file1.txt 4 4 barry B:\wc1\test\file2.txt Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 4 Repository root_URL: file:///B:/repos Repository UUID: 8fe59178-f2da-934d-9d6c-a582079119be Last changed author: barry Last Changed Date: 04-Aug-2013 13:55:58 Last changed revision: 4 Node kind: file pysvn-1.7.8/Tests/test-06.cmd000644 000771 000771 00000003472 11655503677 016230 0ustar00barrybarry000000 000000 @echo off @prompt $P$S$G @echo WorkDir: %WORKDIR% @echo PYTHON: %PYTHON% @echo Username: %USERNAME% setlocal set PYTHONPATH=%WORKDIR%\Source;%WORKDIR%\Examples\Client set PYSVN=%PYTHON% %WORKDIR%\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir echo Info: PYSVN CMD %PYSVN% call :cmd_shell mkdir testroot-06 call :cmd_shell subst b: %CD%\testroot-06 call :cmd_shell cd /d b:\ call :cmd_shell svnadmin create b:/repos echo Info: Setup - mkdir call :cmd_pysvn mkdir file:///b:/repos/trunk -m "test-06 add trunk" call :cmd_pysvn mkdir file:///b:/repos/trunk/test -m "test-06 add test" echo Info: Setup - checkout wc1 call :cmd_pysvn checkout file:///b:/repos/trunk b:\wc1 call :cmd_shell cd b:\wc1\test echo Info: Setup - add files call :cmd_createfile file1.txt test add file 1 call :cmd_createfile file2.txt test add file 2 call :cmd_pysvn add file1.txt call :cmd_pysvn add file2.txt call :cmd_pysvn checkin -m "commit added files" echo Info: Test - info of path call :cmd_pysvn info file1.txt echo Info: Test - info2 of path call :cmd_pysvn info2 file1.txt echo Info: Test - info2 of URL call :cmd_pysvn info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt goto :eof endlocal :cmd_shell echo. echo Info: CMD %* %* goto :eof :cmd_pysvn echo. echo Info: PYSVN CMD %* %PYSVN% %* goto :eof :cmd_createfile set FILENAME=%1 shift echo Info: Create File %FILENAME% - %1 %2 %3 %4 %5 %6 %7 %8 %9 call :cmd__echo %1 %2 %3 %4 %5 %6 %7 %8 %9 >%FILENAME% goto :eof :cmd_appendfile set FILENAME=%1 shift echo Info: Append File %FILENAME% - %1 %2 %3 %4 %5 %6 %7 %8 %9 call :cmd__echo %1 %2 %3 %4 %5 %6 %7 %8 %9 >>%FILENAME% goto :eof :cmd__echo echo %* goto :eof pysvn-1.7.8/Tests/test-06.sh000755 000771 000771 00000003120 11076210000 016034 0ustar00barrybarry000000 000000 #!/bin/sh # need to get rid of any symbolic links in the WORKDIR export WORKDIR=$( ${PYTHON} -c 'import os;os.chdir("..");print( os.getcwd() )' ) cd ${WORKDIR}/Tests echo WorkDir: ${WORKDIR} echo PYTHON: ${PYTHON} echo Username: $(id -u -n) cmd () { echo Info: CWD: $(pwd) echo Info: Command: $* "$@" } cmd_pysvn () { echo Info: CWD: $(pwd) echo Info: pysvn command: $* ${PYSVN} "$@" } cmd mkdir testroot-06 cmd cd testroot-06 TESTROOT=${WORKDIR}/Tests/testroot-06 cmd mkdir tmp export TMPDIR=${TESTROOT}/tmp export PYTHONPATH=${WORKDIR}/Source:${WORKDIR}/Examples/Client export PYSVN="${PYTHON} ${WORKDIR}/Examples/Client/svn_cmd.py --pysvn-testing 01.03.00 --config-dir ${TESTROOT}/configdir" echo Info: PYSVN command ${PYSVN} cmd svnadmin create ${TESTROOT}/repos echo Info: Setup - mkdir cmd_pysvn mkdir file://${TESTROOT}/repos/trunk -m "test-06 add trunk" cmd_pysvn mkdir file://${TESTROOT}/repos/trunk/test -m "test-06 add test" echo Info: Setup - checkout wc1 cmd_pysvn checkout file://${TESTROOT}/repos/trunk ${TESTROOT}/wc1 cmd cd ${TESTROOT}/wc1/test echo Info: Setup - add files echo test add file 1 >file1.txt echo test add file 2 >file2.txt cmd_pysvn add file1.txt cmd_pysvn add file2.txt cmd_pysvn checkin -m "commit added files" echo Info: Test - info of path cmd_pysvn info file1.txt echo Info: Test - info2 of path cmd_pysvn info file1.txt echo Info: Test - info2 of URL cmd_pysvn info --revision HEAD file://${TESTROOT}/repos/trunk/test/file1.txt echo Info: Test - info2 of URL cmd_pysvn info2 --revision HEAD file://${TESTROOT}/repos/trunk/test/file1.txt true pysvn-1.7.8/Tests/test-06.unix.known_good-py2-svn1.4.log000644 000771 000771 00000010103 11331322163 023073 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python2.3 Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: mkdir tmp Info: PYSVN command /usr/bin/python2.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.03.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk -m test-06 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test -m test-06 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: checkin -m commit added files A test/file1.txt A test/file2.txt Revision 3 Info: Test - info of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 421e36a8-090a-0410-b626-e41f79184237 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 10-Jan-2006 23:41:45 Text Last Updated: 10-Jan-2006 23:41:43 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 421e36a8-090a-0410-b626-e41f79184237 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 10-Jan-2006 23:41:45 Text Last Updated: 10-Jan-2006 23:41:43 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt unused option --revision Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 421e36a8-090a-0410-b626-e41f79184237 Last changed author: barry Last Changed Date: 10-Jan-2006 23:41:45 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.unix.known_good-py2-svn1.5.log000644 000771 000771 00000010103 11331322163 023074 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python2.3 Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: mkdir tmp Info: PYSVN command /usr/bin/python2.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.03.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk -m test-06 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test -m test-06 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: checkin -m commit added files A test/file1.txt A test/file2.txt Revision 3 Info: Test - info of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 421e36a8-090a-0410-b626-e41f79184237 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 10-Jan-2006 23:41:45 Text Last Updated: 10-Jan-2006 23:41:43 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 421e36a8-090a-0410-b626-e41f79184237 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 10-Jan-2006 23:41:45 Text Last Updated: 10-Jan-2006 23:41:43 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt unused option --revision Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 421e36a8-090a-0410-b626-e41f79184237 Last changed author: barry Last Changed Date: 10-Jan-2006 23:41:45 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.unix.known_good-py2-svn1.6.log000644 000771 000771 00000010513 11331322163 023102 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.03.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk -m test-06 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test -m test-06 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file2.txt Revision 3 Info: Test - info of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 8c776b55-675e-4f63-91a1-353407e7f4a1 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 01-Mar-2009 14:58:54 Text Last Updated: 01-Mar-2009 14:58:54 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 8c776b55-675e-4f63-91a1-353407e7f4a1 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 01-Mar-2009 14:58:54 Text Last Updated: 01-Mar-2009 14:58:54 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt unused option --revision Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 8c776b55-675e-4f63-91a1-353407e7f4a1 Last changed author: barry Last Changed Date: 01-Mar-2009 14:58:54 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.unix.known_good-py2-svn1.7.log000644 000771 000771 00000010521 11603642311 023104 0ustar00barrybarry000000 000000 WorkDir: /home/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python Username: barry Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-06 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-06 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: mkdir tmp Info: PYSVN command /usr/bin/python /home/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.03.00 --config-dir /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/configdir Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: svnadmin create /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Info: Setup - mkdir Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk -m test-06 add trunk Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test -m test-06 add test Info: Setup - checkout wc1 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: checkout file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 update_started /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 Checked out revision 2 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: cd /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: Setup - add files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file1.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file1.txt Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file2.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file2.txt Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: checkin -m commit added files A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file1.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file2.txt Revision 3 Info: Test - info of path Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: e380351c-eb9c-4e30-b96e-2f18b9ec2edb Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 02-Jul-2011 16:45:43 Text Last Updated: 02-Jul-2011 16:45:43 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of path Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: e380351c-eb9c-4e30-b96e-2f18b9ec2edb Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 02-Jul-2011 16:45:43 Text Last Updated: 02-Jul-2011 16:45:43 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of URL Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info --revision HEAD file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt unused option --revision Info: Test - info2 of URL Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info2 --revision HEAD file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Path: file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: e380351c-eb9c-4e30-b96e-2f18b9ec2edb Last changed author: barry Last Changed Date: 02-Jul-2011 16:45:43 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.unix.known_good-py2-svn1.8.log000644 000771 000771 00000010521 12164247515 023117 0ustar00barrybarry000000 000000 WorkDir: /home/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python Username: barry Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-06 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-06 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: mkdir tmp Info: PYSVN command /usr/bin/python /home/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.03.00 --config-dir /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/configdir Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: svnadmin create /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Info: Setup - mkdir Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk -m test-06 add trunk Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test -m test-06 add test Info: Setup - checkout wc1 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: checkout file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test U /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 update_started /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 Checked out revision 2 Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: cd /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: Setup - add files Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file1.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file1.txt Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file2.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file2.txt Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: checkin -m commit added files A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file1.txt A /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file2.txt Revision 3 Info: Test - info of path Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: e380351c-eb9c-4e30-b96e-2f18b9ec2edb Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 02-Jul-2011 16:45:43 Text Last Updated: 02-Jul-2011 16:45:43 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of path Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: e380351c-eb9c-4e30-b96e-2f18b9ec2edb Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 02-Jul-2011 16:45:43 Text Last Updated: 02-Jul-2011 16:45:43 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of URL Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info --revision HEAD file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt unused option --revision Info: Test - info2 of URL Info: CWD: /home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info2 --revision HEAD file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Path: file1.txt Url: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///home/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: e380351c-eb9c-4e30-b96e-2f18b9ec2edb Last changed author: barry Last Changed Date: 02-Jul-2011 16:45:43 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.unix.known_good-py3-svn1.5.log000644 000771 000771 00000010103 11331322163 023075 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /usr/bin/python2.3 Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: mkdir tmp Info: PYSVN command /usr/bin/python2.3 /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.03.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk -m test-06 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test -m test-06 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: checkin -m commit added files A test/file1.txt A test/file2.txt Revision 3 Info: Test - info of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 421e36a8-090a-0410-b626-e41f79184237 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 10-Jan-2006 23:41:45 Text Last Updated: 10-Jan-2006 23:41:43 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 421e36a8-090a-0410-b626-e41f79184237 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 10-Jan-2006 23:41:45 Text Last Updated: 10-Jan-2006 23:41:43 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt unused option --revision Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 421e36a8-090a-0410-b626-e41f79184237 Last changed author: barry Last Changed Date: 10-Jan-2006 23:41:45 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.unix.known_good-py3-svn1.6.log000644 000771 000771 00000010513 11331322163 023103 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.03.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk -m test-06 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test -m test-06 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file1.txt A file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file2.txt A file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file2.txt Revision 3 Info: Test - info of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 8c776b55-675e-4f63-91a1-353407e7f4a1 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 01-Mar-2009 14:58:54 Text Last Updated: 01-Mar-2009 14:58:54 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 8c776b55-675e-4f63-91a1-353407e7f4a1 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 01-Mar-2009 14:58:54 Text Last Updated: 01-Mar-2009 14:58:54 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt unused option --revision Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: 8c776b55-675e-4f63-91a1-353407e7f4a1 Last changed author: barry Last Changed Date: 01-Mar-2009 14:58:54 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.unix.known_good-py3-svn1.7.log000644 000771 000771 00000011022 11646632567 023125 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.03.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk -m test-06 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test -m test-06 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file2.txt Revision 3 Info: Test - info of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: b3a5645c-5bc2-4a9e-aad8-a4f92d306b44 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 16-Oct-2011 20:47:26 Text Last Updated: 16-Oct-2011 20:47:26 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: b3a5645c-5bc2-4a9e-aad8-a4f92d306b44 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 16-Oct-2011 20:47:26 Text Last Updated: 16-Oct-2011 20:47:26 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt unused option --revision Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: b3a5645c-5bc2-4a9e-aad8-a4f92d306b44 Last changed author: barry Last Changed Date: 16-Oct-2011 20:47:26 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.unix.known_good-py3-svn1.8.log000644 000771 000771 00000011022 12164247515 023115 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-06 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.03.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk -m test-06 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test -m test-06 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: add file2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test/file2.txt Revision 3 Info: Test - info of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: b3a5645c-5bc2-4a9e-aad8-a4f92d306b44 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 16-Oct-2011 20:47:26 Text Last Updated: 16-Oct-2011 20:47:26 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of path Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info file1.txt Path: file1.txt Name: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Repository: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: b3a5645c-5bc2-4a9e-aad8-a4f92d306b44 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 16-Oct-2011 20:47:26 Text Last Updated: 16-Oct-2011 20:47:26 Checksum: e99afc2363b20ca1e52cd9ce4e8577eb Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt unused option --revision Info: Test - info2 of URL Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/wc1/test Info: pysvn command: info2 --revision HEAD file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Path: file1.txt Url: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-06/repos Repository UUID: b3a5645c-5bc2-4a9e-aad8-a4f92d306b44 Last changed author: barry Last Changed Date: 16-Oct-2011 20:47:26 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.win32.known_good-py2-svn1.4.log000644 000771 000771 00000004631 11331322163 023063 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python24\python.exe Info: PYSVN CMD c:\python24\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-06 Info: CMD subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-06 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-06 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-06 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD checkin -m "commit added files" A test/file1.txt A test/file2.txt Revision 3 Info: Test - info of path Info: PYSVN CMD info file1.txt Path: file1.txt Name: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Repository: file:///b:/repos Repository UUID: b08a34a7-24ac-2447-890d-38d2104d314d Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 30-Dec-2005 20:31:09 Text Last Updated: 30-Dec-2005 20:31:09 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of path Info: PYSVN CMD info2 file1.txt Path: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: b08a34a7-24ac-2447-890d-38d2104d314d Last changed author: barry Last Changed Date: 30-Dec-2005 20:31:09 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 30-Dec-2005 20:31:09 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info of URL Info: PYSVN CMD info --revision HEAD file:///b:/repos/trunk/test/file1.txt unused option --revision Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: b08a34a7-24ac-2447-890d-38d2104d314d Last changed author: barry Last Changed Date: 30-Dec-2005 20:31:09 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.win32.known_good-py2-svn1.5.log000644 000771 000771 00000004652 11331322163 023067 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python24\python.exe Username: barry Info: PYSVN CMD c:\python24\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-06 Info: CMD subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-06 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-06 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-06 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD checkin -m "commit added files" A test/file1.txt A test/file2.txt Revision 3 Info: Test - info of path Info: PYSVN CMD info file1.txt Path: file1.txt Name: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Repository: file:///b:/repos Repository UUID: b08a34a7-24ac-2447-890d-38d2104d314d Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 30-Dec-2005 20:31:09 Text Last Updated: 30-Dec-2005 20:31:09 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of path Info: PYSVN CMD info2 file1.txt Path: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: b08a34a7-24ac-2447-890d-38d2104d314d Last changed author: barry Last Changed Date: 30-Dec-2005 20:31:09 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 30-Dec-2005 20:31:09 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info of URL Info: PYSVN CMD info --revision HEAD file:///b:/repos/trunk/test/file1.txt unused option --revision Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: b08a34a7-24ac-2447-890d-38d2104d314d Last changed author: barry Last Changed Date: 30-Dec-2005 20:31:09 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.win32.known_good-py2-svn1.6.log000644 000771 000771 00000004452 11723221274 023074 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python27.win32\python.exe Username: barry Info: PYSVN CMD c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-06 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-06 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-06 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-06 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD checkin -m "commit added files" A b:/wc1/test/file1.txt A b:/wc1/test/file2.txt Revision 3 Info: Test - info of path Info: PYSVN CMD info file1.txt Path: file1.txt Name: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Repository: file:///B:/repos Repository UUID: d30306ae-2604-c64a-b7d1-fd1bec166339 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 28-Feb-2012 12:56:08 Text Last Updated: 28-Feb-2012 12:56:07 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of path Info: PYSVN CMD info2 file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: d30306ae-2604-c64a-b7d1-fd1bec166339 Last changed author: barry Last Changed Date: 28-Feb-2012 12:56:08 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 28-Feb-2012 12:56:07 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: d30306ae-2604-c64a-b7d1-fd1bec166339 Last changed author: barry Last Changed Date: 28-Feb-2012 12:56:08 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.win32.known_good-py2-svn1.7.log000644 000771 000771 00000004531 11655503677 023111 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python27.win32\python.exe Username: barry Info: PYSVN CMD c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-06 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-06 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-06 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-06 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A B:/wc1/test/file1.txt Info: PYSVN CMD add file2.txt A B:/wc1/test/file2.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file1.txt A B:/wc1/test/file2.txt Revision 3 Info: Test - info of path Info: PYSVN CMD info file1.txt Path: file1.txt Name: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Repository: file:///B:/repos Repository UUID: 20cb2cd1-2efd-3947-aaaa-689d4cbe5749 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 06-Nov-2011 13:02:31 Text Last Updated: 06-Nov-2011 13:02:31 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of path Info: PYSVN CMD info2 file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 20cb2cd1-2efd-3947-aaaa-689d4cbe5749 Last changed author: barry Last Changed Date: 06-Nov-2011 13:02:31 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 06-Nov-2011 13:02:31 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 20cb2cd1-2efd-3947-aaaa-689d4cbe5749 Last changed author: barry Last Changed Date: 06-Nov-2011 13:02:31 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.win32.known_good-py2-svn1.8.log000644 000771 000771 00000004531 12164247515 023102 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python27.win32\python.exe Username: barry Info: PYSVN CMD c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-06 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-06 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-06 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-06 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A B:/wc1/test/file1.txt Info: PYSVN CMD add file2.txt A B:/wc1/test/file2.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file1.txt A B:/wc1/test/file2.txt Revision 3 Info: Test - info of path Info: PYSVN CMD info file1.txt Path: file1.txt Name: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Repository: file:///B:/repos Repository UUID: 20cb2cd1-2efd-3947-aaaa-689d4cbe5749 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 06-Nov-2011 13:02:31 Text Last Updated: 06-Nov-2011 13:02:31 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of path Info: PYSVN CMD info2 file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 20cb2cd1-2efd-3947-aaaa-689d4cbe5749 Last changed author: barry Last Changed Date: 06-Nov-2011 13:02:31 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 06-Nov-2011 13:02:31 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 20cb2cd1-2efd-3947-aaaa-689d4cbe5749 Last changed author: barry Last Changed Date: 06-Nov-2011 13:02:31 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.win32.known_good-py3-svn1.5.log000644 000771 000771 00000004652 11331322163 023070 0ustar00barrybarry000000 000000 WorkDir: L:\wc\pysvn\trunk\pysvn\Extension PYTHON: c:\python24\python.exe Username: barry Info: PYSVN CMD c:\python24\python.exe L:\wc\pysvn\trunk\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-06 Info: CMD subst b: L:\wc\pysvn\trunk\pysvn\Extension\Tests\testroot-06 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-06 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-06 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD checkin -m "commit added files" A test/file1.txt A test/file2.txt Revision 3 Info: Test - info of path Info: PYSVN CMD info file1.txt Path: file1.txt Name: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Repository: file:///b:/repos Repository UUID: b08a34a7-24ac-2447-890d-38d2104d314d Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 30-Dec-2005 20:31:09 Text Last Updated: 30-Dec-2005 20:31:09 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of path Info: PYSVN CMD info2 file1.txt Path: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: b08a34a7-24ac-2447-890d-38d2104d314d Last changed author: barry Last Changed Date: 30-Dec-2005 20:31:09 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 30-Dec-2005 20:31:09 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info of URL Info: PYSVN CMD info --revision HEAD file:///b:/repos/trunk/test/file1.txt unused option --revision Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///b:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///b:/repos Repository UUID: b08a34a7-24ac-2447-890d-38d2104d314d Last changed author: barry Last Changed Date: 30-Dec-2005 20:31:09 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.win32.known_good-py3-svn1.6.log000644 000771 000771 00000004376 11723221274 023102 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry Info: PYSVN CMD c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-06 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-06 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-06 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-06 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A file1.txt Info: PYSVN CMD add file2.txt A file2.txt Info: PYSVN CMD checkin -m "commit added files" A b:/wc1/test/file1.txt A b:/wc1/test/file2.txt Revision 3 Info: Test - info of path Info: PYSVN CMD info file1.txt Path: file1.txt Name: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Repository: file:///B:/repos Repository UUID: 4c6ac313-389f-6c43-b318-771df97df98e Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 28-Feb-2012 13:02:07 Text Last Updated: 28-Feb-2012 13:02:06 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of path Info: PYSVN CMD info2 file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 4c6ac313-389f-6c43-b318-771df97df98e Last changed author: barry Last Changed Date: 28-Feb-2012 13:02:07 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 28-Feb-2012 13:02:06 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 4c6ac313-389f-6c43-b318-771df97df98e Last changed author: barry Last Changed Date: 28-Feb-2012 13:02:07 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.win32.known_good-py3-svn1.7.log000644 000771 000771 00000004454 12052507157 023103 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry Info: PYSVN CMD c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-06 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-06 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-06 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-06 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A B:/wc1/test/file1.txt Info: PYSVN CMD add file2.txt A B:/wc1/test/file2.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file1.txt A B:/wc1/test/file2.txt Revision 3 Info: Test - info of path Info: PYSVN CMD info file1.txt Path: file1.txt Name: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Repository: file:///B:/repos Repository UUID: 11e2c046-4fbd-0048-8b5c-e78976d7dfb5 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 19-Nov-2012 19:52:56 Text Last Updated: 19-Nov-2012 19:52:56 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of path Info: PYSVN CMD info2 file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 11e2c046-4fbd-0048-8b5c-e78976d7dfb5 Last changed author: barry Last Changed Date: 19-Nov-2012 19:52:56 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 19-Nov-2012 19:52:56 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 11e2c046-4fbd-0048-8b5c-e78976d7dfb5 Last changed author: barry Last Changed Date: 19-Nov-2012 19:52:56 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-06.win32.known_good-py3-svn1.8.log000644 000771 000771 00000004454 12164247515 023107 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry Info: PYSVN CMD c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-06 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-06 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-06 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-06 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:\wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD cd b:\wc1\test Info: Setup - add files Info: Create File file1.txt - test add file 1 Info: Create File file2.txt - test add file 2 Info: PYSVN CMD add file1.txt A B:/wc1/test/file1.txt Info: PYSVN CMD add file2.txt A B:/wc1/test/file2.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file1.txt A B:/wc1/test/file2.txt Revision 3 Info: Test - info of path Info: PYSVN CMD info file1.txt Path: file1.txt Name: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Repository: file:///B:/repos Repository UUID: 11e2c046-4fbd-0048-8b5c-e78976d7dfb5 Revision: 3 Node kind: file Schedule: normal Last Changed Author: barry Last Changed Rev: 3 Last Changed Date: 19-Nov-2012 19:52:56 Text Last Updated: 19-Nov-2012 19:52:56 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of path Info: PYSVN CMD info2 file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 11e2c046-4fbd-0048-8b5c-e78976d7dfb5 Last changed author: barry Last Changed Date: 19-Nov-2012 19:52:56 Last changed revision: 3 Node kind: file Schedule: normal Text Last Updated: 19-Nov-2012 19:52:56 Checksum: 1e41522fd7b6b6325667c8554893a6db Info: Test - info2 of URL Info: PYSVN CMD info2 --revision HEAD file:///b:/repos/trunk/test/file1.txt Path: file1.txt Url: file:///B:/repos/trunk/test/file1.txt Revision: 3 Repository root_URL: file:///B:/repos Repository UUID: 11e2c046-4fbd-0048-8b5c-e78976d7dfb5 Last changed author: barry Last Changed Date: 19-Nov-2012 19:52:56 Last changed revision: 3 Node kind: file pysvn-1.7.8/Tests/test-07.cmd000644 000771 000771 00000004350 11255417030 016204 0ustar00barrybarry000000 000000 @echo off @prompt $P$S$G @echo WorkDir: %WORKDIR% @echo PYTHON: %PYTHON% @echo Username: %USERNAME% setlocal set PYTHONPATH=%WORKDIR%\Source;%WORKDIR%\Examples\Client set PYSVN=%PYTHON% %WORKDIR%\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir echo Info: PYSVN CMD %PYSVN% call :cmd_shell mkdir testroot-07 call :cmd_shell subst b: %CD%\testroot-07 call :cmd_shell cd /d b:\ call :cmd_shell svnadmin create b:/repos echo Info: Setup - mkdir call :cmd_pysvn mkdir file:///b:/repos/trunk -m "test-07 add trunk" call :cmd_pysvn mkdir file:///b:/repos/trunk/test -m "test-07 add test" echo Info: Setup - checkout wc1 call :cmd_pysvn checkout file:///b:/repos/trunk b:/wc1 call :cmd_shell cd b:/wc1/test echo Info: Setup - add files call :cmd_createfile file_a1.txt test add file 1 call :cmd_pysvn add file_a1.txt call :cmd_pysvn checkin -m "commit added files" call :cmd_createfile file_a2.txt test add file 2 call :cmd_pysvn add file_a2.txt call :cmd_pysvn checkin -m "commit added files" call :cmd_createfile file_b1.txt test add file 1 call :cmd_pysvn add file_b1.txt call :cmd_pysvn checkin -m "commit added files" call :cmd_createfile file_b2.txt test add file 2 call :cmd_pysvn add file_b2.txt call :cmd_pysvn checkin -m "commit added files" call :cmd_pysvn status --verbose b:/wc1 echo Info: running test_07_copy2 %PYTHON% %WORKDIR%/Tests/test_07_copy2.py b:/configdir echo Info: running test_07_move2 %PYTHON% %WORKDIR%/Tests/test_07_move2.py b:/configdir echo Info: running test_07_changelist %PYTHON% %WORKDIR%/Tests/test_07_changelist.py b:/configdir rem echo Info: running test_07_revprops rem %PYTHON% %WORKDIR%/Tests/test_07_revprops.py b:/configdir goto :eof endlocal :cmd_shell echo. echo Info: CMD %* %* goto :eof :cmd_pysvn echo. echo Info: PYSVN CMD %* %PYSVN% %* goto :eof :cmd_createfile set FILENAME=%1 shift echo Info: Create File %FILENAME% - %1 %2 %3 %4 %5 %6 %7 %8 %9 call :cmd__echo %1 %2 %3 %4 %5 %6 %7 %8 %9 >%FILENAME% goto :eof :cmd_appendfile set FILENAME=%1 shift echo Info: Append File %FILENAME% - %1 %2 %3 %4 %5 %6 %7 %8 %9 call :cmd__echo %1 %2 %3 %4 %5 %6 %7 %8 %9 >>%FILENAME% goto :eof :cmd__echo echo %* goto :eof pysvn-1.7.8/Tests/test-07.sh000755 000771 000771 00000003720 11076210000 016043 0ustar00barrybarry000000 000000 #!/bin/sh # need to get rid of any symbolic links in the WORKDIR export WORKDIR=$( ${PYTHON} -c 'import os;os.chdir("..");print( os.getcwd() )' ) cd ${WORKDIR}/Tests echo WorkDir: ${WORKDIR} echo PYTHON: ${PYTHON} echo Username: $(id -u -n) cmd () { echo Info: CWD: $(pwd) echo Info: Command: $* "$@" } cmd_pysvn () { echo Info: CWD: $(pwd) echo Info: pysvn command: $* ${PYSVN} "$@" } cmd mkdir testroot-07 cmd cd testroot-07 TESTROOT=${WORKDIR}/Tests/testroot-07 cmd mkdir tmp export TMPDIR=${TESTROOT}/tmp export PYTHONPATH=${WORKDIR}/Source:${WORKDIR}/Examples/Client export PYSVN="${PYTHON} ${WORKDIR}/Examples/Client/svn_cmd.py --pysvn-testing 01.05.00 --config-dir ${TESTROOT}/configdir" echo Info: PYSVN command ${PYSVN} cmd svnadmin create ${TESTROOT}/repos echo Info: Setup - mkdir cmd_pysvn mkdir file://${TESTROOT}/repos/trunk -m "test-07 add trunk" cmd_pysvn mkdir file://${TESTROOT}/repos/trunk/test -m "test-07 add test" echo Info: Setup - checkout wc1 cmd_pysvn checkout file://${TESTROOT}/repos/trunk ${TESTROOT}/wc1 cmd cd ${TESTROOT}/wc1/test echo Info: Setup - add files echo test add file 1 >file_a1.txt cmd_pysvn add file_a1.txt cmd_pysvn checkin -m "commit added files" echo test add file 2 >file_a2.txt cmd_pysvn add file_a2.txt cmd_pysvn checkin -m "commit added files" echo test add file 1 >file_b1.txt cmd_pysvn add file_b1.txt cmd_pysvn checkin -m "commit added files" echo test add file 2 >file_b2.txt cmd_pysvn add file_b2.txt cmd_pysvn checkin -m "commit added files" cmd_pysvn status --verbose ${TESTROOT}/wc1 echo Info: running test_07_copy2 ${PYTHON} ${WORKDIR}/Tests/test_07_copy2.py ${TESTROOT}/configdir echo Info: running test_07_move2 ${PYTHON} ${WORKDIR}/Tests/test_07_move2.py ${TESTROOT}/configdir echo Info: running test_07_changelist ${PYTHON} ${WORKDIR}/Tests/test_07_changelist.py ${TESTROOT}/configdir #echo Info: running test_07_revprops #${PYTHON} ${WORKDIR}/Tests/test_07_revprops.py ${TESTROOT}/configdir true pysvn-1.7.8/Tests/test-07.unix.known_good-py2-svn1.4.log000644 000771 000771 00000000000 11253135715 023077 0ustar00barrybarry000000 000000 pysvn-1.7.8/Tests/test-07.unix.known_good-py2-svn1.5.log000644 000771 000771 00000011250 11253135715 023111 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn-next/Extension PYTHON: /usr/bin/python2.3 Username: barry Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests Info: Command: mkdir testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests Info: Command: cd testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07 Info: Command: mkdir tmp Info: PYSVN command /usr/bin/python2.3 /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.05.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/configdir Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/repos/trunk -m test-07 add trunk Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/repos/trunk/test -m test-07 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/repos/trunk /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1 A /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test U /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07 Info: Command: cd /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a1.txt A file_a1.txt Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A test/file_a1.txt Revision 3 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a2.txt A file_a2.txt Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A test/file_a2.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b1.txt A file_b1.txt Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A test/file_b1.txt Revision 5 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b2.txt A file_b2.txt Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A test/file_b2.txt Revision 6 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test/file_a1.txt 4 4 barry /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test/file_a2.txt 5 5 barry /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test/file_b1.txt 6 6 barry /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test/file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-two file_a2.txt changelist-one file_b1.txt changelist-two file_b2.txt changelist-one file_a1.txt After add_to_changelist show changelist-two changelist-two file_a2.txt changelist-two file_b2.txt After remove_from_changelists all changelist-two show all changelist-one file_b1.txt changelist-one file_a1.txt After remove_from_changelists all show all changelist-one file_b1.txt pysvn-1.7.8/Tests/test-07.unix.known_good-py2-svn1.6.log000644 000771 000771 00000011565 11664446307 023133 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.05.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk -m test-07 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk/test -m test-07 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a1.txt A file_a1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt Revision 3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a2.txt A file_a2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b1.txt A file_b1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt Revision 5 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b2.txt A file_b2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Revision 6 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt 5 5 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-one file_a1.txt changelist-two file_a2.txt changelist-one file_b1.txt changelist-two file_b2.txt After add_to_changelist show changelist-two changelist-two file_a2.txt changelist-two file_b2.txt After remove_from_changelists all changelist-two show all changelist-one file_a1.txt changelist-one file_b1.txt After remove_from_changelists all show all changelist-one file_b1.txt pysvn-1.7.8/Tests/test-07.unix.known_good-py2-svn1.7.log000644 000771 000771 00000013361 11664431657 023132 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.05.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk -m test-07 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk/test -m test-07 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt Revision 3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt Revision 5 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Revision 6 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt 5 5 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt After add_to_changelist show changelist-two changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt After remove_from_changelists all changelist-two show all changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt After remove_from_changelists all show all changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt pysvn-1.7.8/Tests/test-07.unix.known_good-py2-svn1.8.log000644 000771 000771 00000013361 12164247515 023125 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.05.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk -m test-07 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk/test -m test-07 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt Revision 3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt Revision 5 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Revision 6 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt 5 5 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt After add_to_changelist show changelist-two changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt After remove_from_changelists all changelist-two show all changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt After remove_from_changelists all show all changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt pysvn-1.7.8/Tests/test-07.unix.known_good-py3-svn1.5.log000644 000771 000771 00000011250 11255423566 023120 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn-next/Extension PYTHON: /usr/bin/python2.3 Username: barry Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests Info: Command: mkdir testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests Info: Command: cd testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07 Info: Command: mkdir tmp Info: PYSVN command /usr/bin/python2.3 /Users/barry/wc/svn/pysvn-next/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.05.00 --config-dir /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/configdir Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/repos/trunk -m test-07 add trunk Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/repos/trunk/test -m test-07 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/repos/trunk /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1 A /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test U /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07 Info: Command: cd /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a1.txt A file_a1.txt Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A test/file_a1.txt Revision 3 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a2.txt A file_a2.txt Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A test/file_a2.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b1.txt A file_b1.txt Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A test/file_b1.txt Revision 5 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b2.txt A file_b2.txt Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A test/file_b2.txt Revision 6 Info: CWD: /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test/file_a1.txt 4 4 barry /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test/file_a2.txt 5 5 barry /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test/file_b1.txt 6 6 barry /Users/barry/wc/svn/pysvn-next/Extension/Tests/testroot-07/wc1/test/file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-two file_a2.txt changelist-one file_b1.txt changelist-two file_b2.txt changelist-one file_a1.txt After add_to_changelist show changelist-two changelist-two file_a2.txt changelist-two file_b2.txt After remove_from_changelists all changelist-two show all changelist-one file_b1.txt changelist-one file_a1.txt After remove_from_changelists all show all changelist-one file_b1.txt pysvn-1.7.8/Tests/test-07.unix.known_good-py3-svn1.6.log000644 000771 000771 00000011565 11722500535 023121 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.05.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk -m test-07 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk/test -m test-07 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a1.txt A file_a1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt Revision 3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a2.txt A file_a2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b1.txt A file_b1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt Revision 5 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b2.txt A file_b2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Revision 6 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt 5 5 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-one file_a1.txt changelist-two file_a2.txt changelist-one file_b1.txt changelist-two file_b2.txt After add_to_changelist show changelist-two changelist-two file_a2.txt changelist-two file_b2.txt After remove_from_changelists all changelist-two show all changelist-one file_a1.txt changelist-one file_b1.txt After remove_from_changelists all show all changelist-one file_b1.txt pysvn-1.7.8/Tests/test-07.unix.known_good-py3-svn1.7.log000644 000771 000771 00000013361 11722473713 023125 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.05.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk -m test-07 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk/test -m test-07 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt Revision 3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt Revision 5 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Revision 6 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt 5 5 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt After add_to_changelist show changelist-two changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt After remove_from_changelists all changelist-two show all changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt After remove_from_changelists all show all changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt pysvn-1.7.8/Tests/test-07.unix.known_good-py3-svn1.8.log000644 000771 000771 00000013361 12164247515 023126 0ustar00barrybarry000000 000000 WorkDir: /Users/barry/wc/svn/pysvn/Extension PYTHON: /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python Username: barry Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: mkdir testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests Info: Command: cd testroot-07 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: mkdir tmp Info: PYSVN command /Library/Frameworks/Python.framework/Versions/3.2/Resources/Python.app/Contents/MacOS/Python /Users/barry/wc/svn/pysvn/Extension/Examples/Client/svn_cmd.py --pysvn-testing 01.05.00 --config-dir /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/configdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: svnadmin create /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos Info: Setup - mkdir Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk -m test-07 add trunk Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: mkdir file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk/test -m test-07 add test Info: Setup - checkout wc1 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: pysvn command: checkout file:///Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/repos/trunk /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test U /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 update_started /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 Checked out revision 2 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07 Info: Command: cd /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: Setup - add files Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt Revision 3 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_a2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt Revision 4 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b1.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt Revision 5 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: add file_b2.txt A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: checkin -m commit added files A /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Revision 6 Info: CWD: /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test Info: pysvn command: status --verbose /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1 2 2 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test 3 3 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt 4 4 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt 5 5 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt 6 6 barry /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt After add_to_changelist show changelist-two changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a2.txt changelist-two /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b2.txt After remove_from_changelists all changelist-two show all changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_a1.txt changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt After remove_from_changelists all show all changelist-one /Users/barry/wc/svn/pysvn/Extension/Tests/testroot-07/wc1/test/file_b1.txt pysvn-1.7.8/Tests/test-07.win32.known_good-py2-svn1.5.log000644 000771 000771 00000005556 11255444226 023106 0ustar00barrybarry000000 000000 WorkDir: C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31 PYTHON: c:\python31\python.exe Username: barry Info: PYSVN CMD c:\python31\python.exe C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-07 Info: CMD subst b: C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31\Tests\testroot-07 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-07 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-07 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:/wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:/wc1/test Info: Setup - add files Info: Create File file_a1.txt - test add file 1 Info: PYSVN CMD add file_a1.txt A file_a1.txt Info: PYSVN CMD checkin -m "commit added files" A test/file_a1.txt Revision 3 Info: Create File file_a2.txt - test add file 2 Info: PYSVN CMD add file_a2.txt A file_a2.txt Info: PYSVN CMD checkin -m "commit added files" A test/file_a2.txt Revision 4 Info: Create File file_b1.txt - test add file 1 Info: PYSVN CMD add file_b1.txt A file_b1.txt Info: PYSVN CMD checkin -m "commit added files" A test/file_b1.txt Revision 5 Info: Create File file_b2.txt - test add file 2 Info: PYSVN CMD add file_b2.txt A file_b2.txt The system cannot find the batch label specified - cmd_pysvn Info: PYSVN CMD status --verbose b:/wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test 3 3 barry b:\wc1\test\file_a1.txt 4 4 barry b:\wc1\test\file_a2.txt 5 5 barry b:\wc1\test\file_b1.txt A 0 -1 None b:\wc1\test\file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-two file_a2.txt changelist-one file_b1.txt changelist-two file_b2.txt changelist-one file_a1.txt After add_to_changelist show changelist-two changelist-two file_a2.txt changelist-two file_b2.txt After remove_from_changelists all changelist-two show all changelist-one file_b1.txt changelist-one file_a1.txt After remove_from_changelists all show all changelist-one file_b1.txt pysvn-1.7.8/Tests/test-07.win32.known_good-py2-svn1.6.log000644 000771 000771 00000005534 11723221274 023077 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python27.win32\python.exe Username: barry Info: PYSVN CMD c:\python27.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-07 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-07 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-07 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-07 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:/wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:/wc1/test Info: Setup - add files Info: Create File file_a1.txt - test add file 1 Info: PYSVN CMD add file_a1.txt A file_a1.txt Info: PYSVN CMD checkin -m "commit added files" A b:/wc1/test/file_a1.txt Revision 3 Info: Create File file_a2.txt - test add file 2 Info: PYSVN CMD add file_a2.txt A file_a2.txt Info: PYSVN CMD checkin -m "commit added files" A b:/wc1/test/file_a2.txt Revision 4 Info: Create File file_b1.txt - test add file 1 Info: PYSVN CMD add file_b1.txt A file_b1.txt Info: PYSVN CMD checkin -m "commit added files" A b:/wc1/test/file_b1.txt Revision 5 Info: Create File file_b2.txt - test add file 2 Info: PYSVN CMD add file_b2.txt A file_b2.txt The system cannot find the batch label specified - cmd_pysvn Info: PYSVN CMD status --verbose b:/wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test 3 3 barry b:\wc1\test\file_a1.txt 4 4 barry b:\wc1\test\file_a2.txt 5 5 barry b:\wc1\test\file_b1.txt A 0 -1 None b:\wc1\test\file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-one file_a1.txt changelist-two file_a2.txt changelist-one file_b1.txt changelist-two file_b2.txt After add_to_changelist show changelist-two changelist-two file_a2.txt changelist-two file_b2.txt After remove_from_changelists all changelist-two show all changelist-one file_a1.txt changelist-one file_b1.txt After remove_from_changelists all show all changelist-one file_b1.txt pysvn-1.7.8/Tests/test-07.win32.known_good-py2-svn1.7.log000644 000771 000771 00000006102 11664450210 023066 0ustar00barrybarry000000 000000 WorkDir: C:\BuildRoot\Win32-MSVC90-1.7.1\py27_pysvn PYTHON: c:\python27.Win32\python.exe Username: barry Info: PYSVN CMD c:\python27.Win32\python.exe C:\BuildRoot\Win32-MSVC90-1.7.1\py27_pysvn\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-07 Info: CMD subst b: C:\BuildRoot\Win32-MSVC90-1.7.1\py27_pysvn\Tests\testroot-07 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-07 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-07 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:/wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD cd b:/wc1/test Info: Setup - add files Info: Create File file_a1.txt - test add file 1 Info: PYSVN CMD add file_a1.txt A B:/wc1/test/file_a1.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file_a1.txt Revision 3 Info: Create File file_a2.txt - test add file 2 Info: PYSVN CMD add file_a2.txt A B:/wc1/test/file_a2.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file_a2.txt Revision 4 Info: Create File file_b1.txt - test add file 1 Info: PYSVN CMD add file_b1.txt A B:/wc1/test/file_b1.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file_b1.txt Revision 5 Info: Create File file_b2.txt - test add file 2 Info: PYSVN CMD add file_b2.txt A B:/wc1/test/file_b2.txt The system cannot find the batch label specified - cmd_pysvn Info: PYSVN CMD status --verbose b:/wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test 3 3 barry B:\wc1\test\file_a1.txt 4 4 barry B:\wc1\test\file_a2.txt 5 5 barry B:\wc1\test\file_b1.txt A 0 -1 None B:\wc1\test\file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-one B:/wc1/test/file_a1.txt changelist-two B:/wc1/test/file_a2.txt changelist-one B:/wc1/test/file_b1.txt changelist-two B:/wc1/test/file_b2.txt After add_to_changelist show changelist-two changelist-two B:/wc1/test/file_a2.txt changelist-two B:/wc1/test/file_b2.txt After remove_from_changelists all changelist-two show all changelist-one B:/wc1/test/file_a1.txt changelist-one B:/wc1/test/file_b1.txt After remove_from_changelists all show all changelist-one B:/wc1/test/file_b1.txt pysvn-1.7.8/Tests/test-07.win32.known_good-py2-svn1.8.log000644 000771 000771 00000006102 12164247515 023077 0ustar00barrybarry000000 000000 WorkDir: C:\BuildRoot\Win32-MSVC90-1.7.1\py27_pysvn PYTHON: c:\python27.Win32\python.exe Username: barry Info: PYSVN CMD c:\python27.Win32\python.exe C:\BuildRoot\Win32-MSVC90-1.7.1\py27_pysvn\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-07 Info: CMD subst b: C:\BuildRoot\Win32-MSVC90-1.7.1\py27_pysvn\Tests\testroot-07 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-07 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-07 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:/wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD cd b:/wc1/test Info: Setup - add files Info: Create File file_a1.txt - test add file 1 Info: PYSVN CMD add file_a1.txt A B:/wc1/test/file_a1.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file_a1.txt Revision 3 Info: Create File file_a2.txt - test add file 2 Info: PYSVN CMD add file_a2.txt A B:/wc1/test/file_a2.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file_a2.txt Revision 4 Info: Create File file_b1.txt - test add file 1 Info: PYSVN CMD add file_b1.txt A B:/wc1/test/file_b1.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file_b1.txt Revision 5 Info: Create File file_b2.txt - test add file 2 Info: PYSVN CMD add file_b2.txt A B:/wc1/test/file_b2.txt The system cannot find the batch label specified - cmd_pysvn Info: PYSVN CMD status --verbose b:/wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test 3 3 barry B:\wc1\test\file_a1.txt 4 4 barry B:\wc1\test\file_a2.txt 5 5 barry B:\wc1\test\file_b1.txt A 0 -1 None B:\wc1\test\file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-one B:/wc1/test/file_a1.txt changelist-two B:/wc1/test/file_a2.txt changelist-one B:/wc1/test/file_b1.txt changelist-two B:/wc1/test/file_b2.txt After add_to_changelist show changelist-two changelist-two B:/wc1/test/file_a2.txt changelist-two B:/wc1/test/file_b2.txt After remove_from_changelists all changelist-two show all changelist-one B:/wc1/test/file_a1.txt changelist-one B:/wc1/test/file_b1.txt After remove_from_changelists all show all changelist-one B:/wc1/test/file_b1.txt pysvn-1.7.8/Tests/test-07.win32.known_good-py3-svn1.5.log000644 000771 000771 00000005556 11255444226 023107 0ustar00barrybarry000000 000000 WorkDir: C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31 PYTHON: c:\python31\python.exe Username: barry Info: PYSVN CMD c:\python31\python.exe C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-07 Info: CMD subst b: C:\BuildRoot\Win32-MSVC90-1.5.6\pysvn\py31\Tests\testroot-07 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-07 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-07 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:/wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:/wc1/test Info: Setup - add files Info: Create File file_a1.txt - test add file 1 Info: PYSVN CMD add file_a1.txt A file_a1.txt Info: PYSVN CMD checkin -m "commit added files" A test/file_a1.txt Revision 3 Info: Create File file_a2.txt - test add file 2 Info: PYSVN CMD add file_a2.txt A file_a2.txt Info: PYSVN CMD checkin -m "commit added files" A test/file_a2.txt Revision 4 Info: Create File file_b1.txt - test add file 1 Info: PYSVN CMD add file_b1.txt A file_b1.txt Info: PYSVN CMD checkin -m "commit added files" A test/file_b1.txt Revision 5 Info: Create File file_b2.txt - test add file 2 Info: PYSVN CMD add file_b2.txt A file_b2.txt The system cannot find the batch label specified - cmd_pysvn Info: PYSVN CMD status --verbose b:/wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test 3 3 barry b:\wc1\test\file_a1.txt 4 4 barry b:\wc1\test\file_a2.txt 5 5 barry b:\wc1\test\file_b1.txt A 0 -1 None b:\wc1\test\file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-two file_a2.txt changelist-one file_b1.txt changelist-two file_b2.txt changelist-one file_a1.txt After add_to_changelist show changelist-two changelist-two file_a2.txt changelist-two file_b2.txt After remove_from_changelists all changelist-two show all changelist-one file_b1.txt changelist-one file_a1.txt After remove_from_changelists all show all changelist-one file_b1.txt pysvn-1.7.8/Tests/test-07.win32.known_good-py3-svn1.6.log000644 000771 000771 00000005462 11723221274 023100 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry Info: PYSVN CMD c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-07 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-07 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-07 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-07 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:/wc1 A b:/wc1/test U b:/wc1 Checked out revision 2 Info: CMD cd b:/wc1/test Info: Setup - add files Info: Create File file_a1.txt - test add file 1 Info: PYSVN CMD add file_a1.txt A file_a1.txt Info: PYSVN CMD checkin -m "commit added files" A b:/wc1/test/file_a1.txt Revision 3 Info: Create File file_a2.txt - test add file 2 Info: PYSVN CMD add file_a2.txt A file_a2.txt Info: PYSVN CMD checkin -m "commit added files" A b:/wc1/test/file_a2.txt Revision 4 Info: Create File file_b1.txt - test add file 1 Info: PYSVN CMD add file_b1.txt A file_b1.txt Info: PYSVN CMD checkin -m "commit added files" A b:/wc1/test/file_b1.txt Revision 5 Info: Create File file_b2.txt - test add file 2 Info: PYSVN CMD add file_b2.txt A file_b2.txt The system cannot find the batch label specified - cmd_pysvn Info: PYSVN CMD status --verbose b:/wc1 2 2 barry b:\wc1 2 2 barry b:\wc1\test 3 3 barry b:\wc1\test\file_a1.txt 4 4 barry b:\wc1\test\file_a2.txt 5 5 barry b:\wc1\test\file_b1.txt A 0 -1 None b:\wc1\test\file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-one file_a1.txt changelist-two file_a2.txt changelist-one file_b1.txt changelist-two file_b2.txt After add_to_changelist show changelist-two changelist-two file_a2.txt changelist-two file_b2.txt After remove_from_changelists all changelist-two show all changelist-one file_a1.txt changelist-one file_b1.txt After remove_from_changelists all show all changelist-one file_b1.txt pysvn-1.7.8/Tests/test-07.win32.known_good-py3-svn1.7.log000644 000771 000771 00000005744 12052507157 023107 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry Info: PYSVN CMD c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-07 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-07 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-07 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-07 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:/wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD cd b:/wc1/test Info: Setup - add files Info: Create File file_a1.txt - test add file 1 Info: PYSVN CMD add file_a1.txt A B:/wc1/test/file_a1.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file_a1.txt Revision 3 Info: Create File file_a2.txt - test add file 2 Info: PYSVN CMD add file_a2.txt A B:/wc1/test/file_a2.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file_a2.txt Revision 4 Info: Create File file_b1.txt - test add file 1 Info: PYSVN CMD add file_b1.txt A B:/wc1/test/file_b1.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file_b1.txt Revision 5 Info: Create File file_b2.txt - test add file 2 Info: PYSVN CMD add file_b2.txt A B:/wc1/test/file_b2.txt The system cannot find the batch label specified - cmd_pysvn Info: PYSVN CMD status --verbose b:/wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test 3 3 barry B:\wc1\test\file_a1.txt 4 4 barry B:\wc1\test\file_a2.txt 5 5 barry B:\wc1\test\file_b1.txt A 0 -1 None B:\wc1\test\file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-one B:/wc1/test/file_a1.txt changelist-two B:/wc1/test/file_a2.txt changelist-one B:/wc1/test/file_b1.txt changelist-two B:/wc1/test/file_b2.txt After add_to_changelist show changelist-two changelist-two B:/wc1/test/file_a2.txt changelist-two B:/wc1/test/file_b2.txt After remove_from_changelists all changelist-two show all changelist-one B:/wc1/test/file_a1.txt changelist-one B:/wc1/test/file_b1.txt After remove_from_changelists all show all changelist-one B:/wc1/test/file_b1.txt pysvn-1.7.8/Tests/test-07.win32.known_good-py3-svn1.8.log000644 000771 000771 00000005744 12164247515 023113 0ustar00barrybarry000000 000000 WorkDir: C:\wc\svn\pysvn\Extension PYTHON: c:\python32.win32\python.exe Username: barry Info: PYSVN CMD c:\python32.win32\python.exe C:\wc\svn\pysvn\Extension\Examples\Client\svn_cmd.py --pysvn-testing 01.03.00 --config-dir b:\configdir Info: CMD mkdir testroot-07 Info: CMD subst b: C:\wc\svn\pysvn\Extension\Tests\testroot-07 Info: CMD cd /d b:\ Info: CMD svnadmin create b:/repos Info: Setup - mkdir Info: PYSVN CMD mkdir file:///b:/repos/trunk -m "test-07 add trunk" Info: PYSVN CMD mkdir file:///b:/repos/trunk/test -m "test-07 add test" Info: Setup - checkout wc1 Info: PYSVN CMD checkout file:///b:/repos/trunk b:/wc1 A B:/wc1/test U B:/wc1 update_started B:/wc1 Checked out revision 2 Info: CMD cd b:/wc1/test Info: Setup - add files Info: Create File file_a1.txt - test add file 1 Info: PYSVN CMD add file_a1.txt A B:/wc1/test/file_a1.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file_a1.txt Revision 3 Info: Create File file_a2.txt - test add file 2 Info: PYSVN CMD add file_a2.txt A B:/wc1/test/file_a2.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file_a2.txt Revision 4 Info: Create File file_b1.txt - test add file 1 Info: PYSVN CMD add file_b1.txt A B:/wc1/test/file_b1.txt Info: PYSVN CMD checkin -m "commit added files" A B:/wc1/test/file_b1.txt Revision 5 Info: Create File file_b2.txt - test add file 2 Info: PYSVN CMD add file_b2.txt A B:/wc1/test/file_b2.txt The system cannot find the batch label specified - cmd_pysvn Info: PYSVN CMD status --verbose b:/wc1 2 2 barry B:\wc1 2 2 barry B:\wc1\test 3 3 barry B:\wc1\test\file_a1.txt 4 4 barry B:\wc1\test\file_a2.txt 5 5 barry B:\wc1\test\file_b1.txt A 0 -1 None B:\wc1\test\file_b2.txt Info: running test_07_copy2 Info: Copy2 with no revision and no peg_revision Info: Copy2 with no peg_revision Info: Copy2 Info: Copy2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_move2 Info: Move2 will succeed Info: Move2 will raise error Info: Error: 'Operation does not support multiple sources' Info: Code: 195014, Message: 'Operation does not support multiple sources' Info: running test_07_changelist After add_to_changelist show all changelist-one B:/wc1/test/file_a1.txt changelist-two B:/wc1/test/file_a2.txt changelist-one B:/wc1/test/file_b1.txt changelist-two B:/wc1/test/file_b2.txt After add_to_changelist show changelist-two changelist-two B:/wc1/test/file_a2.txt changelist-two B:/wc1/test/file_b2.txt After remove_from_changelists all changelist-two show all changelist-one B:/wc1/test/file_a1.txt changelist-one B:/wc1/test/file_b1.txt After remove_from_changelists all show all changelist-one B:/wc1/test/file_b1.txt pysvn-1.7.8/Tests/test-pysvn.cmd000644 000771 000771 00000000551 10172517477 017151 0ustar00barrybarry000000 000000 rem test 01 test commands call test-01.cmd >test-01.new.log 2>&1 rem test 02 is not a regression test rem can only run 03 on barry's LAN if "%USERNAME%" == "barry" call test-03.cmd >test-03.new.log 2>&1 python benchmark_diff test-01.known_good.log test-01.new.log if "%USERNAME%" == "barry" python benchmark_diff test-03.known_good.log test-03.new.log pysvn-1.7.8/Tests/test_01_set_get_tests.py000644 000771 000771 00000003373 11076210000 021072 0ustar00barrybarry000000 000000 import sys import pysvn c = pysvn.Client( sys.argv[1] ) print( 'Info: Initial values' ) print( 'Info: get_auth_cache() => %r' % c.get_auth_cache() ) print( 'Info: get_auto_props() => %r' % c.get_auto_props() ) print( 'Info: get_default_password() => %r' % c.get_default_password() ) print( 'Info: get_default_username() => %r' % c.get_default_username() ) print( 'Info: get_interactive() => %r' % c.get_interactive() ) print( 'Info: get_store_passwords() => %r' % c.get_store_passwords() ) print( 'Info: Change values 1' ) c.set_auth_cache( False ) c.set_auto_props( False ) c.set_default_password( "thepass" ) c.set_default_username( "auser" ) c.set_interactive( False ) c.set_store_passwords( False ) print( 'Info: Changed values 1' ) print( 'Info: get_auth_cache() => %r' % c.get_auth_cache() ) print( 'Info: get_auto_props() => %r' % c.get_auto_props() ) print( 'Info: get_default_password() => %r' % c.get_default_password() ) print( 'Info: get_default_username() => %r' % c.get_default_username() ) print( 'Info: get_interactive() => %r' % c.get_interactive() ) print( 'Info: get_store_passwords() => %r' % c.get_store_passwords() ) print( 'Info: Change values 2' ) c.set_auth_cache( True ) c.set_auto_props( True ) c.set_default_password( None ) c.set_default_username( None ) c.set_interactive( True ) c.set_store_passwords( True ) print( 'Info: Changed values 2' ) print( 'Info: get_auth_cache() => %r' % c.get_auth_cache() ) print( 'Info: get_auto_props() => %r' % c.get_auto_props() ) print( 'Info: get_default_password() => %r' % c.get_default_password() ) print( 'Info: get_default_username() => %r' % c.get_default_username() ) print( 'Info: get_interactive() => %r' % c.get_interactive() ) print( 'Info: get_store_passwords() => %r' % c.get_store_passwords() ) pysvn-1.7.8/Tests/test_04_commit_hook_test_1.py000644 000771 000771 00000005102 12164244243 022017 0ustar00barrybarry000000 000000 import sys import pysvn cmd = sys.argv[1] print( 'Info: %s test 1' % (cmd,) ) if len(sys.argv) == 6 and sys.argv[5] == 'is_revision': # starting with svn 1.8 the transaction is in argv[4] but does not seem usable # continue to use the revision print( 'Info: Transaction( %s, %s, is_revision=True) ...' % (sys.argv[2], sys.argv[3]) ) t = pysvn.Transaction( sys.argv[2], sys.argv[3], is_revision=True ) elif len(sys.argv) == 5 and sys.argv[4] == 'is_revision': # pre svn 1.8 interface print( 'Info: Transaction( %s, %s, is_revision=True) ...' % (sys.argv[2], sys.argv[3]) ) t = pysvn.Transaction( sys.argv[2], sys.argv[3], is_revision=True ) else: print( 'Info: Transaction( %s, %s) ...' % (sys.argv[2], sys.argv[3]) ) t = pysvn.Transaction( sys.argv[2], sys.argv[3] ) print( 'Info: revproplist() ...' ) all_props = t.revproplist() for name, value in sorted( list( all_props.items() ) ): print( '%s: %s' % (name, value) ) print( 'Info: changed() ...' ) changes = t.changed() change_list = list( changes.items() ) change_list.sort() for name, (action, kind, text_mod, prop_mod) in change_list: print( '%s: action=%r, kind=%r, text_mod=%r, prop_mod=%r' % (name, action, kind, text_mod, prop_mod) ) if action != 'D': all_props = t.proplist( name ) for prop_name, prop_value in sorted( list( all_props.items() ) ): print( ' %s: %s' % (prop_name, prop_value) ) if kind == pysvn.node_kind.file: print( ' contents: %r' % t.cat( name ) ) print( 'Info: changed( copy_info=True ) ...' ) changes = t.changed( copy_info=True ) change_list = list( changes.items() ) change_list.sort() for name, (action, kind, text_mod, prop_mod, copyfrom_rev, copyfrom_path) in change_list: print( '%s: action=%r, kind=%r, text_mod=%r, prop_mod=%r copyfrom_rev=%r copyfrom_path=%r' % (name, action, kind, text_mod, prop_mod, copyfrom_rev, copyfrom_path) ) if action != 'D': all_props = t.proplist( name ) for prop_name, prop_value in sorted( list( all_props.items() ) ): print( ' %s: %s' % (prop_name, prop_value) ) if kind == pysvn.node_kind.file: print( ' contents: %r' % t.cat( name ) ) print( 'Info: list() ...' ) def recursive_list( path ): entries = t.list( path ) entry_list = list( entries.items() ) entry_list.sort() for name, kind in entry_list: full = '%s/%s' % (path, name) print( '%s: kind=%r' % (full, kind) ) if kind == pysvn.node_kind.dir: recursive_list( full ) recursive_list( '' ) sys.exit( 0 ) pysvn-1.7.8/Tests/test_07_changelist.py000644 000771 000771 00000002071 11664431657 020371 0ustar00barrybarry000000 000000 import pysvn import sys c = pysvn.Client( sys.argv[1] ) c.exception_style = 1 c.add_to_changelist( 'file_a1.txt', 'changelist-one' ) c.add_to_changelist( 'file_a2.txt', 'changelist-two' ) c.add_to_changelist( 'file_b1.txt', 'changelist-one' ) c.add_to_changelist( 'file_b2.txt', 'changelist-two' ) print( 'After add_to_changelist show all' ) for path, changelist in sorted( c.get_changelist( '.' ) ): print( ' %s %s' % (changelist, path) ) print( 'After add_to_changelist show changelist-two' ) for path, changelist in sorted( c.get_changelist( '.', changelists=['changelist-two'] ) ): print( ' %s %s' % (changelist, path) ) c.remove_from_changelists( '.', changelists=['changelist-two'] ) print( 'After remove_from_changelists all changelist-two show all' ) for path, changelist in sorted( c.get_changelist( '.' ) ): print( ' %s %s' % (changelist, path) ) print( 'After remove_from_changelists all show all' ) c.remove_from_changelists( 'file_a1.txt' ) for path, changelist in sorted( c.get_changelist( '.' ) ): print( ' %s %s' % (changelist, path) ) pysvn-1.7.8/Tests/test_07_copy2.py000644 000771 000771 00000002266 11076210000 017260 0ustar00barrybarry000000 000000 import pysvn import sys c = pysvn.Client( sys.argv[1] ) c.exception_style = 1 src_list = [ ('file_a1.txt',), ('file_a2.txt',), ] print( 'Info: Copy2 with no revision and no peg_revision' ) c.copy2( src_list, 'wc_copy_1', make_parents=True, copy_as_child=True ) src_list = [ ('file_a1.txt', pysvn.Revision( pysvn.opt_revision_kind.number, 4 )), ('file_a2.txt', pysvn.Revision( pysvn.opt_revision_kind.number, 4 )), ] print( 'Info: Copy2 with no peg_revision' ) c.copy2( src_list, 'wc_copy_2', make_parents=True, copy_as_child=True ) src_list = [ ('file_a1.txt', pysvn.Revision( pysvn.opt_revision_kind.number, 4 ), pysvn.Revision( pysvn.opt_revision_kind.number, 4 )), ('file_a2.txt', pysvn.Revision( pysvn.opt_revision_kind.number, 4 ), pysvn.Revision( pysvn.opt_revision_kind.number, 4 )), ] print( 'Info: Copy2' ) c.copy2( src_list, 'wc_copy_3', make_parents=True, copy_as_child=True ) print( 'Info: Copy2 will raise error' ) try: c.copy2( src_list, 'wc_copy_3', make_parents=True ) except pysvn.ClientError as e: print( 'Info: Error: %r' % e.args[0] ) for message, code in e.args[1]: print( 'Info: Code: %d, Message: %r' % (code, message) ) pysvn-1.7.8/Tests/test_07_move2.py000644 000771 000771 00000001105 11076210000 017243 0ustar00barrybarry000000 000000 import pysvn import sys c = pysvn.Client( sys.argv[1] ) c.exception_style = 1 src_list = [ 'file_a1.txt', 'file_a2.txt', ] print( 'Info: Move2 will succeed' ) c.move2( src_list, 'wc_move_1', make_parents=True, move_as_child=True ) src_list = [ 'file_b1.txt', 'file_b2.txt', ] print( 'Info: Move2 will raise error' ) try: c.move2( src_list, 'wc_move_3', make_parents=True ) except pysvn.ClientError as e: print( 'Info: Error: %r' % e.args[0] ) for message, code in e.args[1]: print( 'Info: Code: %d, Message: %r' % (code, message) ) pysvn-1.7.8/Tests/test_callbacks.py000644 000771 000771 00000005427 11134663607 017663 0ustar00barrybarry000000 000000 src_dir='../../Source' import os if not os.path.exists( os.path.join( src_dir, 'pysvn/__init__.py' ) ): raise RuntimeError('Where is the pysvn module? pwd=%s' % os.getcwd() ) import sys sys.path.insert( 0, src_dir ) import pysvn class Test: def __init__( self ): self.pass_count = 0 self.fail_count = 0 def test( self ): self.test_1() print( 'Info: Passed %d' % self.pass_count ) if self.fail_count > 0: print( 'Info: FAILED %d' % self.pass_count ) return self.fail_count == 0 def info( self, msg ): print( 'Info: %s' % msg ) def passed( self ): print( 'Info: passed' ) self.pass_count += 1 def failed( self, msg ): print( 'Error: FAILED %s' % msg ) self.fail_count += 1 def test_1( self ): self.client = pysvn.Client( 'configdir' ) self.info( 'Client created' ) self.test_1_sub1( 'callback_get_login required' ) self.client.callback_get_login = get_login_bad self.test_1_sub1( 'unhandled exception in callback_get_login' ) self.client.callback_get_login = get_login_good self.test_1_sub1( 'callback_get_log_message required' ) self.client.callback_get_log_message = get_log_message_bad self.test_1_sub1( 'unhandled exception in callback_get_log_message' ) self.client.callback_get_log_message = get_log_message_good self.test_1_sub1() self.client.remove( 'http://liara/svn/barrys-test-lib/trunk/fred/testing/bar99.txt' ) def test_1_sub1( self, expected=None ): try: self.info( 'Expecting error %s' % expected ) self.client.copy( 'http://liara/svn/barrys-test-lib/trunk/fred/testing/bar.txt', 'http://liara/svn/barrys-test-lib/trunk/fred/testing/bar99.txt' ) except pysvn.ClientError as e: if expected is None: self.failed( 'unexpected exception: %s' % e ) if str(e) == expected: self.passed() else: self.failed( 'unexpected exception: %s' % e ) return if expected is not None: self.failed( 'expected exception' ) def get_login_bad( realm, username, may_save ): # bad because of undefined retcode return retcode, username, password, save def get_login_good( realm, username, may_save ): return True, username, 'fred', may_save def get_log_message_bad(): # bad because of undefined bad_var return bad_var def get_log_message_good(): return True, 'test_03 reason' if __name__ == '__main__': t = Test() if t.test(): sys.exit( 0 ) else: sys.exit( 1 ) pysvn-1.7.8/Tests/thread_tests.py000644 000771 000771 00000002131 10016000572 017343 0ustar00barrybarry000000 000000 import sys import os import threading import pysvn import time def main( args ): num_threads = int(args[0]) repo = args[1] all_threads = [] for index in range(num_threads): t = CheckOutThread( index, repo ) all_threads.append( t ) t.start() some_alive = True while some_alive: some_alive = False time.sleep( 1 ) for t in all_threads: if t.isAlive(): some_alive = True print 'Done' class CheckOutThread(threading.Thread): def __init__( self, index, repo ): threading.Thread.__init__( self ) self.co_dir = os.path.join( 'testroot', 'wc_%d' % index ) self.co_repo = repo def run( self ): print 'Checkout',self.co_repo,self.co_dir client = pysvn.Client() client.callback_notify = self.callback_notify client.callback_cancel = self.callback_cancel x = client.checkout( self.co_repo, self.co_dir ) print 'Checkout to',self.co_dir,'Done' def callback_cancel( self ): print self.co_dir, 'Cancel check' return False def callback_notify( self, arg_dict ): print self.co_dir, arg_dict['action'], arg_dict['path'] if __name__ == '__main__': main( sys.argv[1:] ) pysvn-1.7.8/Tests/win32.mak000644 000771 000771 00000010654 11255444226 015763 0ustar00barrybarry000000 000000 # # PySVN win32 tests - win32.mak # all: test-01.win32.new.log test-03.win32.new.log test-04.win32.new.log test-05.win32.new.log test-06.win32.new.log test-07.win32.new.log clean: clean-01 clean-03 clean-04 clean-05 clean-06 clean-07 # # Helpers while developing and verifying tests # WB_DIFF=wb-diff.cmd test-01.win32.new.log: test-01.cmd test-01.win32.known_good-$(KNOWN_GOOD_VERSION).log -subst b: /d >nul 2>&1 if exist testroot-01 rmdir /s /q testroot-01 test-01.cmd >test-01.win32.new.log 2>&1 python benchmark_diff.py test-01.win32.known_good-$(KNOWN_GOOD_VERSION).log test-01.win32.new.log clean-01: -subst b: /d >nul 2>&1 if exist test-01.win32.new.log del test-01.win32.new.log if exist testroot-01 rmdir /s /q testroot-01 diff-01: test-01.win32.new.log $(WB_DIFF) test-01.win32.known_good-$(KNOWN_GOOD_VERSION).log.clean test-01.win32.new.log.clean new-01: test-01.win32.new.log copy test-01.win32.new.log test-01.win32.known_good-$(KNOWN_GOOD_VERSION).log test-03.win32.new.log: test-03.cmd test-03.win32.known_good-$(KNOWN_GOOD_VERSION).log -subst b: /d >nul 2>&1 if exist testroot-03 rmdir /s /q testroot-03 if "%USERNAME%" == "barry" test-03.cmd >test-03.win32.new.log 2>&1 if "%USERNAME%" == "barry" python benchmark_diff.py test-03.win32.known_good-$(KNOWN_GOOD_VERSION).log test-03.win32.new.log clean-03: -subst b: /d >nul 2>&1 if exist test-03.win32.new.log del test-03.win32.new.log if exist testroot-03 rmdir /s /q testroot-03 diff-03: test-03.win32.new.log $(WB_DIFF) test-03.win32.known_good-$(KNOWN_GOOD_VERSION).log.clean test-03.win32.new.log.clean new-03: test-03.win32.new.log copy test-03.win32.new.log test-03.win32.known_good-$(KNOWN_GOOD_VERSION).log test-04.win32.new.log: test-04.cmd test-04.win32.known_good-$(KNOWN_GOOD_VERSION).log -subst b: /d >nul 2>&1 if exist testroot-04 rmdir /s /q testroot-04 test-04.cmd >test-04.win32.new.log 2>&1 python benchmark_diff.py test-04.win32.known_good-$(KNOWN_GOOD_VERSION).log test-04.win32.new.log clean-04: -subst b: /d >nul 2>&1 if exist test-04.win32.new.log del test-04.win32.new.log if exist testroot-04 rmdir /s /q testroot-04 diff-04: test-04.win32.new.log $(WB_DIFF) test-04.win32.known_good-$(KNOWN_GOOD_VERSION).log.clean test-04.win32.new.log.clean new-04: test-04.win32.new.log copy test-04.win32.new.log test-04.win32.known_good-$(KNOWN_GOOD_VERSION).log test-05.win32.new.log: test-05.cmd test-05.win32.known_good-$(KNOWN_GOOD_VERSION).log -subst b: /d >nul 2>&1 if exist testroot-05 rmdir /s /q testroot-05 test-05.cmd >test-05.win32.new.log 2>&1 python benchmark_diff.py test-05.win32.known_good-$(KNOWN_GOOD_VERSION).log test-05.win32.new.log clean-05: -subst b: /d >nul 2>&1 if exist test-05.win32.new.log del test-05.win32.new.log if exist testroot-05 rmdir /s /q testroot-05 diff-05: test-05.win32.new.log $(WB_DIFF) test-05.win32.known_good-$(KNOWN_GOOD_VERSION).log.clean test-05.win32.new.log.clean new-05: test-05.win32.new.log copy test-05.win32.new.log test-05.win32.known_good-$(KNOWN_GOOD_VERSION).log test-06.win32.new.log: test-06.cmd test-06.win32.known_good-$(KNOWN_GOOD_VERSION).log -subst b: /d >nul 2>&1 if exist testroot-06 rmdir /s /q testroot-06 test-06.cmd >test-06.win32.new.log 2>&1 python benchmark_diff.py test-06.win32.known_good-$(KNOWN_GOOD_VERSION).log test-06.win32.new.log clean-06: -subst b: /d >nul 2>&1 if exist test-06.win32.new.log del test-06.win32.new.log if exist testroot-06 rmdir /s /q testroot-06 diff-06: test-06.win32.new.log $(WB_DIFF) test-06.win32.known_good-$(KNOWN_GOOD_VERSION).log.clean test-06.win32.new.log.clean new-06: test-06.win32.new.log copy test-06.win32.new.log test-06.win32.known_good-$(KNOWN_GOOD_VERSION).log test-07.win32.new.log: test-07.cmd test-07.win32.known_good-$(KNOWN_GOOD_VERSION).log -subst b: /d >nul 2>&1 if exist testroot-07 rmdir /s /q testroot-07 test-07.cmd >test-07.win32.new.log 2>&1 python benchmark_diff.py test-07.win32.known_good-$(KNOWN_GOOD_VERSION).log test-07.win32.new.log clean-07: -subst b: /d >nul 2>&1 if exist test-07.win32.new.log del test-07.win32.new.log if exist testroot-07 rmdir /s /q testroot-07 diff-07: test-07.win32.new.log $(WB_DIFF) test-07.win32.known_good-$(KNOWN_GOOD_VERSION).log.clean test-07.win32.new.log.clean new-07: test-07.win32.new.log copy test-07.win32.new.log test-07.win32.known_good-$(KNOWN_GOOD_VERSION).log pysvn-1.7.8/Source/create__init__.py000644 000771 000771 00000001672 11076210000 017740 0ustar00barrybarry000000 000000 # # create__init__.py # import sys import os init_template = sys.argv[1] init_output = sys.argv[2] gen_tool = sys.argv[3] module_name = sys.argv[4].split('.')[0] print( 'Info: Creating __init__.py for module %s' % module_name ) pysvn__init__file_contents = open( init_template ).readlines() block_begin_index = pysvn__init__file_contents.index( '### IMPORT BLOCK BEGIN\n' ) block_end_index = pysvn__init__file_contents.index( '### IMPORT BLOCK END\n' ) + 1 if sys.version_info[0] >= 3: module_name = 'pysvn.%s' % module_name replacement = [ ' import %s\n' % (module_name,) ] if module_name != '_pysvn': replacement.append( ' _pysvn = %s\n' % (module_name,) ) pysvn__init__file_contents[ block_begin_index:block_end_index ] = replacement f = open( init_output, 'w' ) f.write( ''.join( pysvn__init__file_contents ) ) f.close() cmd_gen = '%s >>%s' % (gen_tool, init_output) print( 'Info: Running %r' % cmd_gen ) os.system( cmd_gen ) pysvn-1.7.8/Source/generate_svn_error_codes/000755 000771 000771 00000000000 12204167352 021522 5ustar00barrybarry000000 000000 pysvn-1.7.8/Source/pysvn/000755 000771 000771 00000000000 12204167352 015633 5ustar00barrybarry000000 000000 pysvn-1.7.8/Source/pysvn.cpp000644 000771 000771 00000030004 12027656670 016345 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2011 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_docs.hpp" #include "pysvn_version.hpp" #include "svn_version.h" #include "pysvn_static_strings.hpp" pysvn_module::pysvn_module() : Py::ExtensionModule( "pysvn" ) , client_error() { // init APR once globally - rather then on demand // to avoid life time issues with pools apr_initialize(); apr_pool_initialize(); client_error.init( *this, "ClientError" ); pysvn_client::init_type(); pysvn_transaction::init_type(); pysvn_revision::init_type(); pysvn_enum< svn_opt_revision_kind >::init_type(); pysvn_enum_value< svn_opt_revision_kind >::init_type(); pysvn_enum< svn_wc_notify_action_t >::init_type(); pysvn_enum_value< svn_wc_notify_action_t >::init_type(); pysvn_enum< svn_wc_status_kind >::init_type(); pysvn_enum_value< svn_wc_status_kind >::init_type(); pysvn_enum< svn_wc_schedule_t >::init_type(); pysvn_enum_value< svn_wc_schedule_t >::init_type(); pysvn_enum< svn_wc_merge_outcome_t >::init_type(); pysvn_enum_value< svn_wc_merge_outcome_t >::init_type(); pysvn_enum< svn_wc_notify_state_t >::init_type(); pysvn_enum_value< svn_wc_notify_state_t >::init_type(); pysvn_enum< svn_node_kind_t >::init_type(); pysvn_enum_value< svn_node_kind_t >::init_type(); #if defined( PYSVN_HAS_DIFF_FILE_IGNORE_SPACE ) pysvn_enum< svn_diff_file_ignore_space_t >::init_type(); pysvn_enum_value< svn_diff_file_ignore_space_t >::init_type(); #endif #if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE ) pysvn_enum< svn_client_diff_summarize_kind_t >::init_type(); pysvn_enum_value< svn_client_diff_summarize_kind_t >::init_type(); #endif #ifdef QQQ pysvn_enum< svn_wc_conflict_action_t >::init_type(); pysvn_enum_value< svn_wc_conflict_action_t >::init_type(); #endif #if defined( PYSVN_HAS_SVN__DEPTH_PARAMETER ) pysvn_enum< svn_depth_t >::init_type(); pysvn_enum_value< svn_depth_t >::init_type(); #endif #if defined( PYSVN_HAS_SVN_WC_CONFLICT_CHOICE_T ) pysvn_enum< svn_wc_conflict_choice_t >::init_type(); pysvn_enum_value< svn_wc_conflict_choice_t >::init_type(); pysvn_enum< svn_wc_conflict_action_t >::init_type(); pysvn_enum_value< svn_wc_conflict_action_t >::init_type(); pysvn_enum< svn_wc_conflict_kind_t >::init_type(); pysvn_enum_value< svn_wc_conflict_kind_t >::init_type(); pysvn_enum< svn_wc_conflict_reason_t >::init_type(); pysvn_enum_value< svn_wc_conflict_reason_t >::init_type(); #endif #if defined( PYSVN_HAS_SVN_WC_OPERATION_T ) pysvn_enum< svn_wc_operation_t >::init_type(); pysvn_enum_value< svn_wc_operation_t >::init_type(); #endif add_keyword_method( "_Client", &pysvn_module::new_client, pysvn_client_doc ); add_keyword_method( "Revision", &pysvn_module::new_revision, pysvn_revision_doc ); add_keyword_method( "_Transaction", &pysvn_module::new_transaction, pysvn_transaction_doc ); initialize( pysvn_module_doc ); Py::Dict d( moduleDictionary() ); d["ClientError"] = client_error; d["copyright"] = Py::String( copyright_doc ); Py::Tuple version(4); version[0] = Py::Int( version_major ); version[1] = Py::Int( version_minor ); version[2] = Py::Int( version_patch ); version[3] = Py::Int( version_build ); d["version"] = version; Py::Tuple svn_api_version(4); svn_api_version[0] = Py::Int( SVN_VER_MAJOR ); svn_api_version[1] = Py::Int( SVN_VER_MINOR ); svn_api_version[2] = Py::Int( SVN_VER_MICRO ); svn_api_version[3] = Py::String( SVN_VER_TAG ); #if defined( PYSVN_HAS_CLIENT_VERSION ) const svn_version_t *client_version = svn_client_version(); Py::Tuple svn_version(4); svn_version[0] = Py::Int( client_version->major ); svn_version[1] = Py::Int( client_version->minor ); svn_version[2] = Py::Int( client_version->patch ); svn_version[3] = Py::String( client_version->tag ); d["svn_version"] = svn_version; d["svn_api_version"] = svn_api_version; #else d["svn_version"] = svn_api_version; d["svn_api_version"] = svn_api_version; #endif d["opt_revision_kind"] = Py::asObject( new pysvn_enum< svn_opt_revision_kind >() ); d["wc_notify_action"] = Py::asObject( new pysvn_enum< svn_wc_notify_action_t >() ); d["wc_status_kind"] = Py::asObject( new pysvn_enum< svn_wc_status_kind >() ); d["wc_schedule"] = Py::asObject( new pysvn_enum< svn_wc_schedule_t >() ); d["wc_merge_outcome"] = Py::asObject( new pysvn_enum< svn_wc_merge_outcome_t >() ); d["wc_notify_state"] = Py::asObject( new pysvn_enum< svn_wc_notify_state_t >() ); d["node_kind"] = Py::asObject( new pysvn_enum< svn_node_kind_t >() ); #if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE ) d["diff_summarize_kind"] = Py::asObject( new pysvn_enum< svn_client_diff_summarize_kind_t >() ); #endif #if defined( PYSVN_HAS_SVN__DEPTH_PARAMETER ) d["depth"] = Py::asObject( new pysvn_enum< svn_depth_t >() ); #endif #if defined( PYSVN_HAS_SVN_WC_CONFLICT_CHOICE_T ) d["wc_conflict_choice"] = Py::asObject( new pysvn_enum< svn_wc_conflict_choice_t >() ); d["wc_conflict_action"] = Py::asObject( new pysvn_enum< svn_wc_conflict_action_t >() ); d["wc_conflict_kind"] = Py::asObject( new pysvn_enum< svn_wc_conflict_kind_t >() ); d["wc_conflict_reason"] = Py::asObject( new pysvn_enum< svn_wc_conflict_reason_t >() ); #endif #if defined( PYSVN_HAS_SVN_WC_OPERATION_T ) d["wc_operation"] = Py::asObject( new pysvn_enum< svn_wc_operation_t >() ); #endif } pysvn_module::~pysvn_module() { } Py::Object pysvn_module::new_client( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { false, name_config_dir }, { false, name_result_wrappers }, { false, NULL } }; FunctionArguments args( "Client", args_desc, a_args, a_kws ); args.check(); std::string config_dir = args.getUtf8String( name_config_dir, "" ); Py::Dict result_wrappers_dict; if( args.hasArg( name_result_wrappers ) ) result_wrappers_dict = args.getArg( name_result_wrappers ); return Py::asObject( new pysvn_client( *this, config_dir, result_wrappers_dict ) ); } Py::Object pysvn_module::new_transaction( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_repos_path }, { true, name_transaction_name }, { false, name_is_revision }, { false, name_result_wrappers }, { false, NULL } }; FunctionArguments args( "Transaction", args_desc, a_args, a_kws ); args.check(); std::string repos_path = args.getUtf8String( name_repos_path ); std::string transaction_name = args.getUtf8String( name_transaction_name ); bool is_revision = args.getBoolean( name_is_revision, false ); Py::Dict result_wrappers_dict; if( args.hasArg( name_result_wrappers ) ) result_wrappers_dict = args.getArg( name_result_wrappers ); pysvn_transaction *t = new pysvn_transaction( *this, result_wrappers_dict ); Py::Object result( Py::asObject( t ) ); t->init( repos_path, transaction_name, is_revision ); return result; } Py::Object pysvn_module::new_revision( const Py::Tuple &a_args, const Py::Dict &a_kws ) { // // support only one of the following: // revision( kind ) // revision( kind, number ) // revision( kind, date ) // static argument_description args_desc_generic[] = { { true, name_kind }, { false, name_date }, { false, name_number }, { false, NULL } }; FunctionArguments args_generic( "Revision", args_desc_generic, a_args, a_kws ); args_generic.check(); Py::ExtensionObject< pysvn_enum_value > py_kind( args_generic.getArg( name_kind ) ); svn_opt_revision_kind kind = svn_opt_revision_kind( py_kind.extensionObject()->m_value ); pysvn_revision *rev = NULL; switch( kind ) { case svn_opt_revision_date: { static argument_description args_desc_date[] = { { true, name_kind }, { true, name_date }, { false, NULL } }; FunctionArguments args_date( "Revision", args_desc_date, a_args, a_kws ); args_date.check(); Py::Float date( args_date.getArg( name_date ) ); rev = new pysvn_revision( kind, double(date) ); break; } case svn_opt_revision_number: { static argument_description args_desc_number[] = { { true, name_kind }, { true, name_number }, { false, NULL } }; FunctionArguments args_number( "Revision", args_desc_number, a_args, a_kws ); args_number.check(); Py::Int revnum( args_number.getArg( name_number ) ); rev = new pysvn_revision( kind, 0, long( revnum ) ); break; } default: { static argument_description args_desc_other[] = { { true, name_kind }, { false, NULL } }; FunctionArguments args_other( "Revision", args_desc_other, a_args, a_kws ); args_other.check(); rev = new pysvn_revision( kind ); } } return Py::asObject( rev ); } //-------------------------------------------------------------------------------- // // PythonAllowThreads provides a exception safe // wrapper for the C idiom: // // Py_BEGIN_ALLOW_THREADS // ...Do some blocking I/O operation... // Py_END_ALLOW_THREADS // // IN C++ use PythonAllowThreads in main code: //{ // PythonAllowThreads main_permission; // ...Do some blocking I/O operation that may throw //} // allow d'tor grabs the lock // // In C++ use PythonDisallowTheads in callback code: //{ // PythonDisallowTheads permission( main_permission ); // ... Python operations that may throw //} // allow d'tor to release the lock // //-------------------------------------------------------------------------------- PythonAllowThreads::PythonAllowThreads( pysvn_context &_callbacks ) : m_callbacks( _callbacks ) , m_save( NULL ) { m_callbacks.setPermission( *this ); allowOtherThreads(); } PythonAllowThreads::~PythonAllowThreads() { if( m_save != NULL ) allowThisThread(); m_callbacks.clearPermission(); } void PythonAllowThreads::allowOtherThreads() { #if defined( WITH_THREAD ) assert( m_save == NULL ); m_save = PyEval_SaveThread(); assert( m_save != NULL ); #endif } void PythonAllowThreads::allowThisThread() { #if defined( WITH_THREAD ) assert( m_save != NULL ); PyEval_RestoreThread( m_save ); m_save = NULL; #endif } PythonDisallowThreads::PythonDisallowThreads( PythonAllowThreads *_permission ) : m_permission( _permission ) { m_permission->allowThisThread(); } PythonDisallowThreads::~PythonDisallowThreads() { m_permission->allowOtherThreads(); } //-------------------------------------------------------------------------------- #if defined(WIN32) #define EXPORT_SYMBOL __declspec( dllexport ) #else #define EXPORT_SYMBOL #endif static pysvn_module* the_pysvn_module = NULL; #if PY_MAJOR_VERSION >= 3 extern "C" EXPORT_SYMBOL PyObject *PyInit__pysvn() { the_pysvn_module = new pysvn_module; return the_pysvn_module->module().ptr(); } // symbol required for the debug version extern "C" EXPORT_SYMBOL PyObject *PyInit__pysvn_d() { return PyInit__pysvn(); } #else extern "C" EXPORT_SYMBOL void init_pysvn() { the_pysvn_module = new pysvn_module; } // symbol required for the debug version extern "C" EXPORT_SYMBOL void init_pysvn_d() { init_pysvn(); } #endif pysvn-1.7.8/Source/pysvn.hpp000644 000771 000771 00000066605 11655030403 016354 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // #include "Python.h" #include "CXX/Objects.hxx" #include "CXX/Extensions.hxx" #include #include "pysvn_svnenv.hpp" #include #include #include //-------------------------------------------------------------------------------- class pysvn_module : public Py::ExtensionModule { public: pysvn_module(); virtual ~pysvn_module(); private:// functions Py::Object new_client( const Py::Tuple &a_args, const Py::Dict &a_kws ); Py::Object new_transaction( const Py::Tuple &a_args, const Py::Dict &a_kws ); Py::Object new_revision( const Py::Tuple &a_args, const Py::Dict &a_kws ); public:// variables Py::ExtensionExceptionType client_error; }; //-------------------------------------------------------------------------------- class PythonAllowThreads; class pysvn_context : public SvnContext { public: pysvn_context( const std::string &config_dir ); virtual ~pysvn_context(); // return true if the callbacks are being used on some thread bool hasPermission(); // give the callbacks permission to run void setPermission( PythonAllowThreads &_permission ); // revoke permission void clearPermission(); void checkForError( Py::ExtensionExceptionType &exception_for_error ); public: // data // // Python class that has implements the callback methods // Py::Object m_pyfn_GetLogin; Py::Object m_pyfn_Notify; #if defined( PYSVN_HAS_CONTEXT_PROGRESS ) Py::Object m_pyfn_Progress; #endif #if defined( PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC ) Py::Object m_pyfn_ConflictResolver; #endif Py::Object m_pyfn_Cancel; Py::Object m_pyfn_GetLogMessage; Py::Object m_pyfn_SslServerPrompt; Py::Object m_pyfn_SslServerTrustPrompt; Py::Object m_pyfn_SslClientCertPrompt; Py::Object m_pyfn_SslClientCertPwPrompt; std::string m_default_username; std::string m_default_password; void setLogMessage( const std::string &message ); private: // methods // // this method will be called to retrieve // authentication information // bool contextGetLogin ( const std::string & realm, std::string & username, std::string & password, bool &may_save ); // // this method will be called to notify about // the progress of an ongoing action // #if defined( PYSVN_HAS_CONTEXT_NOTIFY2 ) void contextNotify2 ( const svn_wc_notify_t *notify, apr_pool_t *pool ); #else void contextNotify ( const char *path, svn_wc_notify_action_t action, svn_node_kind_t kind, const char *mime_type, svn_wc_notify_state_t content_state, svn_wc_notify_state_t prop_state, svn_revnum_t revision ); #endif #if defined( PYSVN_HAS_CONTEXT_PROGRESS ) void contextProgress ( apr_off_t progress, apr_off_t total ); #endif #if defined( PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC ) bool contextConflictResolver ( svn_wc_conflict_result_t **result, const svn_wc_conflict_description_t *description, apr_pool_t *pool ); #endif // // this method will be called periodically to allow // the app to cancel long running operations // // @return cancel action? // @retval true cancel // bool contextCancel(); // // this method will be called to retrieve // a log message // bool contextGetLogMessage( std::string & msg ); // // this method is called if there is ssl server // information, that has to be confirmed by the user // // @param data // @return @a SslServerTrustAnswer // bool contextSslServerTrustPrompt ( const svn_auth_ssl_server_cert_info_t &info, const std::string &realm, apr_uint32_t &a_accepted_failures, bool &accept_permanent ); // // this method is called to retrieve client side // information // bool contextSslClientCertPrompt( std::string &certFile, const std::string &realm, bool &may_save ); // // this method is called to retrieve the password // for the certificate // // @param password // bool contextSslClientCertPwPrompt ( std::string & password, const std::string &realm, bool &may_save ); private:// vaiables PythonAllowThreads *m_permission; std::string m_error_message; std::string m_log_message; }; class DictWrapper { public: DictWrapper( Py::Dict result_wrappers, const std::string &wrapper_name ); ~DictWrapper(); Py::Object wrapDict( Py::Dict result ) const; private: const std::string m_wrapper_name; bool m_have_wrapper; Py::Callable m_wrapper; }; class FunctionArguments; class pysvn_client : public Py::PythonExtension { public: pysvn_client( pysvn_module &module, const std::string &config_dir, Py::Dict result_wrappers ); virtual ~pysvn_client(); // override functions from PythonExtension virtual Py::Object getattr( const char *name ); virtual int setattr( const char *name, const Py::Object &value ); static void init_type( void ); // SVN commands Py::Object cmd_add( const Py::Tuple& args, const Py::Dict &kws ); #ifdef PYSVN_HAS_CLIENT_ADD_TO_CHANGELIST Py::Object cmd_add_to_changelist( const Py::Tuple& args, const Py::Dict &kws ); #endif Py::Object cmd_annotate( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_cat( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_checkout( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_cleanup( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_checkin( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_copy( const Py::Tuple& args, const Py::Dict &kws ); #if defined( PYSVN_HAS_CLIENT_COPY4 ) Py::Object cmd_copy2( const Py::Tuple& args, const Py::Dict &kws ); #endif Py::Object cmd_diff( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_diff_peg( const Py::Tuple& args, const Py::Dict &kws ); #if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE ) Py::Object cmd_diff_summarize( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_diff_summarize_peg( const Py::Tuple& args, const Py::Dict &kws ); #endif Py::Object cmd_export( const Py::Tuple& args, const Py::Dict &kws ); #ifdef PYSVN_HAS_CLIENT_GET_CHANGELIST Py::Object cmd_get_changelist( const Py::Tuple& args, const Py::Dict &kws ); #endif Py::Object cmd_info( const Py::Tuple& args, const Py::Dict &kws ); #if defined( PYSVN_HAS_CLIENT_INFO ) Py::Object cmd_info2( const Py::Tuple& args, const Py::Dict &kws ); #endif Py::Object cmd_import( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_log( const Py::Tuple& args, const Py::Dict &kws ); #if defined( PYSVN_HAS_CLIENT_LOCK ) Py::Object cmd_lock( const Py::Tuple& args, const Py::Dict &kws ); #endif #if defined( PYSVN_HAS_CLIENT_LIST ) Py::Object cmd_list( const Py::Tuple& args, const Py::Dict &kws ); #endif Py::Object cmd_ls( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_merge( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_merge_peg( const Py::Tuple& args, const Py::Dict &kws ); #if defined( PYSVN_HAS_CLIENT_MERGE_PEG3 ) Py::Object cmd_merge_peg2( const Py::Tuple& args, const Py::Dict &kws ); #endif #if defined( PYSVN_HAS_CLIENT_MERGE_REINTEGRATE ) Py::Object cmd_merge_reintegrate( const Py::Tuple& args, const Py::Dict &kws ); #endif Py::Object cmd_mkdir( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_move( const Py::Tuple& args, const Py::Dict &kws ); #if defined( PYSVN_HAS_CLIENT_MOVE4 ) Py::Object cmd_move2( const Py::Tuple& args, const Py::Dict &kws ); #endif Py::Object cmd_propdel( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_propget( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_proplist( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_propset( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_relocate( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_remove( const Py::Tuple& args, const Py::Dict &kws ); #ifdef PYSVN_HAS_CLIENT_REMOVE_FROM_CHANGELISTS Py::Object cmd_remove_from_changelists( const Py::Tuple& args, const Py::Dict &kws ); #endif Py::Object cmd_resolved( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_revert( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_revpropdel( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_revpropget( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_revproplist( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_revpropset( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_status( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_switch( const Py::Tuple& args, const Py::Dict &kws ); #if defined( PYSVN_HAS_CLIENT_LOCK ) Py::Object cmd_unlock( const Py::Tuple& args, const Py::Dict &kws ); #endif #if defined( PYSVN_HAS_CLIENT_UPGRADE ) Py::Object cmd_upgrade( const Py::Tuple& args, const Py::Dict &kws ); #endif Py::Object cmd_update( const Py::Tuple& args, const Py::Dict &kws ); // SVN commands Py::Object is_url( const Py::Tuple& args, const Py::Dict &kws ); Py::Object get_auth_cache( const Py::Tuple& args, const Py::Dict &kws ); Py::Object set_auth_cache( const Py::Tuple& args, const Py::Dict &kws ); Py::Object get_auto_props( const Py::Tuple& args, const Py::Dict &kws ); Py::Object set_auto_props( const Py::Tuple& args, const Py::Dict &kws ); Py::Object get_interactive( const Py::Tuple &a_args, const Py::Dict &a_kws ); Py::Object set_interactive( const Py::Tuple &a_args, const Py::Dict &a_kws ); Py::Object get_default_username( const Py::Tuple &a_args, const Py::Dict &a_kws ); Py::Object set_default_username( const Py::Tuple &a_args, const Py::Dict &a_kws ); Py::Object get_default_password( const Py::Tuple &a_args, const Py::Dict &a_kws ); Py::Object set_default_password( const Py::Tuple &a_args, const Py::Dict &a_kws ); Py::Object get_store_passwords( const Py::Tuple &a_args, const Py::Dict &a_kws ); Py::Object set_store_passwords( const Py::Tuple &a_args, const Py::Dict &a_kws ); #if defined( PYSVN_HAS_WC_ADM_DIR ) Py::Object is_adm_dir( const Py::Tuple& args, const Py::Dict &kws ); Py::Object get_adm_dir( const Py::Tuple& args, const Py::Dict &kws ); Py::Object set_adm_dir( const Py::Tuple& args, const Py::Dict &kws ); #endif #if defined( PYSVN_HAS_CLIENT_ROOT_URL_FROM_PATH ) Py::Object cmd_root_url_from_path( const Py::Tuple& args, const Py::Dict &kws ); #endif // check that we are not in use on another thread void checkThreadPermission(); private: // helper function that wraps up the logic to throw a client error exception void throw_client_error( SvnException & ); private: Py::Object helper_boolean_auth_set( FunctionArguments &a_args, const char *a_arg_name, const char *a_param_name ); Py::Object helper_boolean_auth_get( FunctionArguments &a_args, const char *a_param_name ); Py::Object helper_string_auth_set( FunctionArguments &a_args, const char *a_arg_name, const char *a_param_name, std::string &ctx_str ); Py::Object helper_string_auth_get( FunctionArguments &a_args, const char *a_param_name ); pysvn_module &m_module; Py::Dict m_result_wrappers; pysvn_context m_context; int m_exception_style; int m_commit_info_style; DictWrapper m_wrapper_status; DictWrapper m_wrapper_entry; DictWrapper m_wrapper_info; DictWrapper m_wrapper_lock; DictWrapper m_wrapper_list; DictWrapper m_wrapper_log; DictWrapper m_wrapper_log_changed_path; DictWrapper m_wrapper_dirent; DictWrapper m_wrapper_wc_info; DictWrapper m_wrapper_diff_summary; }; class pysvn_transaction : public Py::PythonExtension { public: pysvn_transaction( pysvn_module &module, Py::Dict result_wrappers ); virtual ~pysvn_transaction(); void init( const std::string &repos_path, const std::string &transaction_name, bool is_revision ); // override functions from PythonExtension virtual Py::Object getattr( const char *name ); virtual int setattr( const char *name, const Py::Object &value ); static void init_type( void ); // SVN Transaction commands Py::Object cmd_cat( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_changed( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_list( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_propdel( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_propget( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_proplist( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_propset( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_revpropdel( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_revpropget( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_revproplist( const Py::Tuple& args, const Py::Dict &kws ); Py::Object cmd_revpropset( const Py::Tuple& args, const Py::Dict &kws ); // check that we are not in use on another thread void checkThreadPermission(); private: // helper function that wraps up the logic to throw a client error exception void throw_client_error( SvnException & ); private: pysvn_module &m_module; Py::Dict m_result_wrappers; SvnTransaction m_transaction; int m_exception_style; }; class pysvn_revision : public Py::PythonExtension { public: pysvn_revision( svn_opt_revision_kind kind, double date=0.0, int revnum=0 ); virtual ~pysvn_revision(); virtual Py::Object getattr( const char *name ); virtual int setattr( const char *name, const Py::Object &value ); virtual Py::Object repr(); const svn_opt_revision_t &getSvnRevision() const; static void init_type(void); private: pysvn_revision(); // not defined svn_opt_revision_t m_svn_revision; }; // help functions to check the arguments pass and throw AttributeError struct argument_description { bool m_required; // true if this argument must be present const char *m_arg_name; // the name of this arg to lookup in the keywords dictionary }; class FunctionArguments { public: FunctionArguments ( const char *function_name, const argument_description *arg_info, const Py::Tuple &args, const Py::Dict &kws ); ~FunctionArguments(); void check(); bool hasArg( const char *arg_name ); Py::Object getArg( const char *arg_name ); bool getBoolean( const char *name ); bool getBoolean( const char *name, bool default_value ); int getInteger( const char *name ); int getInteger( const char *name, int default_value ); long getLong( const char *name ); long getLong( const char *name, long default_value ); std::string getUtf8String( const char *name ); std::string getUtf8String( const char *name, const std::string &default_value ); std::string getBytes( const char *name, const std::string &default_value ); std::string getBytes( const char *name ); svn_opt_revision_t getRevision( const char *name ); svn_opt_revision_t getRevision( const char *name, svn_opt_revision_kind default_value ); svn_opt_revision_t getRevision( const char *name, svn_opt_revision_t default_value ); #if defined( PYSVN_HAS_SVN__DEPTH_PARAMETER ) svn_depth_t getDepth( const char *depth_name, const char *recursive_name, svn_depth_t default_value, svn_depth_t recursive_true_value, svn_depth_t recursive_false_value ); svn_depth_t getDepth( const char *depth_name, svn_depth_t default_value ); svn_depth_t getDepth( const char *depth_name ); #endif #if defined( PYSVN_HAS_SVN_WC_CONFLICT_CHOICE_T ) svn_wc_conflict_choice_t getWcConflictChoice( const char *choice_name, svn_wc_conflict_choice_t default_value ); svn_wc_conflict_choice_t getWcConflictChoice( const char *choice_name ); #endif private: const std::string m_function_name; const argument_description *m_arg_desc; const Py::Tuple &m_args; const Py::Dict &m_kws; Py::Dict m_checked_args; Py::Tuple::size_type m_min_args; Py::Tuple::size_type m_max_args; }; //------------------------------------------------------------ template class EnumString { public: EnumString(); ~EnumString() {} const std::string &toTypeName( T ) { return m_type_name; } const std::string &toString( T value ) { static std::string not_found( "-unknown-" ); EXPLICIT_TYPENAME std::map::iterator it = m_enum_to_string.find( value ); if( it != m_enum_to_string.end() ) return (*it).second; not_found = "-unknown ("; int u1000 = value/1000 % 10; int u100 = value/100 % 10; int u10 = value/10 % 10; int u1 = value % 10; not_found += char( '0' + u1000 ); not_found += char( '0' + u100 ); not_found += char( '0' + u10 ); not_found += char( '0' + u1 ); not_found += ")-"; return not_found; } bool toEnum( const std::string &string, T &value ) { EXPLICIT_TYPENAME std::map::iterator it = m_string_to_enum.find( string ); if( it != m_string_to_enum.end() ) { value = (*it).second; return true; } return false; } EXPLICIT_TYPENAME std::map::iterator begin() { return m_string_to_enum.begin(); } EXPLICIT_TYPENAME std::map::iterator end() { return m_string_to_enum.end(); } private: void add( T value, std::string string ) { m_string_to_enum[string] = value; m_enum_to_string[value] = string; } std::string m_type_name; std::map m_string_to_enum; std::map m_enum_to_string; }; template const std::string &toTypeName( T value ) { static EnumString< T > enum_map; return enum_map.toTypeName( value ); } template const std::string &toString( T value ) { static EnumString< T > enum_map; return enum_map.toString( value ); } template bool toEnum( const std::string &string, T &value ) { static EnumString< T > enum_map; return enum_map.toEnum( string, value ); } template Py::List memberList( T value ) { static EnumString< T > enum_map; Py::List members; EXPLICIT_TYPENAME std::map::iterator it = enum_map.begin(); while( it != enum_map.end() ) { members.append( Py::String( (*it).first ) ); ++it; } return members; } //------------------------------------------------------------ template class pysvn_enum_value : public Py::PythonExtension< EXPLICIT_CLASS pysvn_enum_value > { public: pysvn_enum_value( T _value) : Py::PythonExtension() , m_value( _value ) { } virtual ~pysvn_enum_value() { } virtual int compare( const Py::Object &other ) { if( pysvn_enum_value::check( other ) ) { pysvn_enum_value *other_value = static_cast( other.ptr() ); if( m_value == other_value->m_value ) return 0; if( m_value > other_value->m_value ) return 1; else return -1; } else { std::string msg( "expecting " ); msg += toTypeName( m_value ); msg += " object for compare "; throw Py::AttributeError( msg ); } } virtual Py::Object rich_compare( const Py::Object &other, int op ) { if( pysvn_enum_value::check( other ) ) { pysvn_enum_value *other_value = static_cast( other.ptr() ); switch( op ) { case Py_EQ: return Py::Boolean( m_value == other_value->m_value ); case Py_NE: return Py::Boolean( m_value != other_value->m_value ); case Py_LT: return Py::Boolean( m_value < other_value->m_value ); case Py_LE: return Py::Boolean( m_value <= other_value->m_value ); case Py_GT: return Py::Boolean( m_value > other_value->m_value ); case Py_GE: return Py::Boolean( m_value >= other_value->m_value ); default: throw Py::RuntimeError( "rich_compare bad op" ); } } else { std::string msg( "expecting " ); msg += toTypeName( m_value ); msg += " object for rich compare "; throw Py::NotImplementedError( msg ); } } virtual Py::Object repr() { std::string s("<"); s += toTypeName( m_value ); s += "."; s += toString( m_value ); s += ">"; return Py::String( s ); } virtual Py::Object str() { return Py::String( toString( m_value ) ); } // need a hash so that the enums can go into a map virtual long hash() { static Py::String type_name( toTypeName( m_value ) ); // use the m_value plus the hash of the type name return long( m_value ) + type_name.hashValue(); } static void init_type(void); public: T m_value; }; //------------------------------------------------------------ template class pysvn_enum : public Py::PythonExtension< EXPLICIT_CLASS pysvn_enum > { public: pysvn_enum() : Py::PythonExtension() { } virtual ~pysvn_enum() { } virtual Py::Object getattr( const char *_name ) { std::string name( _name ); T value; if( name == "__methods__" ) { return Py::List(); } if( name == "__members__" ) { return memberList( static_cast( 0 ) ); } if( toEnum( name, value ) ) { return Py::asObject( new pysvn_enum_value( value ) ); } return this->getattr_methods( _name ); } static void init_type(void); }; template Py::Object toEnumValue( const T &value ) { return Py::asObject( new pysvn_enum_value( value ) ); } // true if path exists and is a directory extern bool is_path_dir( const std::string &path ); // true if the path_or_url is a svn url extern bool is_svn_url( const std::string &path_or_url ); // convert a path to what SVN likes only if its not a URL extern std::string svnNormalisedIfPath( const std::string &unnormalised, SvnPool &pool ); // convert a URL to what SVN likes extern std::string svnNormalisedUrl( const std::string &unnormalised, SvnPool &pool ); // convert a path to what SVN likes extern std::string svnNormalisedPath( const std::string &unnormalised, SvnPool &pool ); // convert a path to what the native OS likes extern std::string osNormalisedPath( const std::string &unnormalised, SvnPool &pool ); // need a type to convert from apr_time_t to signed_int64 to double #if defined(_MSC_VER) typedef signed __int64 signed_int64; #else typedef signed long long signed_int64; #endif //-------------------------------------------------------------------------------- // // PythonAllowThreads provides a exception safe // wrapper for the C idiom: // // Py_BEGIN_ALLOW_THREADS // ...Do some blocking I/O operation... // Py_END_ALLOW_THREADS // // IN C++ use PythonAllowThreads in main code: //{ // PythonAllowThreads main_permission; // ...Do some blocking I/O operation that may throw //} // allow d'tor grabs the lock // // In C++ use PythonDisallowThreads in callback code: //{ // PythonDisallowThreads permission( main_permission ); // ... Python operations that may throw //} // allow d'tor to release the lock // //-------------------------------------------------------------------------------- class PythonAllowThreads { public: // calls allowOtherThreads() PythonAllowThreads( pysvn_context &_context ); // calls allowThisThread() if necessary ~PythonAllowThreads(); void allowOtherThreads(); void allowThisThread(); private: pysvn_context &m_callbacks; PyThreadState *m_save; }; class PythonDisallowThreads { public: // calls allowThisThread() PythonDisallowThreads( PythonAllowThreads *_permission ); // calls allowOtherThreads() if necessary ~PythonDisallowThreads(); private: PythonAllowThreads *m_permission; }; //-------------------------------------------------------------------------------- extern Py::Object utf8_string_or_none( const char *str ); extern Py::Object path_string_or_none( const char *str, SvnPool &pool ); extern Py::Object utf8_string_or_none( const std::string &str ); extern apr_time_t convertStringToTime( const std::string &text, apr_time_t now, SvnPool &pool ); extern Py::Object propsToObject( apr_hash_t *props, SvnPool &pool ); extern Py::Object revnumListToObject( apr_array_header_t *revs, SvnPool &pool ); extern void proplistToObject( Py::List &py_path_propmap_list, apr_array_header_t *props, SvnPool &pool ); extern Py::Bytes asUtf8Bytes( Py::Object obj ); extern apr_array_header_t *targetsFromStringOrList( Py::Object arg, SvnPool &pool ); extern Py::List toListOfStrings( Py::Object obj ); extern apr_array_header_t *arrayOfStringsFromListOfStrings( Py::Object arg, SvnPool &pool ); extern apr_hash_t *hashOfStringsFromDistOfStrings( Py::Object arg, SvnPool &pool ); extern Py::Object direntsToObject( apr_hash_t *props, SvnPool &pool ); Py::Object toObject( apr_time_t t ); Py::Object toObject( pysvn_commit_info_t *commit_info, int commit_style ); extern Py::Object toObject ( Py::String path, pysvn_wc_status_t &svn_status, SvnPool &pool, const DictWrapper &wrapper_status, const DictWrapper &wrapper_entry, const DictWrapper &wrapper_lock ); extern Py::Object toObject ( const svn_wc_entry_t &svn_entry, SvnPool &pool, const DictWrapper &wrapper_entry ); #if defined( PYSVN_HAS_CLIENT_INFO ) extern Py::Object toObject ( const svn_info_t &info, const DictWrapper &wrapper_info, const DictWrapper &wrapper_lock, const DictWrapper &wrapper_wc_info ); #endif #if defined( PYSVN_HAS_CLIENT_LOCK ) extern Py::Object toObject ( const svn_lock_t &lock, const DictWrapper &wrapper_lock ); #endif extern void revisionKindCompatibleCheck ( bool is_url, const svn_opt_revision_t &revision, const char *revision_name, const char *url_or_path_name ); //-------------------------------------------------------------------------------- pysvn-1.7.8/Source/pysvn.rc.template000644 000771 000771 00000003076 10557152702 020003 0ustar00barrybarry000000 000000 //Microsoft Developer Studio generated resource script. // #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #include "winres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION %(MAJOR)s,%(MINOR)s,%(PATCH)s,%(BUILD)s PRODUCTVERSION %(MAJOR)s,%(MINOR)s,%(PATCH)s,%(BUILD)s FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x9L #else FILEFLAGS 0x8L #endif FILEOS 0x4L FILETYPE 0x2L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904B0" BEGIN VALUE "CompanyName", "pysvn.tigris.org\0" VALUE "FileDescription", "pysvn extension\0" VALUE "FileVersion", "%(MAJOR)s, %(MINOR)s, %(PATCH)s, %(BUILD)s\0" VALUE "InternalName", "_pysvn.pyd\0" VALUE "LegalCopyright", "Copyright Barry Scott 2003-2007\0" VALUE "OriginalFilename", "_pysvn.pyd\0" VALUE "ProductName", "pysvn extension\0" VALUE "ProductVersion", "%(MAJOR)s, %(MINOR)s, %(PATCH)s, %(BUILD)s\0" VALUE "OLESelfRegister", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END pysvn-1.7.8/Source/pysvn_arg_processing.cpp000644 000771 000771 00000024020 11165626331 021424 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" static const char g_utf_8[] = "utf-8"; FunctionArguments::FunctionArguments ( const char *function_name, const argument_description *arg_desc, const Py::Tuple &args, const Py::Dict &kws ) : m_function_name( function_name ) , m_arg_desc( arg_desc ) , m_args( args ) , m_kws( kws ) , m_checked_args() , m_min_args( 0 ) , m_max_args( 0 ) { // find out the min and max number of args for( const argument_description *p=arg_desc; p->m_arg_name; ++p ) { m_max_args++; if( p->m_required ) { m_min_args++; } } } FunctionArguments::~FunctionArguments() { // would like to check for all args processed here // but if an expection was raise because of an early // problem with the args we would assert on a false // positive } static char *int_to_string_inner( int n, char *buffer ) { char digit = (n%10) + '0'; int remainder = n/10; if( remainder > 0 ) buffer = int_to_string_inner( remainder, buffer ); *buffer++ = digit; return buffer; } static const char *int_to_string( int n ) { static char number_string[20]; int_to_string_inner( n, &number_string[0] ); return number_string; } void FunctionArguments::check() { if( m_args.size() > m_max_args ) { std::string msg = m_function_name; msg += "() takes exactly "; msg += int_to_string( m_max_args ); msg += " arguments ("; msg += int_to_string( m_args.size() ); msg += " given)"; throw Py::TypeError( msg ); } Py::Tuple::size_type t_i; // place all the positional args in the checked args dict for( t_i=0; t_i( obj.ptr() ); // copy out to caller return rev->getSvnRevision(); } else { std::string msg = m_function_name; msg += "() expecting revision object for keyword "; msg += name; throw Py::AttributeError( msg ); } } svn_opt_revision_t FunctionArguments::getRevision ( const char *name, svn_opt_revision_kind default_value ) { if( hasArg( name ) ) { return getRevision( name ); } else { svn_opt_revision_t revision; revision.kind = default_value; if( revision.kind == svn_opt_revision_number ) revision.value.number = 1; return revision; } } svn_opt_revision_t FunctionArguments::getRevision ( const char *name, svn_opt_revision_t default_value ) { if( hasArg( name ) ) { return getRevision( name ); } else { return default_value; } } #if defined( PYSVN_HAS_SVN__DEPTH_PARAMETER ) svn_depth_t FunctionArguments::getDepth ( const char *depth_name, const char *recursive_name, svn_depth_t default_value, svn_depth_t recursive_true_value, svn_depth_t recursive_false_value ) { if( hasArg( recursive_name ) && hasArg( depth_name ) ) { std::string msg = m_function_name; msg += "() cannot mix "; msg += depth_name; msg += " and "; msg += recursive_name; throw Py::TypeError( msg ); } if( hasArg( recursive_name ) ) { if( getBoolean( recursive_name ) ) { return recursive_true_value; } else { return recursive_false_value; } } if( hasArg( depth_name ) ) { return getDepth( depth_name ); } return default_value; } svn_depth_t FunctionArguments::getDepth ( const char *depth_name, svn_depth_t default_value ) { if( hasArg( depth_name ) ) { return getDepth( depth_name ); } return default_value; } svn_depth_t FunctionArguments::getDepth ( const char *depth_name ) { Py::ExtensionObject< pysvn_enum_value > py_kind( getArg( depth_name ) ); return svn_depth_t( py_kind.extensionObject()->m_value ); } #endif // PYSVN_HAS_SVN__DEPTH_PARAMETER #if defined( PYSVN_HAS_SVN_WC_CONFLICT_CHOICE_T ) svn_wc_conflict_choice_t FunctionArguments::getWcConflictChoice ( const char *choice_name, svn_wc_conflict_choice_t default_value ) { if( hasArg( choice_name ) ) { return getWcConflictChoice( choice_name ); } return default_value; } svn_wc_conflict_choice_t FunctionArguments::getWcConflictChoice ( const char *choice_name ) { Py::ExtensionObject< pysvn_enum_value > py_kind( getArg( choice_name ) ); return svn_wc_conflict_choice_t( py_kind.extensionObject()->m_value ); } #endif pysvn-1.7.8/Source/pysvn_callbacks.cpp000644 000771 000771 00000043364 12052502501 020336 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_callbacks.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_static_strings.hpp" #if defined( PYSVN_TRACE_CALLBACK ) #define TRACE_CALLBACK( name ) do { std::cerr << "Debug: Callback " << #name << std::endl; } while( false ) #else #define TRACE_CALLBACK( name ) do { } while( false ) #endif static const char *g_utf_8 = "utf-8"; static bool get_string( Py::Object &fn, Py::Tuple &args, std::string &_msg ); pysvn_context::pysvn_context( const std::string &config_dir ) : SvnContext( config_dir ) , m_pyfn_GetLogin() , m_pyfn_Notify() #if defined( PYSVN_HAS_CONTEXT_PROGRESS ) , m_pyfn_Progress() #endif #if defined( PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC ) , m_pyfn_ConflictResolver() #endif , m_pyfn_Cancel() , m_pyfn_GetLogMessage() , m_pyfn_SslServerPrompt() , m_pyfn_SslServerTrustPrompt() , m_pyfn_SslClientCertPrompt() , m_pyfn_SslClientCertPwPrompt() , m_permission( NULL ) , m_error_message() , m_log_message() { } pysvn_context::~pysvn_context() { } bool pysvn_context::hasPermission() { return m_permission != NULL; } void pysvn_context::setPermission( PythonAllowThreads &_permission ) { assert( m_permission == NULL ); m_permission = &_permission; m_error_message = ""; } void pysvn_context::clearPermission() { m_permission = NULL; } void pysvn_context::checkForError( Py::ExtensionExceptionType &exception_for_error ) { // see if any errors occurred in the callbacks if( !m_error_message.empty() ) { throw Py::Exception( exception_for_error, m_error_message ); } } // // this method will be called to retrieve // authentication information // // WORKAROUND FOR apr_xlate PROBLEM: // STRINGS ALREADY HAVE TO BE UTF8!!! // // @retval true continue // bool pysvn_context::contextGetLogin ( const std::string & _realm, std::string & _username, std::string & _password, bool &_may_save ) { TRACE_CALLBACK( contextGetLogin ); PythonDisallowThreads callback_permission( m_permission ); // make sure we can call the users object if( !m_pyfn_GetLogin.isCallable() ) { m_error_message = "callback_get_login required"; return false; } Py::Callable callback( m_pyfn_GetLogin ); Py::Tuple args( 3 ); args[0] = Py::String( _realm ); args[1] = Py::String( _username ); args[2] = Py::Int( (long)_may_save ); // bool, username, password Py::Tuple results; Py::Int retcode; Py::String username; Py::String password; Py::Int may_save_out; try { results = callback.apply( args ); retcode = results[0]; username = results[1]; password = results[2]; may_save_out = results[3]; // true returned if( long( retcode ) != 0 ) { // copy out the answers _username = username.as_std_string( g_utf_8 ); _password = password.as_std_string( g_utf_8 ); _may_save = long( may_save_out ) != 0; return true; } } catch( Py::Exception &e ) { PyErr_Print(); e.clear(); m_error_message = "unhandled exception in callback_get_login"; return false; } return false; } #if defined( PYSVN_HAS_CONTEXT_PROGRESS ) void pysvn_context::contextProgress ( apr_off_t progress, apr_off_t total ) { TRACE_CALLBACK( contextProgress ); PythonDisallowThreads callback_permission( m_permission ); // make sure we can call the users object if( !m_pyfn_Progress.isCallable() ) return; Py::Callable callback( m_pyfn_Progress ); Py::Tuple args( 2 ); // on some platforms apr_off_t is int64 args[0] = Py::Int( static_cast( progress ) ); args[1] = Py::Int( static_cast( total ) ); Py::Object results; try { results = callback.apply( args ); } catch( Py::Exception &e ) { PyErr_Print(); e.clear(); m_error_message = "unhandled exception in callback_progress"; } } #endif #if defined( PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC ) #if defined( PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC_1_6 ) Py::Object toConflictVersion( const svn_wc_conflict_version_t *version ) { if( version == NULL ) return Py::None(); Py::Dict ver; ver["repos_url"] = utf8_string_or_none( version->repos_url ); ver["peg_rev"] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, version->peg_rev ) ); ver["path_in_repos"] = utf8_string_or_none( version->path_in_repos ); ver["node_kind"] = toEnumValue( version->node_kind ); return ver; } #endif Py::Object toConflictDescription( const svn_wc_conflict_description_t *description, SvnPool &pool ) { if( description == NULL ) return Py::None(); Py::Dict desc; desc["path"] = Py::String( description->path ); desc["node_kind"] = toEnumValue( description->node_kind ); desc["kind"] = toEnumValue( description->kind ); desc["property_name"] = utf8_string_or_none( description->property_name ); desc["is_binary"] = Py::Boolean( description->is_binary != 0 ); desc["mime_type"] = utf8_string_or_none( description->mime_type ); desc["action"] = toEnumValue( description->action ); desc["reason"] = toEnumValue( description->reason ); desc["base_file"] = path_string_or_none( description->base_file, pool ); desc["their_file"] = path_string_or_none( description->their_file, pool ); desc["my_file"] = path_string_or_none( description->my_file, pool ); desc["merged_file"] = path_string_or_none( description->merged_file, pool ); #if defined( PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC_1_6 ) desc["operation"] = toEnumValue( description->operation ); desc["src_left_version"] = toConflictVersion( description->src_left_version ); desc["src_right_version"] = toConflictVersion( description->src_right_version ); #endif return desc; } bool pysvn_context::contextConflictResolver ( svn_wc_conflict_result_t **result, const svn_wc_conflict_description_t *description, apr_pool_t *conflict_resolver_pool ) { TRACE_CALLBACK( contextConflictResolver ); PythonDisallowThreads callback_permission( m_permission ); // make sure we can call the users object if( !m_pyfn_ConflictResolver.isCallable() ) return false; Py::Callable callback( m_pyfn_ConflictResolver ); SvnPool pool( *this ); Py::Tuple args( 1 ); args[0] = toConflictDescription( description, pool ); try { Py::Tuple py_result( callback.apply( args ) ); Py::ExtensionObject< pysvn_enum_value > py_kind( py_result[0] ); svn_wc_conflict_choice_t choice( py_kind.extensionObject()->m_value ); Py::Object py_merge_file( py_result[1] ); const char *merged_file = NULL; if( !py_merge_file.isNone() ) { Py::String pystr_merge_file( py_merge_file ); std::string std_merged_file( pystr_merge_file.as_std_string( name_utf8 ) ); merged_file = svn_string_ncreate( std_merged_file.data(), std_merged_file.length(), getContextPool() )->data; } #if defined( PYSVN_HAS_SVN_WC_CONFLICT_RESULT_T__SAVE_MERGED ) svn_boolean_t save_merged = py_result[2].isTrue() ? TRUE : FALSE; #endif *result = svn_wc_create_conflict_result( choice, merged_file, conflict_resolver_pool ); #if defined( PYSVN_HAS_SVN_WC_CONFLICT_RESULT_T__SAVE_MERGED ) (*result)->save_merged = save_merged; #endif return true; } catch( Py::Exception &e ) { PyErr_Print(); e.clear(); m_error_message = "unhandled exception in callback_conflict_resolver"; return false; } } #endif // // this method will be called to notify about // the progress of an ongoing action // #if defined( PYSVN_HAS_CONTEXT_NOTIFY2 ) void pysvn_context::contextNotify2 ( const svn_wc_notify_t *notify, apr_pool_t *pool ) { TRACE_CALLBACK( contextNotify2 ); PythonDisallowThreads callback_permission( m_permission ); // make sure we can call the users object if( !m_pyfn_Notify.isCallable() ) return; Py::Callable callback( m_pyfn_Notify ); Py::Tuple args( 1 ); Py::Dict info; args[0] = info; info["path"] = Py::String( notify->path ); info["action"] = toEnumValue( notify->action ); info["kind"] = toEnumValue( notify->kind ); info["mime_type"] = utf8_string_or_none( notify->mime_type ); info["content_state"] = toEnumValue( notify->content_state ); info["prop_state"] = toEnumValue( notify->prop_state ); info["revision"] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, notify->revision ) ); if( notify->err != NULL ) { SvnException error( notify->err ); info["error"] = error.pythonExceptionArg( 1 ); } else { info["error"] = Py::None(); } Py::Object results; try { results = callback.apply( args ); } catch( Py::Exception &e ) { PyErr_Print(); e.clear(); m_error_message = "unhandled exception in callback_notify"; } } #else void pysvn_context::contextNotify ( const char *path, svn_wc_notify_action_t action, svn_node_kind_t kind, const char *mime_type, svn_wc_notify_state_t content_state, svn_wc_notify_state_t prop_state, svn_revnum_t revnum ) { TRACE_CALLBACK( contextNotify ); PythonDisallowThreads callback_permission( m_permission ); // make sure we can call the users object if( !m_pyfn_Notify.isCallable() ) return; Py::Callable callback( m_pyfn_Notify ); Py::Tuple args( 1 ); Py::Dict info; args[0] = info; info["path"] = Py::String( path ); info["action"] = toEnumValue( action ); info["kind"] = toEnumValue( kind ); if( mime_type == NULL ) info["mime_type"] = Py::None(); else info["mime_type"] = Py::String( mime_type ); info["content_state"] = toEnumValue( content_state ); info["prop_state"] = toEnumValue( prop_state ); info["revision"] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, revnum ) ); Py::Object results; try { results = callback.apply( args ); } catch( Py::Exception &e ) { PyErr_Print(); e.clear(); m_error_message = "unhandled exception in callback_notify"; } } #endif // // Return true to cancel a long running operation // bool pysvn_context::contextCancel() { TRACE_CALLBACK( contextCancel ); PythonDisallowThreads callback_permission( m_permission ); // make sure we can call the users object if( !m_pyfn_Cancel.isCallable() ) return false; Py::Callable callback( m_pyfn_Cancel ); Py::Tuple args( 0 ); // bool Py::Object result; Py::Int retcode; try { result = callback.apply( args ); retcode = result; return long( retcode ) != 0; } catch( Py::Exception &e ) { PyErr_Print(); e.clear(); m_error_message = "unhandled exception in callback_cancel"; return false; } } void pysvn_context::setLogMessage( const std::string & a_msg ) { m_log_message = a_msg; } // // this method will be called to retrieve // a log message // bool pysvn_context::contextGetLogMessage( std::string & a_msg ) { TRACE_CALLBACK( contextGetLogMessage ); if( !m_log_message.empty() ) { a_msg = m_log_message; m_log_message.erase(); return true; } PythonDisallowThreads callback_permission( m_permission ); if( !m_pyfn_GetLogMessage.isCallable() ) { m_error_message = "callback_get_log_message required"; return false; } Py::Tuple args( 0 ); try { return get_string( m_pyfn_GetLogMessage, args, a_msg ); } catch( Py::Exception &e ) { PyErr_Print(); e.clear(); m_error_message = "unhandled exception in callback_get_log_message"; } return false; } // // this method is called if there is ssl server // information, that has to be confirmed by the user // // @param data // @return @a SslServerTrustAnswer // bool pysvn_context::contextSslServerTrustPrompt ( const svn_auth_ssl_server_cert_info_t &info, const std::string &realm, apr_uint32_t &a_accepted_failures, bool &accept_permanent ) { TRACE_CALLBACK( contextSslServerTrustPrompt ); PythonDisallowThreads callback_permission( m_permission ); // make sure we can call the users object if( !m_pyfn_SslServerTrustPrompt.isCallable() ) { m_error_message = "callback_ssl_server_trust_prompt required"; return false; } Py::Callable callback( m_pyfn_SslServerTrustPrompt ); Py::Dict trust_info; trust_info[Py::String("failures")] = Py::Int( long( a_accepted_failures ) ); trust_info[Py::String("hostname")] = Py::String( info.hostname ); trust_info[Py::String("finger_print")] = Py::String( info.fingerprint ); trust_info[Py::String("valid_from")] = Py::String( info.valid_from ); trust_info[Py::String("valid_until")] = Py::String( info.valid_until ); trust_info[Py::String("issuer_dname")] = Py::String( info.issuer_dname ); trust_info[Py::String("realm")] = Py::String( realm ); Py::Tuple args( 1 ); args[0] = trust_info; Py::Tuple result_tuple; Py::Int retcode; Py::Int accepted_failures; Py::Int may_save; try { result_tuple = callback.apply( args ); retcode = result_tuple[0]; accepted_failures = result_tuple[1]; may_save = result_tuple[2]; a_accepted_failures = long( accepted_failures ); if( long( retcode ) != 0 ) { accept_permanent = long( may_save ) != 0; return true; } else return false; } catch( Py::Exception &e ) { PyErr_Print(); e.clear(); m_error_message = "unhandled exception in callback_ssl_server_trust_prompt"; } return false; } // // this method is called to retrieve client side // information // bool pysvn_context::contextSslClientCertPrompt( std::string &_cert_file, const std::string &_realm, bool &_may_save ) { TRACE_CALLBACK( contextSslClientCertPrompt ); PythonDisallowThreads callback_permission( m_permission ); if( !m_pyfn_SslClientCertPrompt.isCallable() ) { m_error_message = "callback_ssl_client_cert_prompt required"; return false; } Py::Callable callback( m_pyfn_SslClientCertPrompt ); Py::Tuple args( 2 ); args[0] = Py::String( _realm ); args[1] = Py::Int( _may_save ); Py::Tuple results; Py::Int retcode; Py::String cert_file; Py::Int may_save_out; try { results = callback.apply( args ); retcode = results[0]; cert_file = results[1]; may_save_out = results[2]; if( long( retcode ) != 0 ) { _cert_file = cert_file.as_std_string( g_utf_8 ); _may_save = long( may_save_out ) != 0; return true; } } catch( Py::Exception &e ) { PyErr_Print(); e.clear(); m_error_message = "unhandled exception in callback_ssl_client_cert_prompt"; return false; } return false; } // // this method is called to retrieve the password // for the certificate // // @param password // bool pysvn_context::contextSslClientCertPwPrompt ( std::string &_password, const std::string &_realm, bool &_may_save ) { TRACE_CALLBACK( contextSslClientCertPwPrompt ); PythonDisallowThreads callback_permission( m_permission ); // make sure we can call the users object if( !m_pyfn_SslClientCertPwPrompt.isCallable() ) { m_error_message = "callback_ssl_client_cert_password_prompt required"; return false; } Py::Callable callback( m_pyfn_SslClientCertPwPrompt ); Py::Tuple args( 2 ); args[0] = Py::String( _realm ); args[1] = Py::Int( (long)_may_save ); // bool, username, password Py::Tuple results; Py::Int retcode; Py::String username; Py::String password; Py::Int may_save_out; try { results = callback.apply( args ); retcode = results[0]; password = results[1]; may_save_out = results[2]; // true returned if( long( retcode ) != 0 ) { // copy out the answers _password = password.as_std_string( g_utf_8 ); _may_save = long( may_save_out ) != 0; return true; } } catch( Py::Exception &e ) { PyErr_Print(); e.clear(); m_error_message = "unhandled exception in callback_ssl_client_cert_password_prompt"; return false; } return false; } // common get a string implementation static bool get_string( Py::Object &fn, Py::Tuple &args, std::string &msg ) { // make sure we can call the users object if( !fn.isCallable() ) return false; Py::Callable callback( fn ); Py::Tuple results; Py::Int retcode; Py::String message; results = callback.apply( args ); retcode = results[0]; message = results[1]; // true returned if( long( retcode ) != 0 ) { // copy out the answers msg = message.as_std_string( g_utf_8 ); return true; } return false; } pysvn-1.7.8/Source/pysvn_client.cpp000644 000771 000771 00000073033 11655030403 017676 0ustar00barrybarry000000 000000 // // ==================================================================== // (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_client.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_docs.hpp" #include "pysvn_svnenv.hpp" #include "svn_path.h" #include "svn_config.h" #include "svn_sorts.h" #include "pysvn_static_strings.hpp" static const char *g_utf_8 = "utf-8"; static void init_py_names() { static bool init_done = false; if( init_done ) { return; } py_name_callback_cancel = new Py::String( name_callback_cancel ); py_name_callback_conflict_resolver = new Py::String( name_callback_conflict_resolver ); py_name_callback_get_log_message = new Py::String( name_callback_get_log_message ); py_name_callback_get_login = new Py::String( name_callback_get_login ); py_name_callback_notify = new Py::String( name_callback_notify ); py_name_callback_ssl_client_cert_password_prompt = new Py::String( name_callback_ssl_client_cert_password_prompt ); py_name_callback_ssl_client_cert_prompt = new Py::String( name_callback_ssl_client_cert_prompt ); py_name_callback_ssl_server_prompt = new Py::String( name_callback_ssl_server_prompt ); py_name_callback_ssl_server_trust_prompt = new Py::String( name_callback_ssl_server_trust_prompt ); py_name_commit_info_style = new Py::String( name_commit_info_style ); py_name_created_rev = new Py::String( name_created_rev ); py_name_exception_style = new Py::String( name_exception_style ); py_name_has_props = new Py::String( name_has_props ); py_name_kind = new Py::String( name_kind ); py_name_last_author = new Py::String( name_last_author ); py_name_name = new Py::String( name_name ); py_name_node_kind = new Py::String( name_node_kind ); py_name_path = new Py::String( name_path ); py_name_prop_changed = new Py::String( name_prop_changed ); py_name_repos_path = new Py::String( name_repos_path ); py_name_size = new Py::String( name_size ); py_name_summarize_kind = new Py::String( name_summarize_kind ); py_name_time = new Py::String( name_time ); init_done = true; } //-------------------------------------------------------------------------------- std::string name_wrapper_status("PysvnStatus"); std::string name_wrapper_entry("PysvnEntry"); std::string name_wrapper_info("PysvnInfo"); std::string name_wrapper_lock("PysvnLock"); std::string name_wrapper_list("PysvnList"); std::string name_wrapper_log("PysvnLog"); std::string name_wrapper_log_changed_path("PysvnLogChangedPath"); std::string name_wrapper_dirent("PysvnDirent"); std::string name_wrapper_wc_info("PysvnWcInfo"); std::string name_wrapper_diff_summary("PysvnDiffSummary"); pysvn_client::pysvn_client ( pysvn_module &_module, const std::string &config_dir, Py::Dict result_wrappers ) : m_module( _module ) , m_result_wrappers( result_wrappers ) , m_context( config_dir ) , m_exception_style( 0 ) , m_commit_info_style( 0 ) , m_wrapper_status( result_wrappers, name_wrapper_status ) , m_wrapper_entry( result_wrappers, name_wrapper_entry ) , m_wrapper_info( result_wrappers, name_wrapper_info ) , m_wrapper_lock( result_wrappers, name_wrapper_lock ) , m_wrapper_list( result_wrappers, name_wrapper_list ) , m_wrapper_log( result_wrappers, name_wrapper_log ) , m_wrapper_log_changed_path( result_wrappers, name_wrapper_log_changed_path ) , m_wrapper_dirent( result_wrappers, name_wrapper_dirent ) , m_wrapper_wc_info( result_wrappers, name_wrapper_wc_info ) , m_wrapper_diff_summary( result_wrappers, name_wrapper_diff_summary ) { init_py_names(); } pysvn_client::~pysvn_client() { } Py::Object pysvn_client::getattr( const char *_name ) { std::string name( _name ); // std::cout << "getattr( " << name << " )" << std::endl << std::flush; if( name == name___members__ ) { Py::List members; members.append( *py_name_callback_get_login ); members.append( *py_name_callback_notify ); members.append( *py_name_callback_cancel ); members.append( *py_name_callback_conflict_resolver ); members.append( *py_name_callback_get_log_message ); members.append( *py_name_callback_ssl_server_prompt ); members.append( *py_name_callback_ssl_server_trust_prompt ); members.append( *py_name_callback_ssl_client_cert_prompt ); members.append( *py_name_callback_ssl_client_cert_password_prompt ); members.append( *py_name_exception_style ); members.append( *py_name_commit_info_style ); return members; } if( name == name_callback_get_login ) return m_context.m_pyfn_GetLogin; if( name == name_callback_notify ) return m_context.m_pyfn_Notify; #if defined( PYSVN_HAS_CONTEXT_PROGRESS ) if( name == name_callback_progress ) return m_context.m_pyfn_Progress; #endif #if defined( PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC ) if( name == name_callback_conflict_resolver ) return m_context.m_pyfn_ConflictResolver; #endif if( name == name_callback_cancel ) return m_context.m_pyfn_Cancel; if( name == name_callback_get_log_message ) return m_context.m_pyfn_GetLogMessage; if( name == name_callback_ssl_server_prompt ) return m_context.m_pyfn_SslServerPrompt; if( name == name_callback_ssl_server_trust_prompt ) return m_context.m_pyfn_SslServerTrustPrompt; if( name == name_callback_ssl_client_cert_prompt ) return m_context.m_pyfn_SslClientCertPrompt; if( name == name_callback_ssl_client_cert_password_prompt ) return m_context.m_pyfn_SslClientCertPwPrompt; if( name == name_callback_ssl_client_cert_password_prompt ) return m_context.m_pyfn_SslClientCertPwPrompt; if( name == name_exception_style ) return Py::Int( m_exception_style ); if( name == name_commit_info_style ) return Py::Int( m_commit_info_style ); return getattr_default( _name ); } static bool set_callable( Py::Object &callback, const Py::Object &value ) { if( value.isCallable() ) { callback = value; return true; } else if( value.is( Py::None() ) ) { callback = value; return false; } else { throw Py::AttributeError( "expecting None or a callable object" ); } } int pysvn_client::setattr( const char *_name, const Py::Object &value ) { std::string name( _name ); if( name == name_callback_get_login ) set_callable( m_context.m_pyfn_GetLogin, value ); else if( name == name_callback_notify ) m_context.installNotify( set_callable( m_context.m_pyfn_Notify, value ) ); #if defined( PYSVN_HAS_CONTEXT_PROGRESS ) else if( name == name_callback_progress ) m_context.installProgress( set_callable( m_context.m_pyfn_Progress, value ) ); #endif #if defined( PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC ) else if( name == name_callback_conflict_resolver ) m_context.installConflictResolver( set_callable( m_context.m_pyfn_ConflictResolver, value ) ); #endif else if( name == name_callback_cancel ) m_context.installCancel( set_callable( m_context.m_pyfn_Cancel, value ) ); else if( name == name_callback_get_log_message ) set_callable( m_context.m_pyfn_GetLogMessage, value ); else if( name == name_callback_ssl_server_prompt ) set_callable( m_context.m_pyfn_SslServerPrompt, value ); else if( name == name_callback_ssl_server_trust_prompt ) set_callable( m_context.m_pyfn_SslServerTrustPrompt, value ); else if( name == name_callback_ssl_client_cert_prompt ) set_callable( m_context.m_pyfn_SslClientCertPrompt, value ); else if( name == name_callback_ssl_client_cert_password_prompt ) set_callable( m_context.m_pyfn_SslClientCertPwPrompt, value ); else if( name == name_exception_style ) { Py::Int style( value ); if( style == 0l || style == 1l ) { m_exception_style = style; } else { throw Py::AttributeError( "exception_style value must be 0 or 1" ); } } else if( name == name_commit_info_style ) { Py::Int style( value ); if( style == 0l || style == 1l ) { m_commit_info_style = style; } else { throw Py::AttributeError( "commit_info_style value must be 0 or 1" ); } } else { std::string msg( "Unknown attribute: " ); msg += name; throw Py::AttributeError( msg ); } return 0; } Py::Object pysvn_client::helper_boolean_auth_set( FunctionArguments &a_args, const char *a_arg_name, const char *a_param_name ) { a_args.check(); bool enable( a_args.getBoolean( a_arg_name ) ); try { void *param = 0; if( !enable ) param = (void *)"1"; svn_auth_set_parameter ( m_context.ctx()->auth_baton, a_param_name, param ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::None(); } Py::Object pysvn_client::helper_boolean_auth_get( FunctionArguments &a_args, const char *a_param_name ) { a_args.check(); char *param = NULL; try { param = (char *)svn_auth_get_parameter ( m_context.ctx()->auth_baton, a_param_name ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } bool not_set = param != NULL && param[0] == '1'; if( not_set ) return Py::Int( 0 ); return Py::Int( 1 ); } Py::Object pysvn_client::helper_string_auth_set ( FunctionArguments &a_args, const char *a_arg_name, const char *a_param_name, std::string &ctx_str ) { a_args.check(); const char *param = NULL; Py::Object param_obj( a_args.getArg( a_arg_name ) ); if( !param_obj.is( Py::None() ) ) { Py::String param_str( param_obj ); ctx_str = param_str.as_std_string( g_utf_8 ); param = ctx_str.c_str(); } try { svn_auth_set_parameter ( m_context.ctx()->auth_baton, a_param_name, param ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::None(); } Py::Object pysvn_client::helper_string_auth_get( FunctionArguments &a_args, const char *a_param_name ) { a_args.check(); char *param = NULL; try { param = (char *)svn_auth_get_parameter ( m_context.ctx()->auth_baton, a_param_name ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } if( param != NULL ) return Py::String( param ); return Py::None(); } #if defined( PYSVN_HAS_WC_ADM_DIR ) Py::Object pysvn_client::get_adm_dir( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { false, NULL } }; FunctionArguments args( "get_adm_dir", args_desc, a_args, a_kws ); args.check(); const char *name = NULL; try { name = svn_wc_get_adm_dir ( m_context.getContextPool() ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::String( name ); } #endif Py::Object pysvn_client::get_auth_cache( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { false, NULL } }; FunctionArguments args( "get_auth_cache", args_desc, a_args, a_kws ); return helper_boolean_auth_get( args, SVN_AUTH_PARAM_NO_AUTH_CACHE ); } Py::Object pysvn_client::get_interactive( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { false, NULL } }; FunctionArguments args( "get_interactive", args_desc, a_args, a_kws ); return helper_boolean_auth_get( args, SVN_AUTH_PARAM_NON_INTERACTIVE ); } Py::Object pysvn_client::get_store_passwords( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { false, NULL } }; FunctionArguments args( "get_store_passwords", args_desc, a_args, a_kws ); return helper_boolean_auth_get( args, SVN_AUTH_PARAM_DONT_STORE_PASSWORDS ); } Py::Object pysvn_client::get_default_username( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { false, NULL } }; FunctionArguments args( "get_default_username", args_desc, a_args, a_kws ); return helper_string_auth_get( args, SVN_AUTH_PARAM_DEFAULT_USERNAME ); } Py::Object pysvn_client::get_default_password( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { false, NULL } }; FunctionArguments args( "get_default_password", args_desc, a_args, a_kws ); return helper_string_auth_get( args, SVN_AUTH_PARAM_DEFAULT_PASSWORD ); } #if defined( PYSVN_HAS_WC_ADM_DIR ) Py::Object pysvn_client::set_adm_dir( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_name }, { false, NULL } }; FunctionArguments args( "set_adm_dir", args_desc, a_args, a_kws ); args.check(); std::string name( args.getBytes( name_name ) ); try { svn_wc_set_adm_dir ( name.c_str(), m_context.getContextPool() ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::None(); } #endif Py::Object pysvn_client::set_auth_cache( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_enable }, { false, NULL } }; FunctionArguments args( "set_auth_cache", args_desc, a_args, a_kws ); return helper_boolean_auth_set( args, name_enable, SVN_AUTH_PARAM_NO_AUTH_CACHE ); } Py::Object pysvn_client::set_interactive( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_enable }, { false, NULL } }; FunctionArguments args( "set_interactive", args_desc, a_args, a_kws ); return helper_boolean_auth_set( args, name_enable, SVN_AUTH_PARAM_NON_INTERACTIVE ); } Py::Object pysvn_client::set_store_passwords( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_enable }, { false, NULL } }; FunctionArguments args( "set_store_passwords", args_desc, a_args, a_kws ); return helper_boolean_auth_set( args, name_enable, SVN_AUTH_PARAM_DONT_STORE_PASSWORDS ); } Py::Object pysvn_client::set_default_username( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_username }, { false, NULL } }; FunctionArguments args( "set_default_username", args_desc, a_args, a_kws ); return helper_string_auth_set( args, name_username, SVN_AUTH_PARAM_DEFAULT_USERNAME, m_context.m_default_username ); } Py::Object pysvn_client::set_default_password( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_password }, { false, NULL } }; FunctionArguments args( "set_default_password", args_desc, a_args, a_kws ); return helper_string_auth_set( args, name_password, SVN_AUTH_PARAM_DEFAULT_PASSWORD, m_context.m_default_password ); } Py::Object pysvn_client::get_auto_props( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { false, NULL } }; FunctionArguments args( "get_auto_props", args_desc, a_args, a_kws ); args.check(); svn_boolean_t enable = false; try { svn_config_t *cfg = (svn_config_t *)apr_hash_get ( m_context.ctx()->config, SVN_CONFIG_CATEGORY_CONFIG, APR_HASH_KEY_STRING ); svn_error_t *error = svn_config_get_bool ( cfg, &enable, SVN_CONFIG_SECTION_MISCELLANY, SVN_CONFIG_OPTION_ENABLE_AUTO_PROPS, enable ); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::Int( enable ); } Py::Object pysvn_client::set_auto_props( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_enable }, { false, NULL } }; FunctionArguments args( "set_auto_props", args_desc, a_args, a_kws ); args.check(); bool enable( args.getBoolean( name_enable ) ); try { svn_config_t *cfg = (svn_config_t *)apr_hash_get ( m_context.ctx()->config, SVN_CONFIG_CATEGORY_CONFIG, APR_HASH_KEY_STRING ); svn_config_set_bool ( cfg, SVN_CONFIG_SECTION_MISCELLANY, SVN_CONFIG_OPTION_ENABLE_AUTO_PROPS, enable ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::None(); } #if defined( PYSVN_HAS_WC_ADM_DIR ) Py::Object pysvn_client::is_adm_dir( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_name }, { false, NULL } }; FunctionArguments args( "is_adm_dir", args_desc, a_args, a_kws ); args.check(); std::string name( args.getBytes( name_name ) ); svn_boolean_t name_is_adm_dir = 0; try { name_is_adm_dir = svn_wc_is_adm_dir ( name.c_str(), m_context.getContextPool() ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::Int( name_is_adm_dir ); } #endif Py::Object pysvn_client::is_url( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url }, { false, NULL } }; FunctionArguments args( "is_url", args_desc, a_args, a_kws ); args.check(); Py::String path( args.getUtf8String( name_url ) ); Py::Int result( is_svn_url( path ) ); return result; } #if defined( PYSVN_HAS_CLIENT_ROOT_URL_FROM_PATH ) Py::Object pysvn_client::cmd_root_url_from_path( const Py::Tuple& a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, NULL } }; FunctionArguments args( "root_url_from_path", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_url_or_path ) ); SvnPool pool( m_context ); const char *root_url = NULL; try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); svn_error_t *error = svn_client_root_url_from_path ( &root_url, norm_path.c_str(), m_context, pool ); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::String( root_url ); } #endif // check that we are not in use on another thread void pysvn_client::checkThreadPermission() { if( m_context.hasPermission() ) { throw Py::Exception( m_module.client_error, "client in use on another thread" ); } } void pysvn_client::throw_client_error( SvnException &e ) { throw Py::Exception( m_module.client_error, e.pythonExceptionArg( m_exception_style ) ); } void revisionKindCompatibleCheck ( bool is_url, const svn_opt_revision_t &revision, const char *revision_name, const char *url_or_path_name ) { std::string message; if( is_url ) { // URL compatibility switch( revision.kind ) { case svn_opt_revision_number: case svn_opt_revision_date: case svn_opt_revision_committed: case svn_opt_revision_previous: case svn_opt_revision_head: case svn_opt_revision_unspecified: break; case svn_opt_revision_working: case svn_opt_revision_base: default: message += revision_name; message += " is not compatible with URL "; message += url_or_path_name; throw Py::AttributeError( message ); } } #if defined( there_are_any_checks_for_path ) else { // PATH compatibility switch( revision.kind ) { case svn_opt_revision_working: case svn_opt_revision_base: case svn_opt_revision_unspecified: break; case svn_opt_revision_number: case svn_opt_revision_date: case svn_opt_revision_committed: case svn_opt_revision_previous: case svn_opt_revision_head: default: message += revision_name; message += " is not compatible with path "; message += url_or_path_name; throw Py::AttributeError( message ); } } #endif } void pysvn_client::init_type() { behaviors().name("Client"); behaviors().doc( pysvn_client_doc ); behaviors().supportGetattr(); behaviors().supportSetattr(); add_keyword_method("add", &pysvn_client::cmd_add, pysvn_client_add_doc ); #ifdef PYSVN_HAS_CLIENT_ADD_TO_CHANGELIST add_keyword_method("add_to_changelist", &pysvn_client::cmd_add_to_changelist, pysvn_client_add_to_changelist_doc ); #endif add_keyword_method("annotate", &pysvn_client::cmd_annotate, pysvn_client_annotate_doc ); add_keyword_method("cat", &pysvn_client::cmd_cat, pysvn_client_cat_doc ); add_keyword_method("checkin", &pysvn_client::cmd_checkin, pysvn_client_checkin_doc ); add_keyword_method("checkout", &pysvn_client::cmd_checkout, pysvn_client_checkout_doc ); add_keyword_method("cleanup", &pysvn_client::cmd_cleanup, pysvn_client_cleanup_doc ); add_keyword_method("copy", &pysvn_client::cmd_copy, pysvn_client_copy_doc ); #if defined( PYSVN_HAS_CLIENT_COPY4 ) add_keyword_method("copy2", &pysvn_client::cmd_copy2, pysvn_client_copy2_doc ); #endif add_keyword_method("diff", &pysvn_client::cmd_diff, pysvn_client_diff_doc ); #if defined( PYSVN_HAS_CLIENT_DIFF_PEG ) add_keyword_method("diff_peg", &pysvn_client::cmd_diff_peg, pysvn_client_diff_peg_doc ); #endif #if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE ) add_keyword_method("diff_summarize", &pysvn_client::cmd_diff_summarize, pysvn_client_diff_summarize_doc ); add_keyword_method("diff_summarize_peg", &pysvn_client::cmd_diff_summarize_peg, pysvn_client_diff_summarize_peg_doc ); #endif add_keyword_method("export", &pysvn_client::cmd_export, pysvn_client_export_doc ); #ifdef PYSVN_HAS_CLIENT_GET_CHANGELIST add_keyword_method("get_changelist", &pysvn_client::cmd_get_changelist, pysvn_client_get_changelist_doc ); #endif #if defined( PYSVN_HAS_WC_ADM_DIR ) add_keyword_method("get_adm_dir", &pysvn_client::get_adm_dir, pysvn_client_get_adm_dir_doc ); #endif add_keyword_method("get_auth_cache", &pysvn_client::get_auth_cache, pysvn_client_get_auth_cache_doc ); add_keyword_method("get_auto_props", &pysvn_client::get_auto_props, pysvn_client_get_auto_props_doc ); add_keyword_method("get_default_password", &pysvn_client::get_default_password, pysvn_client_get_default_password_doc ); add_keyword_method("get_default_username", &pysvn_client::get_default_username, pysvn_client_get_default_username_doc ); add_keyword_method("get_interactive", &pysvn_client::get_interactive, pysvn_client_get_interactive_doc ); add_keyword_method("get_store_passwords", &pysvn_client::get_store_passwords, pysvn_client_get_store_passwords_doc ); add_keyword_method("import_", &pysvn_client::cmd_import, pysvn_client_import__doc ); add_keyword_method("info", &pysvn_client::cmd_info, pysvn_client_info_doc ); #if defined( PYSVN_HAS_CLIENT_INFO ) add_keyword_method("info2", &pysvn_client::cmd_info2, pysvn_client_info2_doc ); #endif #if defined( PYSVN_HAS_WC_ADM_DIR ) add_keyword_method("is_adm_dir", &pysvn_client::is_adm_dir, pysvn_client_is_adm_dir_doc ); #endif add_keyword_method("is_url", &pysvn_client::is_url, pysvn_client_is_url_doc ); #if defined( PYSVN_HAS_CLIENT_LOCK ) add_keyword_method("lock", &pysvn_client::cmd_lock, pysvn_client_lock_doc ); #endif add_keyword_method("log", &pysvn_client::cmd_log, pysvn_client_log_doc ); #if defined( PYSVN_HAS_CLIENT_LIST ) add_keyword_method("list", &pysvn_client::cmd_list, pysvn_client_list_doc ); #endif add_keyword_method("ls", &pysvn_client::cmd_ls, pysvn_client_ls_doc ); add_keyword_method("merge", &pysvn_client::cmd_merge, pysvn_client_merge_doc ); #if defined( PYSVN_HAS_CLIENT_MERGE_PEG ) add_keyword_method("merge_peg", &pysvn_client::cmd_merge_peg, pysvn_client_merge_peg_doc ); #endif #if defined( PYSVN_HAS_CLIENT_MERGE_PEG3 ) add_keyword_method("merge_peg2", &pysvn_client::cmd_merge_peg2, pysvn_client_merge_peg2_doc ); #endif #if defined( PYSVN_HAS_CLIENT_MERGE_REINTEGRATE ) add_keyword_method("merge_reintegrate", &pysvn_client::cmd_merge_reintegrate, pysvn_client_merge_reintegrate_doc ); #endif add_keyword_method("mkdir", &pysvn_client::cmd_mkdir, pysvn_client_mkdir_doc ); #if defined( PYSVN_HAS_CLIENT_MOVE5 ) add_keyword_method("move2", &pysvn_client::cmd_move2, pysvn_client_move2_doc ); #endif add_keyword_method("move", &pysvn_client::cmd_move, pysvn_client_move_doc ); add_keyword_method("propdel", &pysvn_client::cmd_propdel, pysvn_client_propdel_doc ); add_keyword_method("propget", &pysvn_client::cmd_propget, pysvn_client_propget_doc ); add_keyword_method("proplist", &pysvn_client::cmd_proplist, pysvn_client_proplist_doc ); add_keyword_method("propset", &pysvn_client::cmd_propset, pysvn_client_propset_doc ); add_keyword_method("relocate", &pysvn_client::cmd_relocate, pysvn_client_relocate_doc ); add_keyword_method("remove", &pysvn_client::cmd_remove, pysvn_client_remove_doc ); #ifdef PYSVN_HAS_CLIENT_REMOVE_FROM_CHANGELISTS add_keyword_method("remove_from_changelists", &pysvn_client::cmd_remove_from_changelists, pysvn_client_remove_from_changelists_doc ); #endif add_keyword_method("resolved", &pysvn_client::cmd_resolved, pysvn_client_resolved_doc ); add_keyword_method("revert", &pysvn_client::cmd_revert, pysvn_client_revert_doc ); add_keyword_method("revpropdel", &pysvn_client::cmd_revpropdel, pysvn_client_revpropdel_doc ); add_keyword_method("revpropget", &pysvn_client::cmd_revpropget, pysvn_client_revpropget_doc ); add_keyword_method("revproplist", &pysvn_client::cmd_revproplist, pysvn_client_revproplist_doc ); add_keyword_method("revpropset", &pysvn_client::cmd_revpropset, pysvn_client_revpropset_doc ); #if defined( PYSVN_HAS_CLIENT_ROOT_URL_FROM_PATH ) add_keyword_method("root_url_from_path", &pysvn_client::cmd_root_url_from_path, pysvn_client_root_url_from_path_doc ); #endif #if defined( PYSVN_HAS_WC_ADM_DIR ) add_keyword_method("set_adm_dir", &pysvn_client::set_adm_dir, pysvn_client_set_adm_dir_doc ); #endif add_keyword_method("set_auth_cache", &pysvn_client::set_auth_cache, pysvn_client_set_auth_cache_doc ); add_keyword_method("set_auto_props", &pysvn_client::set_auto_props, pysvn_client_set_auto_props_doc ); add_keyword_method("set_default_password", &pysvn_client::set_default_password, pysvn_client_set_default_password_doc ); add_keyword_method("set_default_username", &pysvn_client::set_default_username, pysvn_client_set_default_username_doc ); add_keyword_method("set_interactive", &pysvn_client::set_interactive, pysvn_client_set_interactive_doc ); add_keyword_method("set_store_passwords", &pysvn_client::set_store_passwords, pysvn_client_set_store_passwords_doc ); add_keyword_method("status", &pysvn_client::cmd_status, pysvn_client_status_doc ); add_keyword_method("switch", &pysvn_client::cmd_switch, pysvn_client_switch_doc ); #if defined( PYSVN_HAS_CLIENT_LOCK ) add_keyword_method("unlock", &pysvn_client::cmd_unlock, pysvn_client_unlock_doc ); #endif #if defined( PYSVN_HAS_CLIENT_UPGRADE ) add_keyword_method("upgrade", &pysvn_client::cmd_upgrade, pysvn_client_upgrade_doc ); #endif add_keyword_method("update", &pysvn_client::cmd_update, pysvn_client_update_doc ); } pysvn-1.7.8/Source/pysvn_client_cmd_add.cpp000644 000771 000771 00000030572 11435030367 021337 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_client_cmd_prop.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_svnenv.hpp" #include "pysvn_static_strings.hpp" Py::Object pysvn_client::cmd_add( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, name_recurse }, #if defined( PYSVN_HAS_CLIENT_ADD2 ) { false, name_force }, #endif #if defined( PYSVN_HAS_CLIENT_ADD3 ) { false, name_ignore }, #endif #if defined( PYSVN_HAS_CLIENT_ADD4 ) { false, name_depth }, { false, name_add_parents }, #endif { false, NULL } }; FunctionArguments args( "add", args_desc, a_args, a_kws ); args.check(); Py::List path_list( toListOfStrings( args.getArg( name_path ) ) ); #if defined( PYSVN_HAS_CLIENT_ADD2 ) bool force = args.getBoolean( name_force, false ); #endif #if defined( PYSVN_HAS_CLIENT_ADD3 ) bool ignore = args.getBoolean( name_ignore, true ); #endif #if defined( PYSVN_HAS_CLIENT_ADD4 ) svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_empty ); bool add_parents = args.getBoolean( name_add_parents, false ); #else bool recurse = args.getBoolean( name_recurse, true ); #endif SvnPool pool( m_context ); try { for( Py::List::size_type i=0; idata, (int)stringbuf->len ); } Py::Object pysvn_client::cmd_mkdir( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, name_log_message }, #if defined( PYSVN_HAS_CLIENT_MKDIR3 ) { false, name_make_parents }, { false, name_revprops }, #endif { false, NULL } }; FunctionArguments args( "mkdir", args_desc, a_args, a_kws ); args.check(); // message that explains to the user the type error that may be thrown next std::string type_error_message; // args to the mkdir call std::string message; SvnPool pool( m_context ); apr_array_header_t *targets = targetsFromStringOrList( args.getArg( name_url_or_path ), pool ); #if defined( PYSVN_HAS_CLIENT_MKDIR3 ) bool make_parents = args.getBoolean( name_make_parents, false ); apr_hash_t *revprops = NULL; if( args.hasArg( name_revprops ) ) { Py::Object py_revprop = args.getArg( name_revprops ); if( !py_revprop.isNone() ) { revprops = hashOfStringsFromDistOfStrings( py_revprop, pool ); } } #endif try { type_error_message = "expecting string message (arg 2)"; message = args.getUtf8String( name_log_message ); } catch( Py::TypeError & ) { throw Py::TypeError( type_error_message ); } pysvn_commit_info_t *commit_info = NULL; try { checkThreadPermission(); PythonAllowThreads permission( m_context ); m_context.setLogMessage( message.c_str() ); #if defined( PYSVN_HAS_CLIENT_MKDIR3 ) svn_error_t *error = svn_client_mkdir3 ( &commit_info, // changed type targets, make_parents, revprops, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_MKDIR2 ) svn_error_t *error = svn_client_mkdir2 ( &commit_info, // changed type targets, m_context, pool ); #else svn_error_t *error = svn_client_mkdir ( &commit_info, targets, m_context, pool ); #endif permission.allowThisThread(); if( error != 0 ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return toObject( commit_info, m_commit_info_style ); } Py::Object pysvn_client::cmd_remove( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, name_force }, #if defined( PYSVN_HAS_CLIENT_DELETE3 ) { false, name_keep_local }, { false, name_revprops }, #endif { false, NULL } }; FunctionArguments args( "remove", args_desc, a_args, a_kws ); args.check(); SvnPool pool( m_context ); bool force = args.getBoolean( name_force, false ); #if defined( PYSVN_HAS_CLIENT_DELETE3 ) bool keep_local = args.getBoolean( name_keep_local, false ); apr_hash_t *revprops = NULL; if( args.hasArg( name_revprops ) ) { Py::Object py_revprop = args.getArg( name_revprops ); if( !py_revprop.isNone() ) { revprops = hashOfStringsFromDistOfStrings( py_revprop, pool ); } } #endif apr_array_header_t *targets = targetsFromStringOrList( args.getArg( name_url_or_path ), pool ); pysvn_commit_info_t *commit_info = NULL; try { checkThreadPermission(); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_DELETE3 ) svn_error_t *error = svn_client_delete3 ( &commit_info, targets, force, keep_local, revprops, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_DELETE2 ) svn_error_t *error = svn_client_delete2 ( &commit_info, // commit_info changed targets, force, m_context, pool ); #else svn_error_t *error = svn_client_delete ( &commit_info, targets, force, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return toObject( commit_info, m_commit_info_style ); } Py::Object pysvn_client::cmd_revert( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, name_recurse }, #if defined( PYSVN_HAS_CLIENT_REVERT2 ) { false, name_depth }, { false, name_changelists }, #endif { false, NULL } }; FunctionArguments args( "revert", args_desc, a_args, a_kws ); args.check(); std::string type_error_message; SvnPool pool( m_context ); apr_array_header_t *targets = targetsFromStringOrList( args.getArg( name_path ), pool ); try { #if defined( PYSVN_HAS_CLIENT_REVERT2 ) apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_empty, svn_depth_infinity, svn_depth_empty ); #else bool recurse = args.getBoolean( name_recurse, false ); #endif try { checkThreadPermission(); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_REVERT2 ) svn_error_t *error = svn_client_revert2 ( targets, depth, changelists, m_context, pool ); #else svn_error_t *error = svn_client_revert ( targets, recurse, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } } catch( Py::TypeError & ) { throw Py::TypeError( type_error_message ); } return Py::None(); } pysvn-1.7.8/Source/pysvn_client_cmd_changelist.cpp000644 000771 000771 00000016216 11132131027 022714 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_client_cmd_prop.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_svnenv.hpp" #include "pysvn_static_strings.hpp" #ifdef PYSVN_HAS_CLIENT_ADD_TO_CHANGELIST Py::Object pysvn_client::cmd_add_to_changelist( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { true, name_changelist }, { false, name_depth }, { false, name_changelists }, { false, NULL } }; FunctionArguments args( "add_to_changelist", args_desc, a_args, a_kws ); args.check(); std::string type_error_message; SvnPool pool( m_context ); try { apr_array_header_t *targets = targetsFromStringOrList( args.getArg( name_path ), pool ); std::string changelist( args.getUtf8String( name_changelist ) ); apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } svn_depth_t depth = args.getDepth( name_depth, svn_depth_files ); try { checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_error_t *error = svn_client_add_to_changelist ( targets, changelist.c_str(), depth, changelists, m_context, pool ); permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } } catch( Py::TypeError & ) { throw Py::TypeError( type_error_message ); } return Py::None(); } #endif #ifdef PYSVN_HAS_CLIENT_GET_CHANGELIST class ChangelistBaton { public: ChangelistBaton( PythonAllowThreads *permission, SvnPool &pool, Py::List &changelist_list ) : m_permission( permission ) , m_pool( pool ) , m_changelist_list( changelist_list ) {} ~ChangelistBaton() {} PythonAllowThreads *m_permission; SvnPool &m_pool; Py::List &m_changelist_list; }; svn_error_t *changelistReceiver ( void *baton_, const char *path, const char *changelist, apr_pool_t *pool ) { ChangelistBaton *baton = reinterpret_cast( baton_ ); PythonDisallowThreads callback_permission( baton->m_permission ); if( path == NULL || changelist == NULL ) { return NULL; } Py::Tuple values( 2 ); values[0] = Py::String( path ); values[1] = Py::String( changelist ); baton->m_changelist_list.append( values ); return NULL; } Py::Object pysvn_client::cmd_get_changelist( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, name_depth }, { false, name_changelists }, { false, NULL } }; FunctionArguments args( "get_changelists", args_desc, a_args, a_kws ); args.check(); std::string type_error_message; SvnPool pool( m_context ); try { std::string path( args.getUtf8String( name_path ) ); std::string norm_path( svnNormalisedIfPath( path, pool ) ); apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); //for (int j = 0; j < changelists->nelts; ++j) //{ // const char *name = ((const char **)changelists->elts)[j]; // std::cout << "QQQ: get changelist=" << name << std::endl; //} } svn_depth_t depth = args.getDepth( name_depth, svn_depth_files ); Py::List changelist_list; try { checkThreadPermission(); PythonAllowThreads permission( m_context ); ChangelistBaton baton( &permission, pool, changelist_list ); svn_error_t *error = svn_client_get_changelists ( norm_path.c_str(), changelists, depth, changelistReceiver, reinterpret_cast( &baton ), m_context, pool ); permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return changelist_list; } catch( Py::TypeError & ) { throw Py::TypeError( type_error_message ); } return Py::None(); } #endif #ifdef PYSVN_HAS_CLIENT_REMOVE_FROM_CHANGELISTS Py::Object pysvn_client::cmd_remove_from_changelists( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, name_depth }, { false, name_changelists }, { false, NULL } }; FunctionArguments args( "remove_from_changelists", args_desc, a_args, a_kws ); args.check(); std::string type_error_message; SvnPool pool( m_context ); try { apr_array_header_t *targets = targetsFromStringOrList( args.getArg( name_path ), pool ); apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } svn_depth_t depth = args.getDepth( name_depth, svn_depth_files ); try { checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_error_t *error = svn_client_remove_from_changelists ( targets, depth, changelists, m_context, pool ); permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } } catch( Py::TypeError & ) { throw Py::TypeError( type_error_message ); } return Py::None(); } #endif pysvn-1.7.8/Source/pysvn_client_cmd_checkin.cpp000644 000771 000771 00000034704 11654334732 022222 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_client_cmd_list.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_svnenv.hpp" #include "pysvn_static_strings.hpp" Py::Object pysvn_client::cmd_checkin( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { true, name_log_message }, { false, name_recurse }, #if defined( PYSVN_HAS_CLIENT_COMMIT2 ) { false, name_keep_locks }, #endif #if defined( PYSVN_HAS_CLIENT_COMMIT4 ) { false, name_depth }, { false, name_keep_changelist }, { false, name_changelists }, { false, name_revprops }, #endif { false, NULL } }; FunctionArguments args( "checkin", args_desc, a_args, a_kws ); args.check(); SvnPool pool( m_context ); pysvn_commit_info_t *commit_info = NULL; apr_array_header_t *targets = targetsFromStringOrList( args.getArg( name_path ), pool ); std::string type_error_message; try { type_error_message = "expecting string for message (arg 2)"; std::string message( args.getUtf8String( name_log_message ) ); #ifndef PYSVN_HAS_CLIENT_COMMIT4 type_error_message = "expecting boolean for recurse keyword arg"; bool recurse = args.getBoolean( name_recurse, true ); #endif #if defined( PYSVN_HAS_CLIENT_COMMIT2 ) type_error_message = "expecting boolean for keep_locks keyword arg"; bool keep_locks = args.getBoolean( name_keep_locks, true ); #endif #if defined( PYSVN_HAS_CLIENT_COMMIT4 ) type_error_message = "expecting recurse or depth keyword arg"; svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_files ); bool keep_changelist = args.getBoolean( name_keep_changelist, false ); apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } apr_hash_t *revprops = NULL; if( args.hasArg( name_revprops ) ) { Py::Object py_revprop = args.getArg( name_revprops ); if( !py_revprop.isNone() ) { revprops = hashOfStringsFromDistOfStrings( py_revprop, pool ); } } #endif try { checkThreadPermission(); PythonAllowThreads permission( m_context ); m_context.setLogMessage( message ); #if defined( PYSVN_HAS_CLIENT_COMMIT4 ) svn_error_t *error = svn_client_commit4 ( &commit_info, targets, depth, keep_locks, keep_changelist, changelists, revprops, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_COMMIT3 ) svn_error_t *error = svn_client_commit3 ( &commit_info, // commit info type changed targets, recurse, keep_locks, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_COMMIT2 ) svn_error_t *error = svn_client_commit2 ( &commit_info, targets, recurse, keep_locks, m_context, pool ); #else svn_error_t *error = svn_client_commit ( &commit_info, targets, !recurse, // non recursive m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } } catch( Py::TypeError & ) { throw Py::TypeError( type_error_message ); } return toObject( commit_info, m_commit_info_style ); } Py::Object pysvn_client::cmd_checkout( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url }, { true, name_path }, { false, name_recurse }, { false, name_revision }, #if defined( PYSVN_HAS_CLIENT_CHECKOUT2 ) { false, name_peg_revision }, { false, name_ignore_externals }, #endif #if defined( PYSVN_HAS_CLIENT_CHECKOUT3 ) { false, name_allow_unver_obstructions }, { false, name_depth }, #endif { false, NULL } }; FunctionArguments args( "checkout", args_desc, a_args, a_kws ); args.check(); std::string url( args.getUtf8String( name_url ) ); std::string path( args.getUtf8String( name_path ) ); #if defined( PYSVN_HAS_CLIENT_CHECKOUT3 ) bool allow_unver_obstructions = args.getBoolean( name_allow_unver_obstructions, false ); svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_files ); #else bool recurse = args.getBoolean( name_recurse, true ); #endif svn_opt_revision_t revision = args.getRevision( name_revision, svn_opt_revision_head ); #if defined( PYSVN_HAS_CLIENT_CHECKOUT2 ) svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, revision ); bool ignore_externals = args.getBoolean( name_ignore_externals, false ); #endif SvnPool pool( m_context ); bool is_url = is_svn_url( path ); #if defined( PYSVN_HAS_CLIENT_CHECKOUT2 ) revisionKindCompatibleCheck( is_url, peg_revision, name_peg_revision, name_url_or_path ); #endif revisionKindCompatibleCheck( is_url, revision, name_revision, name_url_or_path ); svn_revnum_t revnum = 0; try { std::string norm_url( svnNormalisedIfPath( url, pool ) ); std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_revnum_t revnum = 0; #if defined( PYSVN_HAS_CLIENT_CHECKOUT3 ) svn_error_t *error = svn_client_checkout3 ( &revnum, norm_url.c_str(), norm_path.c_str(), &peg_revision, &revision, depth, ignore_externals, allow_unver_obstructions, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_CHECKOUT2 ) svn_error_t *error = svn_client_checkout2 ( &revnum, norm_url.c_str(), norm_path.c_str(), &peg_revision, &revision, recurse, ignore_externals, m_context, pool ); #else svn_error_t *error = svn_client_checkout ( &revnum, norm_url.c_str(), norm_path.c_str(), &revision, recurse, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, revnum ) ); } Py::Object pysvn_client::cmd_cleanup( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, NULL } }; FunctionArguments args( "cleanup", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_path ) ); SvnPool pool( m_context ); try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_error_t * error = svn_client_cleanup( norm_path.c_str(), m_context, pool); permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::None(); } Py::Object pysvn_client::cmd_resolved( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, name_recurse }, #if defined( PYSVN_HAS_CLIENT_RESOLVE ) { false, name_depth }, { false, name_conflict_choice }, #endif { false, NULL } }; FunctionArguments args( "resolved", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_path ) ); #if defined( PYSVN_HAS_CLIENT_RESOLVE ) svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_files, svn_depth_infinity, svn_depth_files ); svn_wc_conflict_choice_t conflict_choice = args.getWcConflictChoice( name_conflict_choice, svn_wc_conflict_choose_merged ); #else bool recurse = args.getBoolean( name_recurse, false ); #endif SvnPool pool( m_context ); try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_RESOLVE ) svn_error_t *error = svn_client_resolve ( norm_path.c_str(), depth, conflict_choice, m_context, pool ); #else svn_error_t *error = svn_client_resolved ( norm_path.c_str(), recurse, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::None(); } Py::Object pysvn_client::cmd_update( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, name_recurse }, { false, name_revision }, #if defined( PYSVN_HAS_CLIENT_UPDATE2 ) { false, name_ignore_externals }, #endif #if defined( PYSVN_HAS_CLIENT_UPDATE3 ) { false, name_depth }, { false, name_depth_is_sticky }, { false, name_allow_unver_obstructions }, #endif { false, NULL } }; FunctionArguments args( "update", args_desc, a_args, a_kws ); args.check(); SvnPool pool( m_context ); apr_array_header_t *targets = targetsFromStringOrList( args.getArg( name_path ), pool ); svn_opt_revision_t revision = args.getRevision( name_revision, svn_opt_revision_head ); #if defined( PYSVN_HAS_CLIENT_UPDATE3 ) svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_unknown, svn_depth_unknown, svn_depth_files ); bool depth_is_sticky = args.getBoolean( name_depth_is_sticky, false ); bool allow_unver_obstructions = args.getBoolean( name_allow_unver_obstructions, false ); #else bool recurse = args.getBoolean( name_recurse, true ); #endif #if defined( PYSVN_HAS_CLIENT_UPDATE2 ) bool ignore_externals = args.getBoolean( name_ignore_externals, false ); #endif apr_array_header_t *result_revs = NULL; try { checkThreadPermission(); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_UPDATE3 ) svn_error_t *error = svn_client_update3 ( &result_revs, targets, &revision, depth, depth_is_sticky, ignore_externals, allow_unver_obstructions, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_UPDATE2 ) svn_error_t *error = svn_client_update2 ( &result_revs, targets, &revision, recurse, ignore_externals, m_context, pool ); #else svn_error_t *error = svn_client_update ( &result_revs, targets, &revision, recurse, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return revnumListToObject( result_revs, pool ); } #if defined( PYSVN_HAS_CLIENT_UPGRADE ) Py::Object pysvn_client::cmd_upgrade( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, NULL } }; FunctionArguments args( "upgrade", args_desc, a_args, a_kws ); args.check(); SvnPool pool( m_context ); std::string type_error_message; try { type_error_message = "expecting string for path keyword arg"; std::string path( args.getUtf8String( name_path ) ); std::string norm_path( svnNormalisedIfPath( path, pool ) ); try { checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_error_t *error = svn_client_upgrade( norm_path.c_str(), m_context, pool ); permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } } catch( Py::TypeError & ) { throw Py::TypeError( type_error_message ); } return Py::None(); } #endif pysvn-1.7.8/Source/pysvn_client_cmd_copy.cpp000644 000771 000771 00000040670 11176410322 021554 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_client_cmd_diff.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_static_strings.hpp" #if defined( PYSVN_HAS_CLIENT_COPY4 ) || defined( PYSVN_HAS_CLIENT_COPY5 ) Py::Object pysvn_client::cmd_copy2( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_sources }, { true, name_dest_url_or_path }, { false, name_copy_as_child }, { false, name_make_parents }, { false, name_revprops }, #if defined( PYSVN_HAS_CLIENT_COPY5 ) { false, name_ignore_externals }, #endif { false, NULL } }; FunctionArguments args( "copy2", args_desc, a_args, a_kws ); args.check(); SvnPool pool( m_context ); pysvn_commit_info_t *commit_info = NULL; std::string type_error_message; try { type_error_message = "expecting list for sources (arg 1)"; Py::List list_all_sources = args.getArg( name_sources ); apr_array_header_t *all_sources = apr_array_make( pool, list_all_sources.length(), sizeof(svn_client_copy_source_t *) ); for( unsigned int index=0; index( apr_palloc( pool, sizeof( svn_opt_revision_t ) ) ); svn_opt_revision_t *peg_revision = reinterpret_cast( apr_palloc( pool, sizeof( svn_opt_revision_t ) ) ); if( tuple_src_rev_pegrev.length() > 3 ) { std::string msg = "copy2() expecting tuple with 2 or 3 values in sources list"; throw Py::AttributeError( msg ); } type_error_message = "expecting string for 1st tuple value in sources list"; Py::String py_src_url_or_path( tuple_src_rev_pegrev[0] ); src_url_or_path = py_src_url_or_path.as_std_string( name_utf8 ); std::string norm_src_url_or_path( svnNormalisedIfPath( src_url_or_path, pool ) ); bool is_url = is_svn_url( norm_src_url_or_path ); if( tuple_src_rev_pegrev.length() >= 2 ) { Py::Object obj( tuple_src_rev_pegrev[1] ); if( pysvn_revision::check( obj ) ) { pysvn_revision *rev = static_cast( obj.ptr() ); *revision = rev->getSvnRevision(); revisionKindCompatibleCheck( is_url, *revision, "sources list 2nd tuple value", "sources list 1st tuple value" ); } else { std::string msg = "copy2() expecting revision for 2nd tuple value in sources list"; throw Py::AttributeError( msg ); } } else { if( is_url ) { revision->kind = svn_opt_revision_head; } else { revision->kind = svn_opt_revision_working; } } if( tuple_src_rev_pegrev.length() >= 3 ) { Py::Object obj( tuple_src_rev_pegrev[2] ); if( pysvn_revision::check( obj ) ) { pysvn_revision *rev = static_cast( obj.ptr() ); *peg_revision = rev->getSvnRevision(); revisionKindCompatibleCheck( is_url, *peg_revision, "sources list 2nd tuple value", "sources list 1st tuple value" ); } else { std::string msg = "copy2() expecting revision for 3rd tuple value in sources list"; throw Py::AttributeError( msg ); } } else { *peg_revision = *revision; } svn_client_copy_source_t *source = reinterpret_cast( apr_palloc( pool, sizeof(*source) ) ); source->path = apr_pstrdup( pool, norm_src_url_or_path.c_str() ); source->revision = revision; source->peg_revision = peg_revision; APR_ARRAY_PUSH( all_sources, svn_client_copy_source_t *) = source; } type_error_message = "expecting string for dest_url_or_path"; Py::String dest_path( args.getUtf8String( name_dest_url_or_path ) ); type_error_message = "expecting boolean for keyword copy_as_child"; bool copy_as_child = args.getBoolean( name_copy_as_child, false ); type_error_message = "expecting boolean for keyword make_parents"; bool make_parents = args.getBoolean( name_make_parents, false ); apr_hash_t *revprops = NULL; if( args.hasArg( name_revprops ) ) { Py::Object py_revprop = args.getArg( name_revprops ); if( !py_revprop.isNone() ) { revprops = hashOfStringsFromDistOfStrings( py_revprop, pool ); } } #if defined( PYSVN_HAS_CLIENT_COPY5 ) type_error_message = "expecting boolean for keyword ignore_externals"; bool ignore_externals = args.getBoolean( name_ignore_externals, false ); #endif try { std::string norm_dest_path( svnNormalisedIfPath( dest_path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_COPY5 ) svn_error_t *error = svn_client_copy5 ( &commit_info, all_sources, norm_dest_path.c_str(), copy_as_child, make_parents, ignore_externals, revprops, m_context, pool ); #else svn_error_t *error = svn_client_copy4 ( &commit_info, all_sources, norm_dest_path.c_str(), copy_as_child, make_parents, revprops, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) { throw SvnException( error ); } } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } } catch( Py::TypeError & ) { throw Py::TypeError( type_error_message ); } return toObject( commit_info, m_commit_info_style ); } #endif Py::Object pysvn_client::cmd_copy( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_src_url_or_path }, { true, name_dest_url_or_path }, { false, name_src_revision }, { false, NULL } }; FunctionArguments args( "copy", args_desc, a_args, a_kws ); args.check(); SvnPool pool( m_context ); pysvn_commit_info_t *commit_info = NULL; std::string type_error_message; try { type_error_message = "expecting string for src_path (arg 1)"; Py::String src_path( args.getUtf8String( name_src_url_or_path ) ); type_error_message = "expecting string for dest_path (arg 2)"; Py::String dest_path( args.getUtf8String( name_dest_url_or_path ) ); type_error_message = "expecting revision for keyword src_revision"; svn_opt_revision_t revision; if( is_svn_url( src_path ) ) revision = args.getRevision( name_src_revision, svn_opt_revision_head ); else revision = args.getRevision( name_src_revision, svn_opt_revision_working ); try { std::string norm_src_path( svnNormalisedIfPath( src_path, pool ) ); std::string norm_dest_path( svnNormalisedIfPath( dest_path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_COPY3 ) // behavior changed svn_error_t *error = svn_client_copy3 ( &commit_info, norm_src_path.c_str(), &revision, norm_dest_path.c_str(), m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_COPY2 ) svn_error_t *error = svn_client_copy2 ( &commit_info, // commit info type changed norm_src_path.c_str(), &revision, norm_dest_path.c_str(), m_context, pool ); #else svn_error_t *error = svn_client_copy ( &commit_info, norm_src_path.c_str(), &revision, norm_dest_path.c_str(), m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } } catch( Py::TypeError & ) { throw Py::TypeError( type_error_message ); } return toObject( commit_info, m_commit_info_style ); } #if defined( PYSVN_HAS_CLIENT_MOVE5 ) Py::Object pysvn_client::cmd_move2( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_sources }, { true, name_dest_url_or_path }, { false, name_force }, { false, name_move_as_child }, { false, name_make_parents }, { false, name_revprops }, { false, NULL } }; FunctionArguments args( "move2", args_desc, a_args, a_kws ); args.check(); SvnPool pool( m_context ); pysvn_commit_info_t *commit_info = NULL; std::string type_error_message; try { type_error_message = "expecting list for sources (arg 1)"; Py::List list_all_sources = args.getArg( name_sources ); apr_array_header_t *all_sources = apr_array_make( pool, list_all_sources.length(), sizeof(const char *) ); for( unsigned int index=0; index causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_static_strings.hpp" class pysvn_apr_file { public: pysvn_apr_file( SvnPool &pool ) : m_pool( pool ) , m_apr_file( NULL ) , m_filename( NULL ) { } ~pysvn_apr_file() { close(); if( m_filename ) svn_error_clear( svn_io_remove_file( m_filename, m_pool ) ); } void open_unique_file( const std::string &tmp_dir ) { #if defined( PYSVN_HAS_IO_OPEN_UNIQUE_FILE3 ) svn_error_t *error = svn_io_open_unique_file3 ( &m_apr_file, &m_filename, tmp_dir.c_str(), svn_io_file_del_none, m_pool, m_pool ); #elif defined( PYSVN_HAS_IO_OPEN_UNIQUE_FILE2 ) svn_error_t *error = svn_io_open_unique_file2 ( &m_apr_file, &m_filename, tmp_dir.c_str(), ".tmp", svn_io_file_del_none, m_pool ); #else svn_error_t *error = svn_io_open_unique_file ( &m_apr_file, &m_filename, tmp_dir.c_str(), ".tmp", false, m_pool ); #endif if( error != NULL ) { throw SvnException( error ); } } void open_tmp_file() { apr_status_t status = apr_file_open( &m_apr_file, m_filename, APR_READ, APR_OS_DEFAULT, m_pool ); if( status ) { std::string msg( "opening file " ); msg += m_filename; throw SvnException( svn_error_create( status, NULL, msg.c_str() ) ); } } void close() { // only close if we have an open file if( m_apr_file == NULL ) { return; } apr_file_t *apr_file = m_apr_file; // prevent closing the file twice m_apr_file = NULL; apr_status_t status = apr_file_close( apr_file ); if( status ) { std::string msg( "closing file " ); msg += m_filename; throw SvnException( svn_error_create( status, NULL, msg.c_str() ) ); } } apr_file_t *file() { return m_apr_file; } private: SvnPool &m_pool; apr_file_t *m_apr_file; const char *m_filename; }; Py::Object pysvn_client::cmd_diff( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_tmp_path }, { true, name_url_or_path }, { false, name_revision1 }, { false, name_url_or_path2 }, { false, name_revision2 }, { false, name_recurse }, { false, name_ignore_ancestry }, { false, name_diff_deleted }, #if defined( PYSVN_HAS_CLIENT_DIFF2 ) { false, name_ignore_content_type }, #endif #if defined( PYSVN_HAS_CLIENT_DIFF3 ) { false, name_header_encoding }, { false, name_diff_options }, #endif #if defined( PYSVN_HAS_CLIENT_DIFF4 ) { false, name_depth }, { false, name_relative_to_dir }, { false, name_changelists }, #endif { false, NULL } }; FunctionArguments args( "diff", args_desc, a_args, a_kws ); args.check(); std::string tmp_path( args.getUtf8String( name_tmp_path ) ); std::string path1( args.getUtf8String( name_url_or_path ) ); svn_opt_revision_t revision1 = args.getRevision( name_revision1, svn_opt_revision_base ); std::string path2( args.getUtf8String( name_url_or_path2, path1 ) ); svn_opt_revision_t revision2 = args.getRevision( name_revision2, svn_opt_revision_working ); #if defined( PYSVN_HAS_CLIENT_DIFF4 ) svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_files ); #else bool recurse = args.getBoolean( name_recurse, true ); #endif bool ignore_ancestry = args.getBoolean( name_ignore_ancestry, true ); bool diff_deleted = args.getBoolean( name_diff_deleted, true ); #if defined( PYSVN_HAS_CLIENT_DIFF2 ) bool ignore_content_type = args.getBoolean( name_ignore_content_type, false ); #endif SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_DIFF3 ) std::string header_encoding( args.getUtf8String( name_header_encoding, empty_string ) ); const char *header_encoding_ptr = APR_LOCALE_CHARSET; if( !header_encoding.empty() ) header_encoding_ptr = header_encoding.c_str(); apr_array_header_t *options = NULL; if( args.hasArg( name_diff_options ) ) { options = arrayOfStringsFromListOfStrings( args.getArg( name_diff_options ), pool ); } else { options = apr_array_make( pool, 0, sizeof( const char * ) ); } #else apr_array_header_t *options = apr_array_make( pool, 0, sizeof( const char * ) ); #endif #if defined( PYSVN_HAS_CLIENT_DIFF4 ) std::string std_relative_to_dir; const char *relative_to_dir = NULL; if( args.hasArg( name_relative_to_dir ) ) { std_relative_to_dir = args.getUtf8String( name_relative_to_dir ); relative_to_dir = std_relative_to_dir.c_str(); } apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } #endif svn_stringbuf_t *stringbuf = NULL; try { std::string norm_tmp_path( svnNormalisedIfPath( tmp_path, pool ) ); std::string norm_path1( svnNormalisedIfPath( path1, pool ) ); std::string norm_path2( svnNormalisedIfPath( path2, pool ) ); checkThreadPermission(); pysvn_apr_file output_file( pool ); pysvn_apr_file error_file( pool ); output_file.open_unique_file( norm_tmp_path ); error_file.open_unique_file( norm_tmp_path ); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_DIFF4 ) svn_error_t *error = svn_client_diff4 ( options, norm_path1.c_str(), &revision1, norm_path2.c_str(), &revision2, relative_to_dir, depth, ignore_ancestry, !diff_deleted, ignore_content_type, header_encoding_ptr, output_file.file(), error_file.file(), changelists, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_DIFF3 ) svn_error_t *error = svn_client_diff3 ( options, norm_path1.c_str(), &revision1, norm_path2.c_str(), &revision2, recurse, ignore_ancestry, !diff_deleted, ignore_content_type, header_encoding_ptr, output_file.file(), error_file.file(), m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_DIFF2 ) svn_error_t *error = svn_client_diff2 ( options, norm_path1.c_str(), &revision1, norm_path2.c_str(), &revision2, recurse, ignore_ancestry, !diff_deleted, ignore_content_type, output_file.file(), error_file.file(), m_context, pool ); #else svn_error_t *error = svn_client_diff ( options, norm_path1.c_str(), &revision1, norm_path2.c_str(), &revision2, recurse, ignore_ancestry, !diff_deleted, output_file.file(), error_file.file(), m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); output_file.close(); output_file.open_tmp_file(); error = svn_stringbuf_from_aprfile( &stringbuf, output_file.file(), pool ); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } // cannot convert to Unicode as we have no idea of the encoding of the bytes return Py::String( stringbuf->data, (int)stringbuf->len ); } #if defined( PYSVN_HAS_CLIENT_DIFF_PEG ) Py::Object pysvn_client::cmd_diff_peg( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_tmp_path }, { true, name_url_or_path }, { false, name_peg_revision }, { false, name_revision_start }, { false, name_revision_end }, { false, name_recurse }, { false, name_ignore_ancestry }, { false, name_diff_deleted }, #if defined( PYSVN_HAS_CLIENT_DIFF_PEG2 ) { false, name_ignore_content_type }, #endif #if defined( PYSVN_HAS_CLIENT_DIFF_PEG3 ) { false, name_header_encoding }, { false, name_diff_options }, #endif #if defined( PYSVN_HAS_CLIENT_DIFF_PEG4 ) { false, name_depth }, { false, name_relative_to_dir }, { false, name_changelists }, #endif { false, NULL } }; FunctionArguments args( "diff_peg", args_desc, a_args, a_kws ); args.check(); std::string tmp_path( args.getUtf8String( name_tmp_path ) ); std::string path( args.getUtf8String( name_url_or_path ) ); svn_opt_revision_t revision_start = args.getRevision( name_revision_start, svn_opt_revision_base ); svn_opt_revision_t revision_end = args.getRevision( name_revision_end, svn_opt_revision_working ); svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, revision_end ); SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_DIFF_PEG4 ) svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_files ); std::string std_relative_to_dir; const char *relative_to_dir = NULL; if( args.hasArg( name_relative_to_dir ) ) { std_relative_to_dir = args.getBytes( name_relative_to_dir ); relative_to_dir = std_relative_to_dir.c_str(); } apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } #else bool recurse = args.getBoolean( name_recurse, true ); #endif bool ignore_ancestry = args.getBoolean( name_ignore_ancestry, true ); bool diff_deleted = args.getBoolean( name_diff_deleted, true ); #if defined( PYSVN_HAS_CLIENT_DIFF_PEG2 ) bool ignore_content_type = args.getBoolean( name_ignore_content_type, false ); #endif #if defined( PYSVN_HAS_CLIENT_DIFF_PEG3 ) std::string header_encoding( args.getUtf8String( name_header_encoding, empty_string ) ); const char *header_encoding_ptr = APR_LOCALE_CHARSET; if( !header_encoding.empty() ) header_encoding_ptr = header_encoding.c_str(); apr_array_header_t *options = NULL; if( args.hasArg( name_diff_options ) ) { options = arrayOfStringsFromListOfStrings( args.getArg( name_diff_options ), pool ); } else { options = apr_array_make( pool, 0, sizeof( const char * ) ); } #else apr_array_header_t *options = apr_array_make( pool, 0, sizeof( const char * ) ); #endif bool is_url = is_svn_url( path ); revisionKindCompatibleCheck( is_url, peg_revision, name_peg_revision, name_url_or_path ); revisionKindCompatibleCheck( is_url, revision_start, name_revision_start, name_url_or_path ); revisionKindCompatibleCheck( is_url, revision_end, name_revision_end, name_url_or_path ); svn_stringbuf_t *stringbuf = NULL; try { std::string norm_tmp_path( svnNormalisedIfPath( tmp_path, pool ) ); std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); pysvn_apr_file output_file( pool ); pysvn_apr_file error_file( pool ); output_file.open_unique_file( norm_tmp_path ); error_file.open_unique_file( norm_tmp_path ); // std::cout << "peg_revision " << peg_revision.kind << " " << peg_revision.value.number << std::endl; // std::cout << "revision_start " << revision_start.kind << " " << revision_start.value.number << std::endl; // std::cout << "revision_end " << revision_end.kind << " " << revision_end.value.number << std::endl; #if defined( PYSVN_HAS_CLIENT_DIFF_PEG4 ) svn_error_t *error = svn_client_diff_peg4 ( options, norm_path.c_str(), &peg_revision, &revision_start, &revision_end, relative_to_dir, depth, ignore_ancestry, !diff_deleted, ignore_content_type, header_encoding_ptr, output_file.file(), error_file.file(), changelists, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_DIFF_PEG3 ) svn_error_t *error = svn_client_diff_peg3 ( options, norm_path.c_str(), &peg_revision, &revision_start, &revision_end, recurse, ignore_ancestry, !diff_deleted, ignore_content_type, header_encoding_ptr, output_file.file(), error_file.file(), m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_DIFF_PEG2 ) svn_error_t *error = svn_client_diff_peg2 ( options, norm_path.c_str(), &peg_revision, &revision_start, &revision_end, recurse, ignore_ancestry, !diff_deleted, ignore_content_type, output_file.file(), error_file.file(), m_context, pool ); #else svn_error_t *error = svn_client_diff_peg ( options, norm_path.c_str(), &peg_revision, &revision_start, &revision_end, recurse, ignore_ancestry, !diff_deleted, output_file.file(), error_file.file(), m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); output_file.close(); output_file.open_tmp_file(); error = svn_stringbuf_from_aprfile( &stringbuf, output_file.file(), pool ); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } // cannot convert to Unicode as we have no idea of the encoding of the bytes return Py::String( stringbuf->data, (int)stringbuf->len ); } #endif #if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE ) class DiffSummarizeBaton { public: DiffSummarizeBaton( PythonAllowThreads *permission, Py::List &diff_list ) : m_permission( permission ) , m_diff_list( diff_list ) {} ~DiffSummarizeBaton() {} PythonAllowThreads *m_permission; DictWrapper *m_wrapper_diff_summary; Py::List &m_diff_list; }; extern "C" { svn_error_t *diff_summarize_c ( const svn_client_diff_summarize_t *diff, void *baton_, apr_pool_t *pool ) { DiffSummarizeBaton *baton = reinterpret_cast( baton_ ); PythonDisallowThreads callback_permission( baton->m_permission ); Py::Dict diff_dict; diff_dict[ *py_name_path ] = Py::String( diff->path, name_utf8 ); diff_dict[ *py_name_summarize_kind ] = toEnumValue( diff->summarize_kind ); diff_dict[ *py_name_prop_changed ] = Py::Int( diff->prop_changed != 0 ); diff_dict[ *py_name_node_kind ] = toEnumValue( diff->node_kind ); baton->m_diff_list.append( baton->m_wrapper_diff_summary->wrapDict( diff_dict ) ); return SVN_NO_ERROR; } } Py::Object pysvn_client::cmd_diff_summarize( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path1 }, { false, name_revision1 }, { false, name_url_or_path2 }, { false, name_revision2 }, { false, name_recurse }, { false, name_ignore_ancestry }, #if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE2 ) { false, name_depth }, { false, name_changelists }, #endif { false, NULL } }; FunctionArguments args( "diff_summarize", args_desc, a_args, a_kws ); args.check(); std::string path1( args.getUtf8String( name_url_or_path1 ) ); svn_opt_revision_t revision1 = args.getRevision( name_revision1, svn_opt_revision_base ); std::string path2( args.getUtf8String( name_url_or_path2, path1 ) ); svn_opt_revision_t revision2 = args.getRevision( name_revision2, svn_opt_revision_working ); SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE2 ) svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_files ); apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } #else bool recurse = args.getBoolean( name_recurse, true ); #endif bool ignore_ancestry = args.getBoolean( name_ignore_ancestry, true ); Py::List diff_list; try { std::string norm_path1( svnNormalisedIfPath( path1, pool ) ); std::string norm_path2( svnNormalisedIfPath( path2, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); DiffSummarizeBaton diff_baton( &permission, diff_list ); diff_baton.m_wrapper_diff_summary = &m_wrapper_diff_summary; #if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE2 ) svn_error_t *error = svn_client_diff_summarize2 ( norm_path1.c_str(), &revision1, norm_path2.c_str(), &revision2, depth, ignore_ancestry, changelists, diff_summarize_c, reinterpret_cast( &diff_baton ), m_context, pool ); #else svn_error_t *error = svn_client_diff_summarize ( norm_path1.c_str(), &revision1, norm_path2.c_str(), &revision2, recurse, ignore_ancestry, diff_summarize_c, reinterpret_cast( &diff_baton ), m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } // cannot convert to Unicode as we have no idea of the encoding of the bytes return diff_list; } Py::Object pysvn_client::cmd_diff_summarize_peg( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, name_peg_revision }, { false, name_revision_start }, { false, name_revision_end }, { false, name_recurse }, { false, name_ignore_ancestry }, #if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE_PEG2 ) { false, name_depth }, { false, name_changelists }, #endif { false, NULL } }; FunctionArguments args( "diff_summarize_peg", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_url_or_path ) ); svn_opt_revision_t revision_start = args.getRevision( name_revision_start, svn_opt_revision_base ); svn_opt_revision_t revision_end = args.getRevision( name_revision_end, svn_opt_revision_working ); svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, revision_end ); SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE_PEG2 ) svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_files ); apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } #else bool recurse = args.getBoolean( name_recurse, true ); #endif bool ignore_ancestry = args.getBoolean( name_ignore_ancestry, true ); bool is_url = is_svn_url( path ); revisionKindCompatibleCheck( is_url, peg_revision, name_peg_revision, name_url_or_path ); revisionKindCompatibleCheck( is_url, revision_start, name_revision_start, name_url_or_path ); revisionKindCompatibleCheck( is_url, revision_end, name_revision_end, name_url_or_path ); Py::List diff_list; try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); DiffSummarizeBaton diff_baton( &permission, diff_list ); diff_baton.m_wrapper_diff_summary = &m_wrapper_diff_summary; #if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE_PEG2 ) svn_error_t *error = svn_client_diff_summarize_peg2 ( norm_path.c_str(), &peg_revision, &revision_start, &revision_end, depth, ignore_ancestry, changelists, diff_summarize_c, reinterpret_cast( &diff_baton ), m_context, pool ); #else svn_error_t *error = svn_client_diff_summarize_peg ( norm_path.c_str(), &peg_revision, &revision_start, &revision_end, recurse, ignore_ancestry, diff_summarize_c, reinterpret_cast( &diff_baton ), m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } // cannot convert to Unicode as we have no idea of the encoding of the bytes return diff_list; } #endif pysvn-1.7.8/Source/pysvn_client_cmd_export.cpp000644 000771 000771 00000021226 12075600054 022121 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_client_cmd_diff.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_static_strings.hpp" static const char *g_utf_8 = "utf-8"; Py::Object pysvn_client::cmd_export( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_src_url_or_path }, { true, name_dest_path }, { false, name_force }, { false, name_revision }, #if defined( PYSVN_HAS_CLIENT_EXPORT2 ) { false, name_native_eol }, #endif #if defined( PYSVN_HAS_CLIENT_EXPORT3 ) { false, name_ignore_externals }, { false, name_recurse }, { false, name_peg_revision }, #endif #if defined( PYSVN_HAS_CLIENT_EXPORT4 ) { false, name_depth }, #endif #if defined( PYSVN_HAS_CLIENT_EXPORT5 ) { false, name_ignore_keywords }, #endif { false, NULL } }; FunctionArguments args( "export", args_desc, a_args, a_kws ); args.check(); std::string src_path( args.getUtf8String( name_src_url_or_path ) ); std::string dest_path( args.getUtf8String( name_dest_path ) ); bool is_url = is_svn_url( src_path ); bool force = args.getBoolean( name_force, false ); svn_opt_revision_t revision; if( is_url ) revision = args.getRevision( name_revision, svn_opt_revision_head ); else revision = args.getRevision( name_revision, svn_opt_revision_working ); #if defined( PYSVN_HAS_CLIENT_EXPORT2 ) const char *native_eol = NULL; if( args.hasArg( name_native_eol ) ) { Py::Object native_eol_obj = args.getArg( name_native_eol ); if( native_eol_obj != Py::None() ) { Py::String eol_py_str( native_eol_obj ); std::string eol_str = eol_py_str.as_std_string( g_utf_8 ); if( eol_str == "CR" ) native_eol = "CR"; else if( eol_str == "CRLF" ) native_eol = "CRLF"; else if( eol_str == "LF" ) native_eol = "LF"; else throw Py::ValueError( "native_eol must be one of None, \"LF\", \"CRLF\" or \"CR\"" ); } } #endif #if defined( PYSVN_HAS_CLIENT_EXPORT3 ) #if defined( PYSVN_HAS_CLIENT_EXPORT4 ) svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_files ); #else bool recurse = args.getBoolean( name_recurse, true ); #endif bool ignore_externals = args.getBoolean( name_ignore_externals, false ); svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, revision ); revisionKindCompatibleCheck( is_url, peg_revision, name_peg_revision, name_url_or_path ); #endif #if defined( PYSVN_HAS_CLIENT_EXPORT5 ) bool ignore_keywords = args.getBoolean( name_ignore_keywords, false ); #endif revisionKindCompatibleCheck( is_url, revision, name_revision, name_url_or_path ); svn_revnum_t revnum = 0; SvnPool pool( m_context ); try { std::string norm_src_path( svnNormalisedIfPath( src_path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_EXPORT5 ) svn_error_t * error = svn_client_export5 ( &revnum, norm_src_path.c_str(), dest_path.c_str(), &peg_revision, &revision, force, ignore_externals, ignore_keywords, depth, native_eol, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_EXPORT4 ) svn_error_t * error = svn_client_export4 ( &revnum, norm_src_path.c_str(), dest_path.c_str(), &peg_revision, &revision, force, ignore_externals, depth, native_eol, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_EXPORT3 ) svn_error_t * error = svn_client_export3 ( &revnum, norm_src_path.c_str(), dest_path.c_str(), &peg_revision, &revision, force, ignore_externals, recurse, native_eol, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_EXPORT2 ) svn_error_t * error = svn_client_export2 ( &revnum, norm_src_path.c_str(), dest_path.c_str(), &revision, force, native_eol, m_context, pool ); #else svn_error_t * error = svn_client_export ( &revnum, norm_src_path.c_str(), dest_path.c_str(), &revision, force, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, revnum ) ); } Py::Object pysvn_client::cmd_import( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { true, name_url }, { true, name_log_message }, { false, name_recurse }, #if defined( PYSVN_HAS_CLIENT_IMPORT2 ) { false, name_ignore }, #endif #if defined( PYSVN_HAS_CLIENT_IMPORT3 ) { false, name_depth }, { false, name_ignore_unknown_node_types }, { false, name_revprops }, #endif { false, NULL } }; FunctionArguments args( "import_", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_path ) ); std::string url( args.getUtf8String( name_url ) ); std::string message( args.getUtf8String( name_log_message ) ); SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_IMPORT3 ) svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_files ); bool ignore_unknown_node_types = args.getBoolean( name_ignore_unknown_node_types, false ); apr_hash_t *revprops = NULL; if( args.hasArg( name_revprops ) ) { Py::Object py_revprop = args.getArg( name_revprops ); if( !py_revprop.isNone() ) { revprops = hashOfStringsFromDistOfStrings( py_revprop, pool ); } } #else bool recurse = args.getBoolean( name_recurse, true ); #endif #if defined( PYSVN_HAS_CLIENT_IMPORT2 ) bool ignore = args.getBoolean( name_ignore, false ); #endif pysvn_commit_info_t *commit_info = NULL; try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); m_context.setLogMessage( message.c_str() ); #if defined( PYSVN_HAS_CLIENT_IMPORT3 ) svn_error_t *error = svn_client_import3 ( &commit_info, // changed type norm_path.c_str(), url.c_str(), depth, !ignore, ignore_unknown_node_types, revprops, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_IMPORT2 ) svn_error_t *error = svn_client_import2 ( &commit_info, // changed type norm_path.c_str(), url.c_str(), !recurse, // non_recursive !ignore, m_context, pool ); #else svn_error_t *error = svn_client_import ( &commit_info, norm_path.c_str(), url.c_str(), !recurse, // non_recursive m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return toObject( commit_info, m_commit_info_style ); } pysvn-1.7.8/Source/pysvn_client_cmd_info.cpp000644 000771 000771 00000121525 12136435572 021547 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_client_cmd_info.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_svnenv.hpp" #include "svn_path.h" #include "svn_config.h" #include "svn_sorts.h" #include "pysvn_static_strings.hpp" static const char *g_utf_8 = "utf-8"; #if defined( PYSVN_HAS_CLIENT_ANNOTATE4 ) class AnnotatedLineInfo { public: AnnotatedLineInfo ( apr_int64_t line_no, svn_revnum_t revision, const char *author, const char *date, svn_revnum_t merged_revision, const char *merged_author, const char *merged_date, const char *merged_path, const char *line ) : m_line_no( line_no ) , m_revision( revision ) , m_author() , m_date() , m_merged_revision( merged_revision) , m_merged_author() , m_merged_date() , m_merged_path() , m_line() { if( author != NULL ) m_author = author; if( date != NULL ) m_date = date; if( merged_author != NULL ) m_merged_author = merged_author; if( merged_date != NULL ) m_merged_date = merged_date; if( merged_path != NULL ) m_merged_path = merged_path; if( line != NULL ) m_line = line; } ~AnnotatedLineInfo() { } AnnotatedLineInfo( const AnnotatedLineInfo &other ) : m_line_no( other.m_line_no ) , m_revision( other.m_revision ) , m_author( other.m_author ) , m_date( other.m_date ) , m_merged_revision( other.m_merged_revision ) , m_merged_author( other.m_merged_author ) , m_merged_date( other.m_merged_date ) , m_merged_path( other.m_merged_path ) , m_line( other.m_line ) { } apr_int64_t m_line_no; svn_revnum_t m_revision; std::string m_author; std::string m_date; svn_revnum_t m_merged_revision; std::string m_merged_author; std::string m_merged_date; std::string m_merged_path; std::string m_line; }; static svn_error_t *annotate_receiver ( void *baton, apr_int64_t line_no, svn_revnum_t revision, const char *author, const char *date, svn_revnum_t merged_revision, const char *merged_author, const char *merged_date, const char *merged_path, const char *line, apr_pool_t *pool ) { // There are cases when the author has been passed as NULL // protect against NULL passed for any of the strings if( author == NULL ) author = ""; if( date == NULL ) date = ""; if( merged_author == NULL ) merged_author = ""; if( merged_date == NULL ) merged_date = ""; if( merged_path == NULL ) merged_path = ""; if( line == NULL ) line = ""; std::list *entries = (std::list *)baton; entries->push_back( AnnotatedLineInfo( line_no, revision, author, date, merged_revision, merged_author, merged_date, merged_path, line ) ); return NULL; } #else class AnnotatedLineInfo { public: AnnotatedLineInfo ( apr_int64_t line_no, svn_revnum_t revision, const char *author, const char *date, const char *line ) : m_line_no( line_no ) , m_revision( revision ) , m_author( author ) , m_date( date ) , m_line( line ) { } ~AnnotatedLineInfo() { } AnnotatedLineInfo( const AnnotatedLineInfo &other ) : m_line_no( other.m_line_no ) , m_revision( other.m_revision ) , m_author( other.m_author ) , m_date( other.m_date ) , m_line( other.m_line ) { } apr_int64_t m_line_no; svn_revnum_t m_revision; std::string m_author; std::string m_date; std::string m_line; }; static svn_error_t *annotate_receiver ( void *baton, apr_int64_t line_no, svn_revnum_t revision, const char *author, const char *date, const char *line, apr_pool_t *pool ) { // There are cases when the author has been passed as NULL // protect against NULL passed for any of the strings if( author == NULL ) author = ""; if( date == NULL ) date = ""; if( line == NULL ) line = ""; std::list *entries = (std::list *)baton; entries->push_back( AnnotatedLineInfo( line_no, revision, author, date, line ) ); return NULL; } #endif Py::Object pysvn_client::cmd_annotate( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, name_revision_start }, { false, name_revision_end }, #if defined( PYSVN_HAS_CLIENT_ANNOTATE2 ) { false, name_peg_revision }, #endif #if defined( PYSVN_HAS_CLIENT_ANNOTATE3 ) { false, name_ignore_space }, { false, name_ignore_eol_style }, { false, name_ignore_mime_type }, #endif #if defined( PYSVN_HAS_CLIENT_ANNOTATE4 ) { false, name_include_merged_revisions }, #endif { false, NULL } }; FunctionArguments args( "annotate", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_url_or_path, empty_string ) ); svn_opt_revision_t revision_start = args.getRevision( name_revision_start, svn_opt_revision_number ); svn_opt_revision_t revision_end = args.getRevision( name_revision_end, svn_opt_revision_head ); #if defined( PYSVN_HAS_CLIENT_ANNOTATE2 ) svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, revision_end ); #endif #if defined( PYSVN_HAS_CLIENT_ANNOTATE3 ) svn_diff_file_ignore_space_t ignore_space = svn_diff_file_ignore_space_none; if( args.hasArg( name_ignore_space ) ) { Py::ExtensionObject< pysvn_enum_value > py_ignore_space( args.getArg( name_ignore_space ) ); ignore_space = svn_diff_file_ignore_space_t( py_ignore_space.extensionObject()->m_value ); } svn_boolean_t ignore_eol_style = args.getBoolean( name_ignore_eol_style, false ); svn_boolean_t ignore_mime_type = args.getBoolean( name_ignore_mime_type, false ); #endif #if defined( PYSVN_HAS_CLIENT_ANNOTATE4 ) svn_boolean_t include_merged_revisions = args.getBoolean( name_include_merged_revisions, false ); #endif SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_ANNOTATE3 ) svn_diff_file_options_t *diff_options = svn_diff_file_options_create( pool ); diff_options->ignore_space = ignore_space; diff_options->ignore_eol_style = ignore_eol_style; #endif bool is_url = is_svn_url( path ); #if defined( PYSVN_HAS_CLIENT_ANNOTATE2 ) revisionKindCompatibleCheck( is_url, peg_revision, name_peg_revision, name_url_or_path ); #endif revisionKindCompatibleCheck( is_url, revision_start, name_revision_start, name_url_or_path ); revisionKindCompatibleCheck( is_url, revision_end, name_revision_end, name_url_or_path ); std::list all_entries; try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_ANNOTATE4 ) svn_error_t *error = svn_client_blame4 ( norm_path.c_str(), &peg_revision, &revision_start, &revision_end, diff_options, ignore_mime_type, include_merged_revisions, annotate_receiver, &all_entries, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_ANNOTATE3 ) svn_error_t *error = svn_client_blame3 ( norm_path.c_str(), &peg_revision, &revision_start, &revision_end, diff_options, ignore_mime_type, annotate_receiver, &all_entries, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_ANNOTATE2 ) svn_error_t *error = svn_client_blame2 ( norm_path.c_str(), &peg_revision, &revision_start, &revision_end, annotate_receiver, &all_entries, m_context, pool ); #else svn_error_t *error = svn_client_blame ( norm_path.c_str(), &revision_start, &revision_end, annotate_receiver, &all_entries, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) { throw SvnException( error ); } } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } // convert the entries into python objects Py::List entries_list; std::list::const_iterator entry_it = all_entries.begin(); while( entry_it != all_entries.end() ) { const AnnotatedLineInfo &entry = *entry_it; ++entry_it; Py::Dict entry_dict; entry_dict[name_author] = Py::String( entry.m_author, name_utf8 ); entry_dict[name_date] = Py::String( entry.m_date ); entry_dict[name_line] = Py::String( entry.m_line ); entry_dict[name_number] = Py::Int( long( entry.m_line_no ) ); entry_dict[name_revision] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, entry.m_revision ) ); entries_list.append( entry_dict ); } return entries_list; } Py::Object pysvn_client::cmd_info( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, NULL } }; FunctionArguments args( "info", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_path ) ); SvnPool pool( m_context ); const svn_wc_entry_t *entry = NULL; try { checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_wc_adm_access_t *adm_access = NULL; #if defined( PYSVN_HAS_WC_ADM_PROBE_OPEN3 ) const char *c_norm_path = svn_dirent_internal_style( path.c_str(), pool ); std::string norm_path( c_norm_path ); svn_error_t *error = svn_wc_adm_probe_open3( &adm_access, NULL, norm_path.c_str(), false, 0, NULL, NULL, pool ); #else std::string norm_path( svnNormalisedPath( path, pool ) ); svn_error_t *error = svn_wc_adm_probe_open( &adm_access, NULL, norm_path.c_str(), false, false, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); permission.allowOtherThreads(); error = svn_wc_entry( &entry, norm_path.c_str(), adm_access, false, pool ); permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); return Py::None(); // needed to remove warning about return value missing } if( entry == NULL ) return Py::None(); return toObject( *entry, pool, m_wrapper_entry ); } #if defined( PYSVN_HAS_CLIENT_INFO ) class InfoReceiveBaton { public: InfoReceiveBaton ( PythonAllowThreads *permission, Py::List &info_list, const DictWrapper &wrapper_info, const DictWrapper &wrapper_lock, const DictWrapper &wrapper_wc_info ) : m_permission( permission ) , m_info_list( info_list ) , m_wrapper_info( wrapper_info ) , m_wrapper_lock( wrapper_lock ) , m_wrapper_wc_info( wrapper_wc_info ) {} ~InfoReceiveBaton() {} PythonAllowThreads *m_permission; Py::List &m_info_list; const DictWrapper &m_wrapper_info; const DictWrapper &m_wrapper_lock; const DictWrapper &m_wrapper_wc_info; }; extern "C" { static svn_error_t *info_receiver_c( void *baton_, const char *path, const svn_info_t *info, apr_pool_t *pool ) { InfoReceiveBaton *baton = reinterpret_cast( baton_ ); PythonDisallowThreads callback_permission( baton->m_permission ); if( path != NULL ) { std::string std_path( path ); if( std_path.empty() ) { std_path = "."; } Py::String py_path( std_path ); Py::Tuple py_pair( 2 ); py_pair[0] = py_path; py_pair[1] = toObject( *info, baton->m_wrapper_info, baton->m_wrapper_lock, baton->m_wrapper_wc_info ); baton->m_info_list.append( py_pair ); } return SVN_NO_ERROR; } } Py::Object pysvn_client::cmd_info2( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, name_revision }, { false, name_peg_revision}, { false, name_recurse }, #if defined( PYSVN_HAS_CLIENT_INFO2 ) { false, name_depth }, { false, name_changelists }, #endif { false, NULL } }; FunctionArguments args( "info2", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_url_or_path ) ); svn_opt_revision_kind kind = svn_opt_revision_unspecified; if( is_svn_url( path ) ) kind = svn_opt_revision_head; svn_opt_revision_t revision = args.getRevision( name_revision, kind ); svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, revision ); SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_INFO2 ) apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_empty ); #else bool recurse = args.getBoolean( name_recurse, true ); #endif bool is_url = is_svn_url( path ); revisionKindCompatibleCheck( is_url, peg_revision, name_peg_revision, name_url_or_path ); revisionKindCompatibleCheck( is_url, revision, name_revision, name_url_or_path ); Py::List info_list; try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); InfoReceiveBaton info_baton( &permission, info_list, m_wrapper_info, m_wrapper_lock, m_wrapper_wc_info ); #if defined( PYSVN_HAS_CLIENT_INFO2 ) svn_error_t *error = svn_client_info2 ( norm_path.c_str(), &peg_revision, &revision, info_receiver_c, reinterpret_cast( &info_baton ), depth, changelists, m_context, pool ); #else svn_error_t *error = svn_client_info ( norm_path.c_str(), &peg_revision, &revision, info_receiver_c, reinterpret_cast( &info_baton ), recurse, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return info_list; } #endif #if defined( PYSVN_HAS_CLIENT_LOG4 ) class Log4Baton { public: Log4Baton( PythonAllowThreads *permission, SvnPool &pool, Py::List &log_list ) : m_permission( permission ) , m_pool( pool ) , m_now( apr_time_now() ) , m_wrapper_log( NULL ) , m_wrapper_log_changed_path( NULL ) , m_log_list( log_list ) , m_has_children( false ) {} ~Log4Baton() {} PythonAllowThreads *m_permission; SvnPool &m_pool; apr_time_t m_now; DictWrapper *m_wrapper_log; DictWrapper *m_wrapper_log_changed_path; Py::List &m_log_list; bool m_has_children; }; static svn_error_t *log4Receiver ( void *baton_, svn_log_entry_t *log_entry, apr_pool_t *pool ) { Log4Baton *baton = reinterpret_cast( baton_ ); if( log_entry->revision == 0 ) { // skip this blank entry // as the svn log command does return NULL; } PythonDisallowThreads callback_permission( baton->m_permission ); Py::Dict entry_dict; Py::Object revprops; if( log_entry->revprops == NULL ) { revprops = Py::None(); } else { revprops = propsToObject( log_entry->revprops, baton->m_pool ); Py::Dict revprops_dict; revprops_dict = revprops; if( revprops_dict.hasKey( "svn:date" ) ) { Py::String date( revprops_dict[ "svn:date" ] ); Py::Object int_date = toObject( convertStringToTime( date.as_std_string( g_utf_8 ), baton->m_now, baton->m_pool ) ); revprops_dict[ "svn:date" ] = int_date; entry_dict[ name_date ] = int_date; } if( revprops_dict.hasKey( "svn:author" ) ) { entry_dict[ name_author ] = revprops_dict[ "svn:author" ]; } if( revprops_dict.hasKey( "svn:log" ) ) { Py::String message( revprops_dict[ "svn:log" ] ); revprops_dict[ "svn:log" ] = message; entry_dict[ name_message ] = message; } } entry_dict[ name_revprops ] = revprops; entry_dict[ name_revision ] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, log_entry->revision ) ); Py::List changed_paths_list; #if defined( PYSVN_HAS_CLIENT_LOG5 ) if( log_entry->changed_paths2 != NULL ) { for( apr_hash_index_t *hi = apr_hash_first( pool, log_entry->changed_paths2 ); hi != NULL; hi = apr_hash_next( hi ) ) { Py::Dict changed_entry_dict; char *path = NULL; void *val = NULL; apr_hash_this( hi, (const void **) &path, NULL, &val ); svn_log_changed_path_t *log_item = reinterpret_cast (val); changed_entry_dict[ name_path ] = Py::String( path ); char action[2]; action[0] = log_item->action; action[1] = 0; changed_entry_dict[ name_action ] = Py::String( action ); changed_entry_dict[ name_copyfrom_path ] = utf8_string_or_none( log_item->copyfrom_path ); if( SVN_IS_VALID_REVNUM( log_item->copyfrom_rev ) ) changed_entry_dict[ name_copyfrom_revision ] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, log_item->copyfrom_rev ) ); else changed_entry_dict[ name_copyfrom_revision ] = Py::None(); changed_paths_list.append( baton->m_wrapper_log_changed_path->wrapDict( changed_entry_dict ) ); } } #else if( log_entry->changed_paths != NULL ) { for( apr_hash_index_t *hi = apr_hash_first( pool, log_entry->changed_paths ); hi != NULL; hi = apr_hash_next( hi ) ) { Py::Dict changed_entry_dict; char *path = NULL; void *val = NULL; apr_hash_this( hi, (const void **) &path, NULL, &val ); svn_log_changed_path_t *log_item = reinterpret_cast (val); changed_entry_dict[ name_path ] = Py::String( path ); char action[2]; action[0] = log_item->action; action[1] = 0; changed_entry_dict[ name_action ] = Py::String( action ); changed_entry_dict[ name_copyfrom_path ] = utf8_string_or_none( log_item->copyfrom_path ); if( SVN_IS_VALID_REVNUM( log_item->copyfrom_rev ) ) changed_entry_dict[ name_copyfrom_revision ] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, log_item->copyfrom_rev ) ); else changed_entry_dict[ name_copyfrom_revision ] = Py::None(); changed_paths_list.append( baton->m_wrapper_log_changed_path->wrapDict( changed_entry_dict ) ); } } #endif entry_dict[ name_changed_paths ] = changed_paths_list; entry_dict[ "has_children" ] = Py::Int( log_entry->has_children != 0 ? 1 : 0 ); baton->m_log_list.append( baton->m_wrapper_log->wrapDict( entry_dict ) ); return NULL; } // PYSVN_HAS_CLIENT_LOG4 version Py::Object pysvn_client::cmd_log( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, name_revision_start }, { false, name_revision_end }, { false, name_discover_changed_paths }, { false, name_strict_node_history }, { false, name_limit }, { false, name_peg_revision }, { false, name_include_merged_revisions }, { false, name_revprops }, { false, NULL } }; FunctionArguments args( "log", args_desc, a_args, a_kws ); args.check(); SvnPool pool( m_context ); svn_opt_revision_t revision_start = args.getRevision( name_revision_start, svn_opt_revision_head ); svn_opt_revision_t revision_end = args.getRevision( name_revision_end, svn_opt_revision_number ); bool discover_changed_paths = args.getBoolean( name_discover_changed_paths, false ); bool strict_node_history = args.getBoolean( name_strict_node_history, true ); int limit = args.getInteger( name_limit, 0 ); svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, svn_opt_revision_unspecified ); svn_boolean_t include_merged_revisions = args.getBoolean( name_include_merged_revisions, false ); apr_array_header_t *revprops = NULL; if( args.hasArg( name_revprops ) ) { Py::Object py_revprop = args.getArg( name_revprops ); if( !py_revprop.isNone() ) { revprops = arrayOfStringsFromListOfStrings( py_revprop, pool ); } } Py::Object url_or_path_obj = args.getArg( name_url_or_path ); Py::List url_or_path_list; if( url_or_path_obj.isList() ) { url_or_path_list = url_or_path_obj; } else { Py::List py_list; py_list.append( url_or_path_obj ); url_or_path_list = py_list; } for( size_t i=0; i( apr_palloc( pool, sizeof(*range) ) ); range->start = revision_start; range->end = revision_end; APR_ARRAY_PUSH( revision_ranges, svn_opt_revision_range_t * ) = range; svn_error_t *error = svn_client_log5 ( targets, &peg_revision, revision_ranges, limit, discover_changed_paths, strict_node_history, include_merged_revisions, revprops, log4Receiver, reinterpret_cast( &baton ), m_context, pool ); #else svn_error_t *error = svn_client_log4 ( targets, &peg_revision, &revision_start, &revision_end, limit, discover_changed_paths, strict_node_history, include_merged_revisions, revprops, log4Receiver, reinterpret_cast( &baton ), m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return log_list; } #else class LogChangePathInfo { public: LogChangePathInfo( const char *path, svn_log_changed_path_t *info ) : m_path( path ) , m_action( info->action ) , m_copy_from_path( info->copyfrom_path != NULL ? info->copyfrom_path : "" ) , m_copy_from_revision( info->copyfrom_rev ) { } LogChangePathInfo( const LogChangePathInfo &other ) : m_path( other.m_path ) , m_action( other.m_action ) , m_copy_from_path( other.m_copy_from_path ) , m_copy_from_revision( other.m_copy_from_revision ) { } std::string m_path; char m_action; std::string m_copy_from_path; svn_revnum_t m_copy_from_revision; }; class LogEntryInfo { public: LogEntryInfo ( svn_revnum_t revision, const char *author, const char *date, const char *message ) : m_revision( revision ) , m_author( author ) , m_date( date ) , m_message( message ) , m_changed_paths() { } ~LogEntryInfo() { } LogEntryInfo( const LogEntryInfo &other ) : m_revision( other.m_revision ) , m_author( other.m_author ) , m_date( other.m_date ) , m_message( other.m_message ) , m_changed_paths( other.m_changed_paths ) { } svn_revnum_t m_revision; std::string m_author; std::string m_date; std::string m_message; std::list m_changed_paths; }; static svn_error_t *logReceiver ( void *baton, apr_hash_t *changedPaths, svn_revnum_t rev, const char *author, const char *date, const char *msg, apr_pool_t *pool ) { if( rev == 0 ) { // skip this blank entry // as the svn log command does return NULL; } std::list *entries = (std::list *)baton; if( author == NULL ) author = ""; if( date == NULL ) date = ""; if( msg == NULL ) msg = ""; entries->push_back( LogEntryInfo( rev, author, date, msg ) ); if( changedPaths != NULL ) { LogEntryInfo &entry = entries->back(); for( apr_hash_index_t *hi = apr_hash_first( pool, changedPaths ); hi != NULL; hi = apr_hash_next( hi ) ) { char *path = NULL; void *val = NULL; apr_hash_this( hi, (const void **) &path, NULL, &val ); svn_log_changed_path_t *log_item = reinterpret_cast (val); entry.m_changed_paths.push_back( LogChangePathInfo( path, log_item ) ); } } return NULL; } // PYSVN_HAS_CLIENT_LOG, PYSVN_HAS_CLIENT_LOG2, PYSVN_HAS_CLIENT_LOG3 version Py::Object pysvn_client::cmd_log( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, name_revision_start }, { false, name_revision_end }, { false, name_discover_changed_paths }, { false, name_strict_node_history }, #if defined( PYSVN_HAS_CLIENT_LOG2 ) || defined( PYSVN_HAS_CLIENT_LOG3 ) { false, name_limit }, #endif #if defined( PYSVN_HAS_CLIENT_LOG3 ) { false, name_peg_revision }, #endif #if defined( PYSVN_HAS_CLIENT_LOG4 ) { false, name_include_merged_revisions }, { false, name_revprops }, #endif { false, NULL } }; FunctionArguments args( "log", args_desc, a_args, a_kws ); args.check(); svn_opt_revision_t revision_start = args.getRevision( name_revision_start, svn_opt_revision_head ); svn_opt_revision_t revision_end = args.getRevision( name_revision_end, svn_opt_revision_number ); bool discover_changed_paths = args.getBoolean( name_discover_changed_paths, false ); bool strict_node_history = args.getBoolean( name_strict_node_history, true ); int limit = args.getInteger( name_limit, 0 ); #if defined( PYSVN_HAS_CLIENT_LOG3 ) svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, svn_opt_revision_unspecified ); #endif #if defined( PYSVN_HAS_CLIENT_LOG4 ) svn_boolean_t include_merged_revisions = args.getBoolean( name_include_merged_revisions, false ); apr_array_header_t *revprops = NULL; Py::Object py_revprop = args.getArg( name_revprops ); if( py_revprop is not None ) { revprops = arrayOfStringsFromListOfStrings( py_revprop. pool ); } #endif Py::Object url_or_path_obj = args.getArg( name_url_or_path ); Py::List url_or_path_list; if( url_or_path_obj.isList() ) { url_or_path_list = url_or_path_obj; } else { Py::List py_list; py_list.append( url_or_path_obj ); url_or_path_list = py_list; } for( size_t i=0; i all_entries; #endif try { checkThreadPermission(); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_LOG4 ) svn_error_t *error = svn_client_log4 ( targets, &peg_revision, &revision_start, &revision_end, limit, discover_changed_paths, strict_node_history, include_merged_revisions, revprops, logReceiver, &all_entries, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_LOG3 ) svn_error_t *error = svn_client_log3 ( targets, &peg_revision, &revision_start, &revision_end, limit, discover_changed_paths, strict_node_history, logReceiver, &all_entries, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_LOG2 ) svn_error_t *error = svn_client_log2 ( targets, &revision_start, &revision_end, limit, discover_changed_paths, strict_node_history, logReceiver, &all_entries, m_context, pool ); #else svn_error_t *error = svn_client_log ( targets, &revision_start, &revision_end, discover_changed_paths, strict_node_history, logReceiver, &all_entries, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } apr_time_t now = apr_time_now(); // convert the entries into python objects Py::List entries_list; std::list::const_iterator entry_it = all_entries.begin(); while( entry_it != all_entries.end() ) { const LogEntryInfo &entry = *entry_it; ++entry_it; Py::Dict entry_dict; entry_dict[name_author] = Py::String( entry.m_author, name_utf8 ); entry_dict[name_date] = toObject( convertStringToTime( entry.m_date, now, pool ) ); entry_dict[name_message] = Py::String( entry.m_message, name_utf8 ); entry_dict[name_revision] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, entry.m_revision ) ); Py::List changed_paths_list; std::list::const_iterator changed_paths_it = entry.m_changed_paths.begin(); while( changed_paths_it != entry.m_changed_paths.end() ) { const LogChangePathInfo &change_entry = *changed_paths_it; ++changed_paths_it; Py::Dict changed_entry_dict; changed_entry_dict[name_path] = Py::String( change_entry.m_path, name_utf8 ); changed_entry_dict[name_action] = Py::String( &change_entry.m_action, 1 ); changed_entry_dict[name_copyfrom_path] = utf8_string_or_none( change_entry.m_copy_from_path ); if( SVN_IS_VALID_REVNUM( change_entry.m_copy_from_revision ) ) changed_entry_dict[name_copyfrom_revision] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, change_entry.m_copy_from_revision ) ); else changed_entry_dict[name_copyfrom_revision] = Py::None(); changed_paths_list.append( m_wrapper_log_changed_path.wrapDict( changed_entry_dict ) ); } entry_dict[name_changed_paths] = changed_paths_list; entries_list.append( m_wrapper_log.wrapDict( entry_dict ) ); } return entries_list; } #endif struct StatusEntriesBaton { apr_pool_t* pool; apr_hash_t* hash; }; #if defined( PYSVN_HAS_CLIENT_STATUS4 ) static svn_error_t *StatusEntriesFunc ( void *baton, const char *path, svn_wc_status2_t *status, apr_pool_t *pool ) { svn_wc_status2_t *stat; StatusEntriesBaton *seb = reinterpret_cast( baton ); path = apr_pstrdup( seb->pool, path ); stat = svn_wc_dup_status2( status, seb->pool ); apr_hash_set( seb->hash, path, APR_HASH_KEY_STRING, stat ); return SVN_NO_ERROR; } #elif defined( PYSVN_HAS_CLIENT_STATUS2 ) static void StatusEntriesFunc ( void *baton, const char *path, svn_wc_status2_t *status ) { svn_wc_status2_t *stat; StatusEntriesBaton *seb = reinterpret_cast( baton ); path = apr_pstrdup( seb->pool, path ); stat = svn_wc_dup_status2( status, seb->pool ); apr_hash_set( seb->hash, path, APR_HASH_KEY_STRING, stat ); } #else static void StatusEntriesFunc ( void *baton, const char *path, svn_wc_status_t *status ) { svn_wc_status_t *stat; StatusEntriesBaton *seb = reinterpret_cast( baton ); path = apr_pstrdup( seb->pool, path ); stat = svn_wc_dup_status( status, seb->pool ); apr_hash_set( seb->hash, path, APR_HASH_KEY_STRING, stat ); } #endif Py::Object pysvn_client::cmd_status( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, name_recurse }, { false, name_get_all }, { false, name_update }, { false, name_ignore }, #if defined( PYSVN_HAS_CLIENT_STATUS2 ) { false, name_ignore_externals }, #endif #if defined( PYSVN_HAS_CLIENT_STATUS3 ) { false, name_depth }, { false, name_changelists }, #endif { false, NULL } }; FunctionArguments args( "status", args_desc, a_args, a_kws ); args.check(); Py::String path( args.getUtf8String( name_path ) ); SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_STATUS3 ) apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_immediates ); #else bool recurse = args.getBoolean( name_recurse, true ); #endif bool get_all = args.getBoolean( name_get_all, true ); bool update = args.getBoolean( name_update, false ); bool ignore = args.getBoolean( name_ignore, false ); #if defined( PYSVN_HAS_CLIENT_STATUS2 ) bool ignore_externals = args.getBoolean( name_ignore_externals, false ); #endif apr_hash_t *status_hash = NULL; Py::List entries_list; try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_revnum_t revnum; svn_opt_revision_t rev = { svn_opt_revision_head, {0} }; StatusEntriesBaton baton; status_hash = apr_hash_make( pool ); baton.hash = status_hash; baton.pool = pool; #if defined( PYSVN_HAS_CLIENT_STATUS4 ) svn_error_t *error = svn_client_status4 ( &revnum, // revnum norm_path.c_str(), // path &rev, StatusEntriesFunc, // status func &baton, // status baton depth, get_all, update, !ignore, ignore_externals, changelists, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_STATUS3 ) svn_error_t *error = svn_client_status3 ( &revnum, // revnum norm_path.c_str(), // path &rev, StatusEntriesFunc, // status func &baton, // status baton depth, get_all, update, !ignore, ignore_externals, changelists, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_STATUS2 ) svn_error_t *error = svn_client_status2 ( &revnum, // revnum norm_path.c_str(), // path &rev, StatusEntriesFunc, // status func &baton, // status baton recurse, get_all, update, !ignore, ignore_externals, m_context, pool ); #else svn_error_t *error = svn_client_status ( &revnum, // revnum norm_path.c_str(), // path &rev, StatusEntriesFunc, // status func &baton, // status baton recurse, get_all, update, !ignore, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } apr_array_header_t *statusarray = svn_sort__hash( status_hash, svn_sort_compare_items_as_paths, pool ); // Loop over array, printing each name/status-structure for (int i = statusarray->nelts-1; i >= 0; i--) { const svn_sort__item_t *item = &APR_ARRAY_IDX( statusarray, i, const svn_sort__item_t ); pysvn_wc_status_t *status = (pysvn_wc_status_t *)item->value; entries_list.append( toObject( Py::String( osNormalisedPath( (const char *)item->key, pool ), "UTF-8" ), *status, pool, m_wrapper_status, m_wrapper_entry, m_wrapper_lock ) ); } return entries_list; } pysvn-1.7.8/Source/pysvn_client_cmd_list.cpp000644 000771 000771 00000024065 11324640300 021551 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_client_cmd_list.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_svnenv.hpp" #include "svn_path.h" #include "svn_config.h" #include "svn_sorts.h" #include "pysvn_static_strings.hpp" static int compare_items_as_paths( const svn_sort__item_t *a, const svn_sort__item_t *b) { return svn_path_compare_paths ((const char *)a->key, (const char *)b->key); } Py::Object pysvn_client::cmd_ls( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, name_revision }, { false, name_recurse }, #if defined( PYSVN_HAS_CLIENT_LS2 ) { false, name_peg_revision }, #endif { false, NULL } }; FunctionArguments args( "ls", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_url_or_path ) ); bool recurse = args.getBoolean( name_recurse, false ); svn_opt_revision_t revision = args.getRevision( name_revision, svn_opt_revision_head ); SvnPool pool( m_context ); apr_hash_t *hash = NULL; std::string norm_path( svnNormalisedIfPath( path, pool ) ); #if defined( PYSVN_HAS_CLIENT_LS2 ) svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, revision ); #endif bool is_url = is_svn_url( path ); #if defined( PYSVN_HAS_CLIENT_LS2 ) revisionKindCompatibleCheck( is_url, peg_revision, name_peg_revision, name_url_or_path ); #endif revisionKindCompatibleCheck( is_url, revision, name_revision, name_url_or_path ); try { checkThreadPermission(); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_LS2 ) svn_error_t *error = svn_client_ls2 ( &hash, norm_path.c_str(), &peg_revision, &revision, recurse, m_context, pool ); #else svn_error_t *error = svn_client_ls ( &hash, norm_path.c_str(), &revision, recurse, m_context, pool ); #endif permission.allowThisThread(); if( error != 0 ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } apr_array_header_t *array = svn_sort__hash( hash, compare_items_as_paths, pool ); std::string base_path; if( !norm_path.empty() ) { base_path = norm_path; base_path += '/'; } // convert the entries into python objects Py::List entries_list; for( int i = 0; i < array->nelts; ++i ) { svn_sort__item_t *item = &APR_ARRAY_IDX( array, i, svn_sort__item_t ); const char *utf8_entryname = static_cast( item->key ); svn_dirent_t *dirent = static_cast( apr_hash_get( hash, utf8_entryname, item->klen ) ); std::string full_name( base_path ); full_name += utf8_entryname; Py::Dict entry_dict; entry_dict[ *py_name_name ] = Py::String( full_name, name_utf8 ); entry_dict[ *py_name_kind ] = toEnumValue( dirent->kind ); entry_dict[ *py_name_has_props ] = Py::Int( dirent->has_props ); entry_dict[ *py_name_size ] = Py::Long( Py::Float( double( static_cast( dirent->size ) ) ) ); entry_dict[ *py_name_created_rev ] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, dirent->created_rev ) ); entry_dict[ *py_name_time ] = toObject( dirent->time ); entry_dict[ *py_name_last_author ] = utf8_string_or_none( dirent->last_author ); entries_list.append( m_wrapper_dirent.wrapDict( entry_dict ) ); } return entries_list; } #if defined( PYSVN_HAS_CLIENT_LIST ) class ListReceiveBaton { public: ListReceiveBaton( PythonAllowThreads *permission, Py::List &list_list ) : m_permission( permission ) , m_list_list( list_list ) {} ~ListReceiveBaton() {} PythonAllowThreads *m_permission; apr_uint32_t m_dirent_fields; bool m_fetch_locks; bool m_is_url; std::string m_url_or_path; DictWrapper *m_wrapper_lock; DictWrapper *m_wrapper_list; Py::List &m_list_list; }; extern "C" { svn_error_t *list_receiver_c ( void *baton_, const char *path, const svn_dirent_t *dirent, const svn_lock_t *lock, const char *abs_path, apr_pool_t *pool ) { ListReceiveBaton *baton = reinterpret_cast( baton_ ); PythonDisallowThreads callback_permission( baton->m_permission ); std::string full_path( baton->m_url_or_path ); std::string full_repos_path( abs_path ); if( strlen( path ) != 0 ) { full_path += "/"; full_path += path; full_repos_path += "/"; full_repos_path += path; } Py::Tuple py_tuple( 2 ); Py::Dict entry_dict; entry_dict[ *py_name_path ] = Py::String( full_path, name_utf8 ); entry_dict[ *py_name_repos_path ] = Py::String( full_repos_path, name_utf8 ); if( dirent != NULL ) { if( baton->m_dirent_fields&SVN_DIRENT_KIND ) { entry_dict[ *py_name_kind ] = toEnumValue( dirent->kind ); } if( baton->m_dirent_fields&SVN_DIRENT_SIZE ) { entry_dict[ *py_name_size ] = Py::Long( Py::Float( double( static_cast( dirent->size ) ) ) ); } if( baton->m_dirent_fields&SVN_DIRENT_CREATED_REV ) { entry_dict[ *py_name_created_rev ] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, dirent->created_rev ) ); } if( baton->m_dirent_fields&SVN_DIRENT_TIME ) { entry_dict[ *py_name_time ] = toObject( dirent->time ); } if( baton->m_dirent_fields&SVN_DIRENT_HAS_PROPS ) { entry_dict[ *py_name_has_props ] = Py::Int( dirent->has_props ); } if( baton->m_dirent_fields&SVN_DIRENT_LAST_AUTHOR ) { entry_dict[ *py_name_last_author ] = utf8_string_or_none( dirent->last_author ); } } py_tuple[0] = baton->m_wrapper_list->wrapDict( entry_dict ); if( lock == NULL ) { py_tuple[1] = Py::None(); } else { py_tuple[1] = toObject( *lock, *baton->m_wrapper_lock ); } baton->m_list_list.append( py_tuple ); return SVN_NO_ERROR; } } Py::Object pysvn_client::cmd_list( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, name_peg_revision }, { false, name_revision }, { false, name_recurse }, { false, name_dirent_fields }, { false, name_fetch_locks }, #if defined( PYSVN_HAS_CLIENT_LIST2 ) { false, name_depth }, #endif { false, NULL } }; FunctionArguments args( "list", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_url_or_path ) ); svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, svn_opt_revision_unspecified ); bool is_url = is_svn_url( path ); svn_opt_revision_t revision; if( is_url ) revision = args.getRevision( name_revision, svn_opt_revision_head ); else revision = args.getRevision( name_revision, svn_opt_revision_working ); #if defined( PYSVN_HAS_CLIENT_LIST2 ) svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_immediates, svn_depth_infinity, svn_depth_immediates ); #else bool recurse = args.getBoolean( name_recurse, false ); #endif apr_uint32_t dirent_fields = args.getLong( name_dirent_fields, SVN_DIRENT_ALL ); bool fetch_locks = args.getBoolean( name_fetch_locks, false ); revisionKindCompatibleCheck( is_url, peg_revision, name_peg_revision, name_url_or_path ); revisionKindCompatibleCheck( is_url, revision, name_revision, name_url_or_path ); SvnPool pool( m_context ); std::string norm_path( svnNormalisedIfPath( path, pool ) ); Py::List list_list; try { checkThreadPermission(); PythonAllowThreads permission( m_context ); ListReceiveBaton list_baton( &permission, list_list ); list_baton.m_dirent_fields = dirent_fields; list_baton.m_is_url = is_url; list_baton.m_fetch_locks = fetch_locks; list_baton.m_url_or_path = norm_path; list_baton.m_wrapper_lock = &m_wrapper_lock; list_baton.m_wrapper_list = &m_wrapper_list; #if defined( PYSVN_HAS_CLIENT_LIST2 ) svn_error_t *error = svn_client_list2 ( norm_path.c_str(), &peg_revision, &revision, depth, dirent_fields, fetch_locks, list_receiver_c, reinterpret_cast( &list_baton ), m_context, pool ); #else svn_error_t *error = svn_client_list ( norm_path.c_str(), &peg_revision, &revision, recurse, dirent_fields, fetch_locks, list_receiver_c, reinterpret_cast( &list_baton ), m_context, pool ); #endif permission.allowThisThread(); if( error != 0 ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return list_list; } #endif pysvn-1.7.8/Source/pysvn_client_cmd_lock.cpp000644 000771 000771 00000007231 11132131027 021520 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_client_cmd_list.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_svnenv.hpp" #include "pysvn_static_strings.hpp" #if defined( PYSVN_HAS_CLIENT_LOCK ) Py::Object pysvn_client::cmd_lock( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { true, name_comment }, { false, name_force }, { false, NULL } }; FunctionArguments args( "lock", args_desc, a_args, a_kws ); args.check(); SvnPool pool( m_context ); apr_array_header_t *targets = targetsFromStringOrList( args.getArg( name_url_or_path ), pool ); std::string type_error_message; try { type_error_message = "expecting string for comment (arg 2)"; std::string comment( args.getUtf8String( name_comment ) ); type_error_message = "expecting boolean for force keyword arg"; bool force = args.getBoolean( name_force, false ); try { checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_error_t *error = svn_client_lock ( targets, comment.c_str(), force, // non recursive m_context, pool ); permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } } catch( Py::TypeError & ) { throw Py::TypeError( type_error_message ); } return Py::None(); } #endif #if defined( PYSVN_HAS_CLIENT_LOCK ) Py::Object pysvn_client::cmd_unlock( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, name_force }, { false, NULL } }; FunctionArguments args( "unlock", args_desc, a_args, a_kws ); args.check(); SvnPool pool( m_context ); apr_array_header_t *targets = targetsFromStringOrList( args.getArg( name_url_or_path ), pool ); std::string type_error_message; try { type_error_message = "expecting boolean for force keyword arg"; bool force = args.getBoolean( name_force, true ); try { checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_error_t *error = svn_client_unlock ( targets, force, m_context, pool ); permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } } catch( Py::TypeError & ) { throw Py::TypeError( type_error_message ); } return Py::None(); } #endif pysvn-1.7.8/Source/pysvn_client_cmd_merge.cpp000644 000771 000771 00000040314 12027126427 021702 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_client_cmd_merge.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_svnenv.hpp" #include "svn_path.h" #include "svn_config.h" #include "svn_sorts.h" #include "pysvn_static_strings.hpp" static const char *g_utf_8 = "utf-8"; Py::Object pysvn_client::cmd_merge( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path1 }, { true, name_revision1 }, { true, name_url_or_path2 }, { true, name_revision2 }, { true, name_local_path }, { false, name_force }, { false, name_recurse }, { false, name_notice_ancestry }, { false, name_dry_run }, #if defined( PYSVN_HAS_CLIENT_MERGE2 ) { false, name_merge_options }, #endif #if defined( PYSVN_HAS_CLIENT_MERGE3 ) { false, name_depth }, { false, name_record_only }, #endif { false, NULL } }; FunctionArguments args( "merge", args_desc, a_args, a_kws ); args.check(); std::string path1( args.getUtf8String( name_url_or_path1 ) ); svn_opt_revision_t revision1 = args.getRevision( name_revision1, svn_opt_revision_head ); std::string path2( args.getUtf8String( name_url_or_path2 ) ); svn_opt_revision_t revision2 = args.getRevision( name_revision2, svn_opt_revision_head ); std::string local_path( args.getUtf8String( name_local_path ) ); bool force = args.getBoolean( name_force, false ); #if defined( PYSVN_HAS_CLIENT_MERGE3 ) svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_files ); bool record_only = args.getBoolean( name_record_only, false ); #else bool recurse = args.getBoolean( name_recurse, true ); #endif bool notice_ancestry = args.getBoolean( name_notice_ancestry, false ); bool dry_run = args.getBoolean( name_dry_run, false ); #if defined( PYSVN_HAS_CLIENT_MERGE2 ) Py::List merge_options_list; if( args.hasArg( name_merge_options ) ) { merge_options_list = args.getArg( name_merge_options ); for( size_t i=0; i 0 ) { merge_options = apr_array_make( pool, merge_options_list.length(), sizeof( const char * ) ); for( size_t i=0; i 0 ) { merge_options = apr_array_make( pool, merge_options_list.length(), sizeof( const char * ) ); for( size_t i=0; i( apr_palloc( pool, sizeof(*range) ) ); if( tuple_range.length() != 2 ) { std::string msg = "merge_peg2() expecting tuple with 2 values in ranges_to_merge list"; throw Py::AttributeError( msg ); } { Py::Object obj( tuple_range[0] ); if( pysvn_revision::check( obj ) ) { pysvn_revision *rev = static_cast( obj.ptr() ); range->start = rev->getSvnRevision(); revisionKindCompatibleCheck( is_url, range->start, name_ranges_to_merge, name_sources ); } else { std::string msg = "merge_peg2() expecting revision for 1st tuple value in sources list"; throw Py::AttributeError( msg ); } } { Py::Object obj( tuple_range[1] ); if( pysvn_revision::check( obj ) ) { pysvn_revision *rev = static_cast( obj.ptr() ); range->end = rev->getSvnRevision(); revisionKindCompatibleCheck( is_url, range->end, name_ranges_to_merge, name_sources ); } else { std::string msg = "merge_peg2() expecting revision for 2nd tuple value in sources list"; throw Py::AttributeError( msg ); } } APR_ARRAY_PUSH( ranges_to_merge, svn_opt_revision_range_t *) = range; } try { std::string norm_sources( svnNormalisedIfPath( sources, pool ) ); std::string norm_target_wcpath( svnNormalisedIfPath( target_wcpath, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_error_t *error = svn_client_merge_peg3 ( norm_sources.c_str(), ranges_to_merge, &peg_revision, norm_target_wcpath.c_str(), depth, !notice_ancestry, force, record_only, dry_run, merge_options, m_context, pool ); permission.allowThisThread(); if( error != 0 ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::None(); } #endif #if defined( PYSVN_HAS_CLIENT_MERGE_PEG ) Py::Object pysvn_client::cmd_merge_peg( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { true, name_revision1 }, { true, name_revision2 }, { true, name_peg_revision }, { true, name_local_path }, { false, name_recurse }, { false, name_notice_ancestry }, { false, name_force }, { false, name_dry_run }, #if defined( PYSVN_HAS_CLIENT_MERGE_PEG2 ) { false, name_merge_options }, #endif { false, NULL } }; FunctionArguments args( "merge_peg", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_url_or_path ) ); svn_opt_revision_t revision1 = args.getRevision( name_revision1, svn_opt_revision_head ); svn_opt_revision_t revision2 = args.getRevision( name_revision2, svn_opt_revision_head ); svn_opt_revision_t peg_revision = args.getRevision( name_revision2, revision2 ); std::string local_path( args.getUtf8String( name_local_path ) ); bool force = args.getBoolean( name_force, false ); bool recurse = args.getBoolean( name_recurse, true ); bool notice_ancestry = args.getBoolean( name_notice_ancestry, false ); bool dry_run = args.getBoolean( name_dry_run, false ); #if defined( PYSVN_HAS_CLIENT_MERGE_PEG2 ) Py::List merge_options_list; if( args.hasArg( name_merge_options ) ) { merge_options_list = args.getArg( name_merge_options ); for( size_t i=0; i 0 ) { merge_options = apr_array_make( pool, merge_options_list.length(), sizeof( const char * ) ); for( size_t i=0; i 0 ) { merge_options = apr_array_make( pool, merge_options_list.length(), sizeof( const char * ) ); for( size_t i=0; i causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_static_strings.hpp" Py::Object pysvn_client::cmd_propdel( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_prop_name }, { true, name_url_or_path }, { false, name_revision }, { false, name_recurse }, #if defined( PYSVN_HAS_CLIENT_PROPSET2 ) { false, name_skip_checks }, #endif #if defined( PYSVN_HAS_CLIENT_PROPSET3 ) { false, name_depth }, { false, name_base_revision_for_url }, { false, name_changelists }, { false, name_revprops }, #endif { false, NULL } }; FunctionArguments args( "propdel", args_desc, a_args, a_kws ); args.check(); std::string propname( args.getUtf8String( name_prop_name ) ); std::string path( args.getUtf8String( name_url_or_path ) ); svn_opt_revision_t revision; if( is_svn_url( path ) ) revision = args.getRevision( name_revision, svn_opt_revision_head ); else revision = args.getRevision( name_revision, svn_opt_revision_working ); SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_PROPSET3 ) svn_revnum_t base_revision_for_url; if( is_svn_url( path ) ) base_revision_for_url = args.getInteger( name_base_revision_for_url, 0 ); else base_revision_for_url = args.getInteger( name_base_revision_for_url, SVN_INVALID_REVNUM ); apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_files, svn_depth_infinity, svn_depth_empty ); #else bool recurse = args.getBoolean( name_recurse, false ); #endif #if defined( PYSVN_HAS_CLIENT_PROPSET2 ) bool skip_checks = args.getBoolean( name_skip_checks, false ); #endif #if defined( PYSVN_HAS_CLIENT_PROPSET3 ) pysvn_commit_info_t *commit_info = NULL; apr_hash_t *revprops = NULL; if( args.hasArg( name_revprops ) ) { Py::Object py_revprop = args.getArg( name_revprops ); if( !py_revprop.isNone() ) { revprops = hashOfStringsFromDistOfStrings( py_revprop, pool ); } } #endif try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_PROPSET3 ) svn_error_t *error = svn_client_propset3 ( &commit_info, propname.c_str(), NULL, // value = NULL norm_path.c_str(), depth, skip_checks, base_revision_for_url, changelists, revprops, m_context.ctx(), pool ); #elif defined( PYSVN_HAS_CLIENT_PROPSET2 ) svn_error_t *error = svn_client_propset2 ( propname.c_str(), NULL, // value = NULL norm_path.c_str(), recurse, skip_checks, m_context.ctx(), pool ); #else svn_error_t *error = svn_client_propset ( propname.c_str(), NULL, // value = NULL norm_path.c_str(), recurse, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } #if defined( PYSVN_HAS_CLIENT_PROPSET3 ) return toObject( commit_info, m_commit_info_style ); #else return Py::None(); #endif } Py::Object pysvn_client::cmd_propget( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_prop_name }, { true, name_url_or_path }, { false, name_revision }, { false, name_recurse }, #if defined( PYSVN_HAS_CLIENT_PROPGET2 ) { false, name_peg_revision }, #endif #if defined( PYSVN_HAS_CLIENT_PROPGET3 ) { false, name_depth }, { false, name_changelists }, #endif { false, NULL } }; FunctionArguments args( "propget", args_desc, a_args, a_kws ); args.check(); std::string propname( args.getUtf8String( name_prop_name ) ); std::string path( args.getUtf8String( name_url_or_path ) ); SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_PROPGET3 ) apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_files, svn_depth_infinity, svn_depth_empty ); #else bool recurse = args.getBoolean( name_recurse, false ); #endif svn_opt_revision_t revision; if( is_svn_url( path ) ) revision = args.getRevision( name_revision, svn_opt_revision_head ); else revision = args.getRevision( name_revision, svn_opt_revision_working ); #if defined( PYSVN_HAS_CLIENT_PROPGET2 ) svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, revision ); #endif bool is_url = is_svn_url( path ); #if defined( PYSVN_HAS_CLIENT_PROPGET2 ) revisionKindCompatibleCheck( is_url, peg_revision, name_peg_revision, name_url_or_path ); #endif revisionKindCompatibleCheck( is_url, revision, name_revision, name_url_or_path ); apr_hash_t *props = NULL; #if defined( PYSVN_HAS_CLIENT_PROPGET3 ) svn_revnum_t actual_revnum = 0; #endif try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_PROPGET3 ) svn_error_t *error = svn_client_propget3 ( &props, propname.c_str(), norm_path.c_str(), &peg_revision, &revision, &actual_revnum, depth, changelists, m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_PROPGET2 ) svn_error_t *error = svn_client_propget2 ( &props, propname.c_str(), norm_path.c_str(), &peg_revision, &revision, recurse, m_context, pool ); #else svn_error_t *error = svn_client_propget ( &props, propname.c_str(), norm_path.c_str(), &revision, recurse, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return propsToObject( props, pool ); } #if defined( PYSVN_HAS_CLIENT_PROPLIST3 ) class ProplistReceiveBaton { public: ProplistReceiveBaton( PythonAllowThreads *permission, SvnPool &pool, Py::List &prop_list ) : m_permission( permission ) , m_pool( pool ) , m_prop_list( prop_list ) {} ~ProplistReceiveBaton() {} PythonAllowThreads *m_permission; SvnPool &m_pool; Py::List &m_prop_list; }; extern "C" { svn_error_t *proplist_receiver_c ( void *baton_, const char *path, apr_hash_t *prop_hash, apr_pool_t *pool ) { ProplistReceiveBaton *baton = reinterpret_cast( baton_ ); PythonDisallowThreads callback_permission( baton->m_permission ); Py::Dict prop_dict; Py::Tuple py_tuple( 2 ); py_tuple[0] = Py::String( path ); py_tuple[1] = propsToObject( prop_hash, baton->m_pool ); baton->m_prop_list.append( py_tuple ); return SVN_NO_ERROR; } } #endif Py::Object pysvn_client::cmd_proplist( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url_or_path }, { false, name_revision }, { false, name_recurse }, #if defined( PYSVN_HAS_CLIENT_PROPLIST2 ) { false, name_peg_revision }, #endif #if defined( PYSVN_HAS_CLIENT_PROPLIST3 ) { false, name_depth }, { false, name_changelists }, #endif { false, NULL } }; FunctionArguments args( "proplist", args_desc, a_args, a_kws ); args.check(); Py::List path_list( toListOfStrings( args.getArg( name_url_or_path ) ) ); SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_PROPLIST3 ) apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_empty, svn_depth_infinity, svn_depth_empty ); #else bool recurse = args.getBoolean( name_recurse, false ); #endif bool is_revision_setup = false; bool is_url = false; svn_opt_revision_t revision_url; svn_opt_revision_t revision_file; if( args.hasArg( name_revision ) ) { revision_url = args.getRevision( name_revision ); revision_file = revision_url; } else { revision_url.kind = svn_opt_revision_head; revision_file.kind = svn_opt_revision_working; } #if defined( PYSVN_HAS_CLIENT_PROPLIST2 ) svn_opt_revision_t peg_revision_url; svn_opt_revision_t peg_revision_file; if( args.hasArg( name_peg_revision ) ) { peg_revision_url = args.getRevision( name_peg_revision ); peg_revision_file = peg_revision_url; } else { peg_revision_url = revision_url; peg_revision_file = revision_file; } #endif Py::List list_of_proplists; for( Py::List::size_type i=0; i( &proplist_baton ), m_context, pool ); #elif defined( PYSVN_HAS_CLIENT_PROPLIST2 ) apr_array_header_t *props = NULL; svn_error_t *error = svn_client_proplist2 ( &props, norm_path_c_str, &peg_revision, &revision, recurse, m_context, pool ); #else apr_array_header_t *props = NULL; svn_error_t *error = svn_client_proplist ( &props, norm_path_c_str, &revision, recurse, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); #if !defined( PYSVN_HAS_CLIENT_PROPLIST3 ) proplistToObject( list_of_proplists, props, pool ); #endif } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } } return list_of_proplists; } Py::Object pysvn_client::cmd_propset( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_prop_name }, { true, name_prop_value }, { true, name_url_or_path }, { false, name_revision }, { false, name_recurse }, #if defined( PYSVN_HAS_CLIENT_PROPSET2 ) { false, name_skip_checks }, #endif #if defined( PYSVN_HAS_CLIENT_PROPSET3 ) { false, name_depth }, { false, name_base_revision_for_url }, { false, name_changelists }, { false, name_revprops }, #endif { false, NULL } }; FunctionArguments args( "propset", args_desc, a_args, a_kws ); args.check(); std::string propname( args.getUtf8String( name_prop_name ) ); std::string propval( args.getUtf8String( name_prop_value ) ); std::string path( args.getUtf8String( name_url_or_path ) ); svn_opt_revision_t revision; if( is_svn_url( path ) ) revision = args.getRevision( name_revision, svn_opt_revision_head ); else revision = args.getRevision( name_revision, svn_opt_revision_working ); SvnPool pool( m_context ); #if defined( PYSVN_HAS_CLIENT_PROPSET3 ) apr_array_header_t *changelists = NULL; if( args.hasArg( name_changelists ) ) { changelists = arrayOfStringsFromListOfStrings( args.getArg( name_changelists ), pool ); } svn_revnum_t base_revision_for_url; if( is_svn_url( path ) ) base_revision_for_url = args.getInteger( name_base_revision_for_url, 0 ); else base_revision_for_url = args.getInteger( name_base_revision_for_url, SVN_INVALID_REVNUM ); svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_empty, svn_depth_infinity, svn_depth_empty ); apr_hash_t *revprops = NULL; if( args.hasArg( name_revprops ) ) { Py::Object py_revprop = args.getArg( name_revprops ); if( !py_revprop.isNone() ) { revprops = hashOfStringsFromDistOfStrings( py_revprop, pool ); } } #else bool recurse = args.getBoolean( name_recurse, false ); #endif #if defined( PYSVN_HAS_CLIENT_PROPSET2 ) bool skip_checks = args.getBoolean( name_skip_checks, false ); #endif #if defined( PYSVN_HAS_CLIENT_PROPSET3 ) pysvn_commit_info_t *commit_info = NULL; #endif try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); const svn_string_t *svn_propval = svn_string_ncreate( propval.c_str(), propval.size(), pool ); #if defined( PYSVN_HAS_CLIENT_PROPSET3 ) svn_error_t *error = svn_client_propset3 ( &commit_info, propname.c_str(), svn_propval, norm_path.c_str(), depth, skip_checks, base_revision_for_url, changelists, revprops, m_context.ctx(), pool ); #elif defined( PYSVN_HAS_CLIENT_PROPSET2 ) svn_error_t *error = svn_client_propset2 ( propname.c_str(), svn_propval, norm_path.c_str(), recurse, skip_checks, m_context.ctx(), pool ); #else svn_error_t *error = svn_client_propset ( propname.c_str(), svn_propval, norm_path.c_str(), recurse, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } #if defined( PYSVN_HAS_CLIENT_PROPSET3 ) return toObject( commit_info, m_commit_info_style ); #else return Py::None(); #endif } pysvn-1.7.8/Source/pysvn_client_cmd_revprop.cpp000644 000771 000771 00000015642 11132131027 022272 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_client_cmd_prop.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_static_strings.hpp" Py::Object pysvn_client::cmd_revpropdel( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_prop_name }, { true, name_url }, { false, name_revision }, { false, name_force }, { false, NULL } }; FunctionArguments args( "revpropdel", args_desc, a_args, a_kws ); args.check(); std::string propname( args.getUtf8String( name_prop_name ) ); std::string path( args.getUtf8String( name_url ) ); svn_opt_revision_t revision = args.getRevision( name_revision, svn_opt_revision_head ); bool force = args.getBoolean( name_force, false ); SvnPool pool( m_context ); svn_revnum_t revnum = 0; try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_error_t *error = svn_client_revprop_set ( propname.c_str(), NULL, // value = NULL norm_path.c_str(), &revision, &revnum, force, m_context, pool ); permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, revnum ) ); } Py::Object pysvn_client::cmd_revpropget( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_prop_name }, { true, name_url }, { false, name_revision }, { false, NULL } }; FunctionArguments args( "revpropget", args_desc, a_args, a_kws ); args.check(); std::string propname( args.getUtf8String( name_prop_name ) ); std::string path( args.getUtf8String( name_url ) ); svn_opt_revision_t revision = args.getRevision( name_revision, svn_opt_revision_head ); SvnPool pool( m_context ); svn_string_t *propval = NULL; svn_revnum_t revnum = 0; try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_error_t * error = svn_client_revprop_get ( propname.c_str(), &propval, norm_path.c_str(), &revision, &revnum, m_context, pool ); permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } Py::Tuple result(2); result[0] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, revnum ) ); // prop_name that is not in this rev returns a NULL value if( propval == NULL ) { result[1] = Py::None(); } else { result[1] = Py::String( propval->data, propval->len, name_utf8 ); } return result; } Py::Object pysvn_client::cmd_revproplist( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_url }, { false, name_revision }, { false, NULL } }; FunctionArguments args( "revproplist", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_url ) ); svn_opt_revision_t revision = args.getRevision( name_revision, svn_opt_revision_head ); SvnPool pool( m_context ); apr_hash_t *props = NULL; svn_revnum_t revnum = 0; try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_error_t *error = svn_client_revprop_list ( &props, norm_path.c_str(), &revision, &revnum, m_context, pool ); permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } Py::Tuple result(2); result[0] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, revnum ) ); result[1] = propsToObject( props, pool ); return result; } Py::Object pysvn_client::cmd_revpropset( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_prop_name }, { true, name_prop_value }, { true, name_url }, { false, name_revision }, { false, name_force }, { false, NULL } }; FunctionArguments args( "revpropset", args_desc, a_args, a_kws ); args.check(); std::string propname( args.getUtf8String( name_prop_name ) ); std::string propval( args.getUtf8String( name_prop_value ) ); std::string path( args.getUtf8String( name_url ) ); svn_opt_revision_t revision = args.getRevision( name_revision, svn_opt_revision_head ); bool force = args.getBoolean( name_force, false ); SvnPool pool( m_context ); svn_revnum_t revnum = 0; try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); const svn_string_t *svn_propval = svn_string_ncreate( propval.c_str(), propval.size(), pool ); svn_error_t *error = svn_client_revprop_set ( propname.c_str(), svn_propval, norm_path.c_str(), &revision, &revnum, force, m_context, pool ); permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, revnum ) ); } pysvn-1.7.8/Source/pysvn_client_cmd_switch.cpp000644 000771 000771 00000011421 11411347440 022075 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_client_cmd_prop.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_static_strings.hpp" Py::Object pysvn_client::cmd_relocate( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_from_url }, { true, name_to_url }, { true, name_path }, { false, name_recurse }, { false, NULL } }; FunctionArguments args( "relocate", args_desc, a_args, a_kws ); args.check(); std::string from_url( args.getUtf8String( name_from_url ) ); std::string to_url( args.getUtf8String( name_to_url ) ); std::string path( args.getUtf8String( name_path ) ); bool recurse = args.getBoolean( name_recurse, true ); SvnPool pool( m_context ); try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); std::string norm_to_url( svnNormalisedIfPath( to_url, pool ) ); std::string norm_from_url( svnNormalisedIfPath( from_url, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); svn_error_t *error = svn_client_relocate ( norm_path.c_str(), norm_from_url.c_str(), norm_to_url.c_str(), recurse, m_context, pool ); permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::None(); } Py::Object pysvn_client::cmd_switch( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { true, name_url }, { false, name_recurse }, { false, name_revision }, #if defined( PYSVN_HAS_CLIENT_SWITCH2 ) { false, name_depth }, { false, name_peg_revision }, { false, name_depth_is_sticky }, { false, name_ignore_externals }, { false, name_allow_unver_obstructions }, #endif { false, NULL } }; FunctionArguments args( "switch", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_path ) ); std::string url( args.getUtf8String( name_url ) ); svn_opt_revision_t revision = args.getRevision( name_revision, svn_opt_revision_head ); #if defined( PYSVN_HAS_CLIENT_SWITCH2 ) svn_depth_t depth = args.getDepth( name_depth, name_recurse, svn_depth_infinity, svn_depth_infinity, svn_depth_files ); svn_opt_revision_t peg_revision = args.getRevision( name_peg_revision, revision ); svn_boolean_t depth_is_sticky = args.getBoolean( name_depth_is_sticky, false ); svn_boolean_t ignore_externals = args.getBoolean( name_ignore_externals, false ); svn_boolean_t allow_unver_obstructions = args.getBoolean( name_allow_unver_obstructions, false ); #else bool recurse = args.getBoolean( name_recurse, true ); #endif SvnPool pool( m_context ); svn_revnum_t revnum = 0; try { std::string norm_path( svnNormalisedIfPath( path, pool ) ); std::string norm_url( svnNormalisedIfPath( url, pool ) ); checkThreadPermission(); PythonAllowThreads permission( m_context ); #if defined( PYSVN_HAS_CLIENT_SWITCH2 ) svn_error_t *error = svn_client_switch2 ( &revnum, norm_path.c_str(), norm_url.c_str(), &peg_revision, &revision, depth, depth_is_sticky, ignore_externals, allow_unver_obstructions, m_context, pool ); #else svn_error_t *error = svn_client_switch ( &revnum, norm_path.c_str(), norm_url.c_str(), &revision, recurse, m_context, pool ); #endif permission.allowThisThread(); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { // use callback error over ClientException m_context.checkForError( m_module.client_error ); throw_client_error( e ); } return Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, revnum ) ); } pysvn-1.7.8/Source/pysvn_converters.cpp000644 000771 000771 00000055073 12112747151 020622 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "svn_config.h" #include "svn_time.h" #include "pysvn_static_strings.hpp" static const std::string str_URL( "URL" ); static const std::string str_author( "author" ); static const std::string str_changelist( "changelist" ); static const std::string str_checksum( "checksum" ); static const std::string str_comment( "comment" ); static const std::string str_commit_author( "commit_author" ); static const std::string str_commit_revision( "commit_revision" ); static const std::string str_commit_time( "commit_time" ); static const std::string str_conflict_new( "conflict_new" ); static const std::string str_conflict_old( "conflict_old" ); static const std::string str_conflict_work( "conflict_work" ); static const std::string str_copy_from_revision( "copy_from_revision" ); static const std::string str_copy_from_url( "copy_from_url" ); static const std::string str_copyfrom_rev( "copyfrom_rev" ); static const std::string str_copyfrom_url( "copyfrom_url" ); static const std::string str_creation_date( "creation_date" ); static const std::string str_date( "date" ); static const std::string str_depth( "depth" ); static const std::string str_entry( "entry" ); static const std::string str_expiration_date( "expiration_date" ); static const std::string str_is_absent( "is_absent" ); static const std::string str_is_copied( "is_copied" ); static const std::string str_is_dav_comment( "is_dav_comment" ); static const std::string str_is_deleted( "is_deleted" ); static const std::string str_is_locked( "is_locked" ); static const std::string str_is_switched( "is_switched" ); static const std::string str_is_versioned( "is_versioned" ); static const std::string str_kind( "kind" ); static const std::string str_last_changed_author( "last_changed_author" ); static const std::string str_last_changed_date( "last_changed_date" ); static const std::string str_last_changed_rev( "last_changed_rev" ); static const std::string str_lock( "lock" ); static const std::string str_lock_comment( "lock_comment" ); static const std::string str_lock_creation_date( "lock_creation_date" ); static const std::string str_lock_owner( "lock_owner" ); static const std::string str_lock_token( "lock_token" ); static const std::string str_name( "name" ); static const std::string str_owner( "owner" ); static const std::string str_path( "path" ); static const std::string str_post_commit_err( "post_commit_err" ); static const std::string str_prejfile( "prejfile" ); static const std::string str_prop_status( "prop_status" ); static const std::string str_prop_time( "prop_time" ); static const std::string str_properties_time( "properties_time" ); static const std::string str_property_reject_file( "property_reject_file" ); static const std::string str_repos( "repos" ); static const std::string str_repos_UUID( "repos_UUID" ); static const std::string str_repos_lock( "repos_lock" ); static const std::string str_repos_prop_status( "repos_prop_status" ); static const std::string str_repos_root_URL( "repos_root_URL" ); static const std::string str_repos_text_status( "repos_text_status" ); static const std::string str_rev( "rev" ); static const std::string str_revision( "revision" ); static const std::string str_schedule( "schedule" ); static const std::string str_size( "size" ); static const std::string str_text_status( "text_status" ); static const std::string str_text_time( "text_time" ); static const std::string str_token( "token" ); static const std::string str_url( "url" ); static const std::string str_uuid( "uuid" ); static const std::string str_wc_info( "wc_info" ); static const std::string str_working_size( "working_size" ); #include //------------------------------------------------------------ // // DictWrapper // //------------------------------------------------------------ DictWrapper::DictWrapper( Py::Dict result_wrappers, const std::string &wrapper_name ) : m_wrapper_name( wrapper_name ) , m_have_wrapper( false ) , m_wrapper() { if( result_wrappers.hasKey( wrapper_name ) ) { m_wrapper = result_wrappers[ wrapper_name ]; m_have_wrapper = true; } } DictWrapper::~DictWrapper() { } Py::Object DictWrapper::wrapDict( Py::Dict result ) const { if( m_have_wrapper ) { Py::Tuple args( 1 ); args[0] = result; try { return m_wrapper.apply( args ); } catch( Py::Exception &e ) { std::cerr << "pysvn: unhandled exception calling " << m_wrapper_name << std::endl; PyErr_Print(); e.clear(); return Py::None(); } } else { return result; } } //------------------------------------------------------------ // // Converters // //------------------------------------------------------------ Py::Object utf8_string_or_none( const char *str ) { if( str == NULL ) return Py::None(); else return Py::String( str, name_utf8 ); } Py::Object path_string_or_none( const char *str, SvnPool &pool ) { if( str == NULL ) return Py::None(); else return Py::String( osNormalisedPath( str, pool ), name_utf8 ); } Py::Object utf8_string_or_none( const std::string &str ) { if( str.empty() ) return Py::None(); else return Py::String( str, name_utf8 ); } apr_time_t convertStringToTime( const std::string &text, apr_time_t now, SvnPool &pool ) { svn_boolean_t matched = 0; apr_time_t result = 0; svn_error_t *error = svn_parse_date ( &matched, &result, text.c_str(), now, pool ); if( error != NULL || !matched ) { return 0; } return result; } Py::Object toObject( apr_time_t t ) { return Py::Float( double( t )/1000000 ); } #if defined( PYSVN_HAS_SVN_COMMIT_INFO_T ) Py::Object toObject( pysvn_commit_info_t *commit_info, int commit_style ) { if( commit_info == NULL ) return Py::None(); if( commit_style == 0 ) { if( !SVN_IS_VALID_REVNUM( commit_info->revision ) ) return Py::None(); return Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, commit_info->revision ) ); } else if( commit_style == 1 ) { Py::Dict commit_info_dict; commit_info_dict[ str_date ] = utf8_string_or_none( commit_info->date ); commit_info_dict[ str_author ] = utf8_string_or_none( commit_info->author ); commit_info_dict[ str_post_commit_err ] = utf8_string_or_none( commit_info->post_commit_err ); if( SVN_IS_VALID_REVNUM( commit_info->revision ) ) { commit_info_dict[ str_revision ] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, commit_info->revision ) ); } else { commit_info_dict[ str_revision ] = Py::None(); } return commit_info_dict; } else { throw Py::RuntimeError( "commit_style value invalid" ); } } #else Py::Object toObject( pysvn_commit_info_t *commit_info ) { if( commit_info == NULL || !SVN_IS_VALID_REVNUM( commit_info->revision ) ) return Py::None(); return Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, commit_info->revision ) ); } #endif Py::Object toObject ( Py::String path, pysvn_wc_status_t &svn_status, SvnPool &pool, const DictWrapper &wrapper_status, const DictWrapper &wrapper_entry, const DictWrapper &wrapper_lock ) { Py::Dict status; status[ str_path ] = path; if( svn_status.entry == NULL ) { status[ str_entry ] = Py::None(); } else { status[ str_entry ] = toObject( *svn_status.entry, pool, wrapper_entry ); } if( svn_status.repos_lock == NULL ) { status[ str_repos_lock ] = Py::None(); } #if defined( PYSVN_HAS_CLIENT_STATUS2 ) else { status[ str_repos_lock ] = toObject( *svn_status.repos_lock, wrapper_lock ); } #endif long is_versioned; switch( svn_status.text_status ) { // exists, but uninteresting case svn_wc_status_normal: // is scheduled for addition case svn_wc_status_added: // under v.c., but is missing case svn_wc_status_missing: // scheduled for deletion case svn_wc_status_deleted: // was deleted and then re-added case svn_wc_status_replaced: // text or props have been modified case svn_wc_status_modified: // local mods received repos mods (### unused) case svn_wc_status_merged: // local mods received conflicting repos mods case svn_wc_status_conflicted: is_versioned = 1; // an unversioned resource is in the way of the versioned resource case svn_wc_status_obstructed: // does not exist case svn_wc_status_none: // is not a versioned thing in this wc case svn_wc_status_unversioned: // is unversioned but configured to be ignored case svn_wc_status_ignored: // an unversioned directory path populated by an svn:externals // property; this status is not used for file externals case svn_wc_status_external: // a directory doesn't contain a complete entries list case svn_wc_status_incomplete: // assume any new status not versioned default: is_versioned = 0; } status[ str_is_versioned ] = Py::Int( is_versioned ); status[ str_is_locked ] = Py::Int( svn_status.locked ); status[ str_is_copied ] = Py::Int( svn_status.copied ); status[ str_is_switched ] = Py::Int( svn_status.switched ); status[ str_prop_status ] = toEnumValue( svn_status.prop_status ); status[ str_text_status ] = toEnumValue( svn_status.text_status ); status[ str_repos_prop_status ] = toEnumValue( svn_status.repos_prop_status ); status[ str_repos_text_status ] = toEnumValue( svn_status.repos_text_status ); return wrapper_status.wrapDict( status ); } Py::Object toObject ( const svn_wc_entry_t &svn_entry, SvnPool &pool, const DictWrapper &wrapper_entry ) { Py::Dict entry; entry[ str_checksum ] = utf8_string_or_none( svn_entry.checksum ); entry[ str_commit_author ] = utf8_string_or_none( svn_entry.cmt_author ); entry[ str_commit_revision ] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, svn_entry.cmt_rev ) ); entry[ str_commit_time ] = toObject( svn_entry.cmt_date ); entry[ str_conflict_new ] = path_string_or_none( svn_entry.conflict_new, pool ); entry[ str_conflict_old ] = path_string_or_none( svn_entry.conflict_old, pool ); entry[ str_conflict_work ] = path_string_or_none( svn_entry.conflict_wrk, pool ); entry[ str_copy_from_revision ] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, svn_entry.copyfrom_rev ) ); entry[ str_copy_from_url ] = utf8_string_or_none( svn_entry.copyfrom_url ); entry[ str_is_absent ] = Py::Int( svn_entry.absent ); entry[ str_is_copied ] = Py::Int( svn_entry.copied ); entry[ str_is_deleted ] = Py::Int( svn_entry.deleted ); entry[ str_kind ] = toEnumValue( svn_entry.kind ); entry[ str_name ] = path_string_or_none( svn_entry.name, pool ); entry[ str_properties_time ] = toObject( svn_entry.prop_time ); entry[ str_property_reject_file ] = path_string_or_none( svn_entry.prejfile, pool ); entry[ str_repos ] = utf8_string_or_none( svn_entry.repos ); entry[ str_revision ] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, svn_entry.revision ) ); entry[ str_schedule ] = toEnumValue( svn_entry.schedule ); entry[ str_text_time ] = toObject( svn_entry.text_time ); entry[ str_url ] = utf8_string_or_none( svn_entry.url ); entry[ str_uuid ] = utf8_string_or_none( svn_entry.uuid ); #if defined( PYSVN_HAS_CLIENT_STATUS2 ) entry[ str_lock_token ] = utf8_string_or_none( svn_entry.lock_token ); entry[ str_lock_owner ] = utf8_string_or_none( svn_entry.lock_owner ); entry[ str_lock_comment ] = utf8_string_or_none( svn_entry.lock_comment ); entry[ str_lock_creation_date ] = toObject( svn_entry.lock_creation_date ); #endif return wrapper_entry.wrapDict( entry ); } #if defined( PYSVN_HAS_CLIENT_INFO ) Py::Object toObject ( const svn_info_t &info, const DictWrapper &wrapper_info, const DictWrapper &wrapper_lock, const DictWrapper &wrapper_wc_info ) { Py::Dict py_info; // Where the item lives in the repository. py_info[str_URL] = utf8_string_or_none( info.URL ); // The revision of the object. If path_or_url is a working-copy // path, then this is its current working revnum. If path_or_url // is a URL, then this is the repos revision that path_or_url lives in. py_info[str_rev] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, info.rev ) ); // The node's kind. py_info[str_kind] = toEnumValue( info.kind ); // The root URL of the repository. py_info[str_repos_root_URL] = utf8_string_or_none( info.repos_root_URL ); // The repository's UUID. py_info[str_repos_UUID] = utf8_string_or_none( info.repos_UUID ); // The last revision in which this object changed. py_info[str_last_changed_rev] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, info.last_changed_rev ) ); // The date of the last_changed_rev. py_info[str_last_changed_date] = toObject( info.last_changed_date ); // The author of the last_changed_rev. py_info[str_last_changed_author] = utf8_string_or_none( info.last_changed_author ); #if defined( PYSVN_HAS_CLIENT_LOCK ) // An exclusive lock, if present. Could be either local or remote. if( info.lock == NULL ) { py_info[str_lock] = Py::None(); } else { py_info[str_lock] = toObject( *info.lock, wrapper_lock ); } #endif // Whether or not to ignore the next 10 wc-specific fields. if( info.has_wc_info == 0 ) { py_info[str_wc_info] = Py::None(); } else { Py::Dict py_wc_info; py_wc_info[str_schedule] = toEnumValue( info.schedule ); py_wc_info[str_copyfrom_url] = utf8_string_or_none( info.copyfrom_url ); py_wc_info[str_copyfrom_rev] = Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, info.copyfrom_rev ) ); py_wc_info[str_text_time] = toObject( info.text_time ); py_wc_info[str_prop_time] = toObject( info.prop_time ); py_wc_info[str_checksum] = utf8_string_or_none( info.checksum ); py_wc_info[str_conflict_old] = utf8_string_or_none( info.conflict_old ); py_wc_info[str_conflict_new] = utf8_string_or_none( info.conflict_new ); py_wc_info[str_conflict_work] = utf8_string_or_none( info.conflict_wrk ); py_wc_info[str_prejfile] = utf8_string_or_none( info.prejfile ); #ifdef PYSVN_HAS_SVN_INFO_T__CHANGELIST py_wc_info[str_changelist] = utf8_string_or_none( info.changelist ); py_wc_info[str_depth] = toEnumValue( info.depth ); #endif #ifdef PYSVN_HAS_SVN_INFO_T__SIZES #ifdef HAVE_LONG_LONG if( info.working_size == SVN_INFO_SIZE_UNKNOWN ) py_wc_info[str_working_size] = Py::None(); else py_wc_info[str_working_size] = Py::LongLong( static_cast( info.working_size ) ); if( info.size == SVN_INFO_SIZE_UNKNOWN ) py_wc_info[str_size] = Py::None(); else py_wc_info[str_size] = Py::LongLong( static_cast( info.size ) ); #else if( info.working_size == SVN_INFO_SIZE_UNKNOWN ) py_wc_info[str_working_size] = Py::None(); else py_wc_info[str_working_size] = Py::Int( static_cast( info.working_size ) ); if( info.size == SVN_INFO_SIZE_UNKNOWN ) py_wc_info[str_size] = Py::None(); else py_wc_info[str_size] = Py::Int( static_cast( info.size ) ); #endif #endif py_info[str_wc_info] = wrapper_wc_info.wrapDict( py_wc_info ); } return wrapper_info.wrapDict( py_info ); } #endif #if defined( PYSVN_HAS_CLIENT_LOCK ) Py::Object toObject ( const svn_lock_t &lock, const DictWrapper &wrapper_lock ) { Py::Dict py_lock; py_lock[str_path] = utf8_string_or_none( lock.path ); py_lock[str_token] = utf8_string_or_none( lock.token ); py_lock[str_owner] = utf8_string_or_none( lock.owner ); py_lock[str_comment] = utf8_string_or_none( lock.comment ); py_lock[str_is_dav_comment] = Py::Int( lock.is_dav_comment != 0 ); if( lock.creation_date == 0 ) { py_lock[str_creation_date] = Py::None(); } else { py_lock[str_creation_date] = toObject( lock.creation_date ); } if( lock.expiration_date == 0 ) { py_lock[str_expiration_date] = Py::None(); } else { py_lock[str_expiration_date] = toObject( lock.expiration_date ); } return wrapper_lock.wrapDict( py_lock ); } #endif Py::Object propsToObject( apr_hash_t *props, SvnPool &pool ) { Py::Dict py_prop_dict; for( apr_hash_index_t *hi = apr_hash_first( pool, props ); hi; hi = apr_hash_next( hi ) ) { const void *key = NULL; void *val = NULL; apr_hash_this (hi, &key, NULL, &val); const svn_string_t *propval = (const svn_string_t *)val; py_prop_dict[ Py::String( (const char *)key ) ] = Py::String( propval->data, (int)propval->len ); } return py_prop_dict; } void proplistToObject( Py::List &py_path_propmap_list, apr_array_header_t *props, SvnPool &pool ) { for (int j = 0; j < props->nelts; ++j) { svn_client_proplist_item_t *item = ((svn_client_proplist_item_t **)props->elts)[j]; Py::Object py_prop_dict( propsToObject( item->prop_hash, pool ) ); std::string node_name( item->node_name->data, item->node_name->len ); Py::Tuple py_path_proplist( 2 ); py_path_proplist[0] = Py::String( osNormalisedPath( node_name, pool ) ); py_path_proplist[1] = py_prop_dict; py_path_propmap_list.append( py_path_proplist ); } } Py::Object revnumListToObject( apr_array_header_t *revs, SvnPool &pool ) { Py::List py_list; for (int j = 0; j < revs->nelts; ++j) { svn_revnum_t revnum = ((svn_revnum_t *)revs->elts)[j]; Py::Object py_rev( Py::asObject( new pysvn_revision( svn_opt_revision_number, 0, revnum ) ) ); py_list.append( py_rev ); } return py_list; } Py::Bytes asUtf8Bytes( Py::Object obj ) { Py::String any( obj ); Py::Bytes utf8( any.encode( name_utf8 ) ); return utf8; } apr_array_header_t *targetsFromStringOrList( Py::Object arg, SvnPool &pool ) { int num_targets = 1; if( arg.isList() ) { Py::List paths( arg ); num_targets = paths.length(); } apr_array_header_t *targets = apr_array_make( pool, num_targets, sizeof( const char * ) ); std::string type_error_message; try { if( arg.isList() ) { Py::List path_list( arg ); for( Py::List::size_type i=0; ikind ); } return py_dirents_dict; } pysvn-1.7.8/Source/pysvn_enum_string.cpp000644 000771 000771 00000055207 12164243762 020767 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2011 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_enum_string.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" template <> EnumString< svn_opt_revision_kind >::EnumString() : m_type_name( "opt_revision_kind" ) { // No revision information given. add(svn_opt_revision_unspecified, "unspecified"); // revision given as number add(svn_opt_revision_number, "number"); // revision given as date add(svn_opt_revision_date, "date"); // rev of most recent change add(svn_opt_revision_committed, "committed"); // (rev of most recent change) - 1 add(svn_opt_revision_previous, "previous"); // .svn/entries current revision add(svn_opt_revision_base, "base"); // current, plus local mods add(svn_opt_revision_working, "working"); // repository youngest add(svn_opt_revision_head, "head"); } template <> EnumString< svn_wc_notify_action_t >::EnumString() : m_type_name( "wc_notify_action" ) { // Adding a path to revision control. add( svn_wc_notify_add, "add" ); // Copying a versioned path. add( svn_wc_notify_copy, "copy" ); // Deleting a versioned path. add( svn_wc_notify_delete, "delete" ); // Restoring a missing path from the pristine text-base. add( svn_wc_notify_restore, "restore" ); // Reverting a modified path. add( svn_wc_notify_revert, "revert" ); // A revert operation has failed. add( svn_wc_notify_failed_revert, "failed_revert" ); // Resolving a conflict. add( svn_wc_notify_resolved, "resolved" ); // Skipping a path. add( svn_wc_notify_skip, "skip" ); // Got a delete in an update. add( svn_wc_notify_update_delete, "update_delete" ); // Got an add in an update. add( svn_wc_notify_update_add, "update_add" ); // Got any other action in an update. add( svn_wc_notify_update_update, "update_update" ); // The last notification in an update (including updates of externals). add( svn_wc_notify_update_completed, "update_completed" ); // Updating an external module. add( svn_wc_notify_update_external, "update_external" ); // The last notification in a status (including status on externals). add( svn_wc_notify_status_completed, "status_completed" ); // Running status on an external module. add( svn_wc_notify_status_external, "status_external" ); // Committing a modification. add( svn_wc_notify_commit_modified, "commit_modified" ); // Committing an addition. add( svn_wc_notify_commit_added, "commit_added" ); // Committing a deletion. add( svn_wc_notify_commit_deleted, "commit_deleted" ); // Committing a replacement. add( svn_wc_notify_commit_replaced, "commit_replaced" ); // Transmitting post-fix text-delta data for a file. add( svn_wc_notify_commit_postfix_txdelta, "commit_postfix_txdelta" ); // Processed a single revision's blame. add( svn_wc_notify_blame_revision, "annotate_revision" ); #if defined( PYSVN_HAS_CLIENT_LOCK ) // Locking a path. add( svn_wc_notify_locked, "locked" ); //Unlocking a path. add( svn_wc_notify_unlocked, "unlocked" ); // Failed to lock a path. add( svn_wc_notify_failed_lock, "failed_lock" ); // Failed to unlock a path. add( svn_wc_notify_failed_unlock, "failed_unlock" ); #endif #if defined( PYSVN_HAS_SVN_WC_NOTIFY_ACTION_T__1_5 ) add( svn_wc_notify_exists, "exists" ); add( svn_wc_notify_changelist_set, "changelist_set" ); add( svn_wc_notify_changelist_clear, "changelist_clear" ); add( svn_wc_notify_changelist_moved, "changelist_moved" ); add( svn_wc_notify_merge_begin, "merge_begin" ); add( svn_wc_notify_foreign_merge_begin, "foreign_merge_begin" ); add( svn_wc_notify_update_replace, "update_replace" ); #endif #if defined( PYSVN_HAS_SVN_1_6 ) add( svn_wc_notify_property_added, "property_added" ); add( svn_wc_notify_property_modified, "property_modified" ); add( svn_wc_notify_property_deleted, "property_deleted" ); add( svn_wc_notify_property_deleted_nonexistent, "property_deleted_nonexistent" ); add( svn_wc_notify_revprop_set, "revprop_set" ); add( svn_wc_notify_revprop_deleted, "revprop_deleted" ); add( svn_wc_notify_merge_completed, "merge_completed" ); add( svn_wc_notify_tree_conflict, "tree_conflict" ); add( svn_wc_notify_failed_external, "failed_external" ); #endif #if defined( PYSVN_HAS_SVN_1_7 ) add( svn_wc_notify_update_started, "update_started" ); add( svn_wc_notify_update_skip_obstruction, "update_skip_obstruction" ); add( svn_wc_notify_update_skip_working_only, "update_skip_working_only" ); add( svn_wc_notify_update_external_removed, "update_external_removed" ); add( svn_wc_notify_update_shadowed_add, "update_shadowed_add" ); add( svn_wc_notify_update_shadowed_update, "update_shadowed_update" ); add( svn_wc_notify_update_shadowed_delete, "update_shadowed_delete" ); add( svn_wc_notify_merge_record_info, "merge_record_info" ); add( svn_wc_notify_upgraded_path, "upgraded_path" ); add( svn_wc_notify_merge_record_info_begin, "merge_record_info_begin" ); add( svn_wc_notify_merge_elide_info, "merge_elide_info" ); add( svn_wc_notify_patch, "patch" ); add( svn_wc_notify_patch_applied_hunk, "patch_applied_hunk" ); add( svn_wc_notify_patch_rejected_hunk, "patch_rejected_hunk" ); add( svn_wc_notify_patch_hunk_already_applied, "patch_hunk_already_applied" ); add( svn_wc_notify_commit_copied, "commit_copied" ); add( svn_wc_notify_commit_copied_replaced, "commit_copied_replaced" ); add( svn_wc_notify_url_redirect, "url_redirect" ); add( svn_wc_notify_path_nonexistent, "path_nonexistent" ); add( svn_wc_notify_exclude, "exclude" ); add( svn_wc_notify_failed_conflict, "failed_conflict" ); add( svn_wc_notify_failed_missing, "failed_missing" ); add( svn_wc_notify_failed_out_of_date, "failed_out_of_date" ); add( svn_wc_notify_failed_no_parent, "failed_no_parent" ); add( svn_wc_notify_failed_locked, "failed_locked" ); add( svn_wc_notify_failed_forbidden_by_server, "failed_forbidden_by_server" ); add( svn_wc_notify_skip_conflicted, "skip_conflicted" ); #endif #if defined( PYSVN_HAS_SVN_1_8 ) add( svn_wc_notify_update_broken_lock, "update_broken_lock" ); add( svn_wc_notify_failed_obstruction, "failed_obstruction" ); add( svn_wc_notify_conflict_resolver_starting, "conflict_resolver_starting" ); add( svn_wc_notify_conflict_resolver_done, "conflict_resolver_done" ); add( svn_wc_notify_left_local_modifications, "left_local_modifications" ); add( svn_wc_notify_foreign_copy_begin, "foreign_copy_begin" ); add( svn_wc_notify_move_broken, "move_broken" ); #endif } template <> EnumString< svn_wc_status_kind >::EnumString() : m_type_name( "wc_status_kind" ) { // does not exist add( svn_wc_status_none, "none" ); // is not a versioned thing in this wc add( svn_wc_status_unversioned, "unversioned" ); // exists, but uninteresting. add( svn_wc_status_normal, "normal" ); // is scheduled for addition add( svn_wc_status_added, "added" ); // under v.c., but is missing add( svn_wc_status_missing, "missing" ); // scheduled for deletion add( svn_wc_status_deleted, "deleted" ); // was deleted and then re-added add( svn_wc_status_replaced, "replaced" ); // text or props have been modified add( svn_wc_status_modified, "modified" ); // local mods received repos mods add( svn_wc_status_merged, "merged" ); // local mods received conflicting repos mods add( svn_wc_status_conflicted, "conflicted" ); // a resource marked as ignored add( svn_wc_status_ignored, "ignored" ); // an unversioned resource is in the way of the versioned resource add( svn_wc_status_obstructed, "obstructed" ); // an unversioned path populated by an svn:external property add( svn_wc_status_external, "external" ); // a directory doesn't contain a complete entries list add( svn_wc_status_incomplete, "incomplete" ); } template <> EnumString< svn_wc_merge_outcome_t >::EnumString() : m_type_name( "wc_merge_outcome" ) { // The working copy is (or would be) unchanged. // The changes to be merged were already present in the working copy add( svn_wc_merge_unchanged, "unchanged" ); // The working copy has been (or would be) changed. add( svn_wc_merge_merged, "merged" ); // The working copy has been (or would be) changed, // but there was (or would be) a conflict add( svn_wc_merge_conflict, "conflict" ); // No merge was performed, probably because the target // file was either absent or not under version control. add( svn_wc_merge_no_merge, "no_merge" ); } template <> EnumString< svn_wc_notify_state_t >::EnumString() : m_type_name( "wc_notify_state" ) { add( svn_wc_notify_state_inapplicable, "inapplicable" ); // Notifier doesn't know or isn't saying. add( svn_wc_notify_state_unknown, "unknown" ); // The state did not change. add( svn_wc_notify_state_unchanged, "unchanged" ); // The item wasn't present. add( svn_wc_notify_state_missing, "missing" ); // An unversioned item obstructed work. add( svn_wc_notify_state_obstructed, "obstructed" ); // Pristine state was modified. add( svn_wc_notify_state_changed, "changed" ); // Modified state had mods merged in. add( svn_wc_notify_state_merged, "merged" ); // Modified state got conflicting mods. add( svn_wc_notify_state_conflicted, "conflicted" ); } template <> EnumString< svn_wc_schedule_t >::EnumString() : m_type_name( "wc_schedule" ) { // Nothing special here add( svn_wc_schedule_normal, "normal" ); // Slated for addition add( svn_wc_schedule_add, "add" ); // Slated for deletion add( svn_wc_schedule_delete, "delete" ); // Slated for replacement (delete + add) add( svn_wc_schedule_replace, "replace" ); } template <> EnumString< svn_node_kind_t >::EnumString() : m_type_name( "node_kind" ) { // absent add( svn_node_none, "none" ); // regular file add( svn_node_file, "file" ); // directory add( svn_node_dir, "dir" ); // something's here, but we don't know what add( svn_node_unknown, "unknown" ); } #if defined( PYSVN_HAS_DIFF_FILE_IGNORE_SPACE ) template <> EnumString< svn_diff_file_ignore_space_t >::EnumString() : m_type_name( "diff_file_ignore_space" ) { add( svn_diff_file_ignore_space_none, "none" ); add( svn_diff_file_ignore_space_change, "change" ); add( svn_diff_file_ignore_space_all, "all" ); } #endif #if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE ) template <> EnumString< svn_client_diff_summarize_kind_t >::EnumString() : m_type_name( "diff_summarize" ) { /** An item with no text modifications */ add( svn_client_diff_summarize_kind_normal, "normal" ); /** An added item */ add( svn_client_diff_summarize_kind_added, "added" ); /** An item with text modifications */ add( svn_client_diff_summarize_kind_modified, "modified" ); /** A deleted item */ add( svn_client_diff_summarize_kind_deleted, "delete" ); } #endif #if defined( PYSVN_HAS_SVN_WC_CONFLICT_CHOICE_T ) template <> EnumString< svn_wc_conflict_action_t >::EnumString() : m_type_name( "conflict_action" ) { add( svn_wc_conflict_action_edit, "edit" ); add( svn_wc_conflict_action_add, "add" ); add( svn_wc_conflict_action_delete, "delete" ); } template <> EnumString< svn_wc_conflict_kind_t >::EnumString() : m_type_name( "conflict_kind" ) { add( svn_wc_conflict_kind_text, "text" ); add( svn_wc_conflict_kind_property, "property" ); } template <> EnumString< svn_wc_conflict_reason_t >::EnumString() : m_type_name( "conflict_reason" ) { // local edits are already present add( svn_wc_conflict_reason_edited, "edited" ); // another object is in the way add( svn_wc_conflict_reason_obstructed, "obstructed" ); // object is already schedule-delete add( svn_wc_conflict_reason_deleted, "deleted" ); // object is unknown or missing add( svn_wc_conflict_reason_missing, "missing" ); // object is unversioned add( svn_wc_conflict_reason_unversioned, "unversioned" ); #if defined( PYSVN_HAS_SVN_1_8 ) add( svn_wc_conflict_reason_moved_away, "moved_away" ); add( svn_wc_conflict_reason_moved_here, "moved_here" ); #endif } #endif #if defined( PYSVN_HAS_SVN__DEPTH_PARAMETER ) template <> EnumString< svn_depth_t >::EnumString() : m_type_name( "depth" ) { add( svn_depth_unknown, "unknown" ); add( svn_depth_exclude, "exclude" ); add( svn_depth_empty, "empty" ); add( svn_depth_files, "files" ); add( svn_depth_immediates, "immediates" ); add( svn_depth_infinity, "infinity" ); } #endif #if defined( PYSVN_HAS_SVN_WC_CONFLICT_CHOICE_T ) template <> EnumString< svn_wc_conflict_choice_t >::EnumString() : m_type_name( "wc_conflict_choice" ) { // Don't resolve the conflict now. Let libsvn_wc mark the path // 'conflicted', so user can run 'svn resolved' later. add( svn_wc_conflict_choose_postpone, "postpone" ); // If their were files to choose from, select one as a way of // resolving the conflict here and now. libsvn_wc will then do the // work of "installing" the chosen file. add( svn_wc_conflict_choose_base, "base" ); // user chooses the original version add( svn_wc_conflict_choose_theirs_full, "theirs_full" ); // user chooses incoming version add( svn_wc_conflict_choose_mine_full, "mine_full" ); // user chooses own version add( svn_wc_conflict_choose_theirs_conflict, "theirs_conflict" ); // user chooses incoming (for conflicted hunks) add( svn_wc_conflict_choose_mine_conflict, "mine_conflict" ); // user chooses own (for conflicted hunks) add( svn_wc_conflict_choose_merged, "merged" ); // user chooses the merged version } #endif #if defined( PYSVN_HAS_SVN_WC_OPERATION_T ) template <> EnumString< svn_wc_operation_t >::EnumString() : m_type_name( "wc_operation" ) { add( svn_wc_operation_none, "none" ); add( svn_wc_operation_update, "update" ); add( svn_wc_operation_switch, "switch" ); add( svn_wc_operation_merge, "merge" ); } #endif //-------------------------------------------------------------------------------- template <> void pysvn_enum< svn_opt_revision_kind >::init_type(void) { behaviors().name("opt_revision_kind"); behaviors().doc("opt_revision_kind enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_opt_revision_kind >::init_type(void) { behaviors().name("opt_revision_kind"); behaviors().doc("opt_revision_kind value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } template <> void pysvn_enum< svn_wc_notify_action_t >::init_type(void) { behaviors().name("wc_notify_action"); behaviors().doc("wc_notify_action enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_wc_notify_action_t >::init_type(void) { behaviors().name("wc_notify_action"); behaviors().doc("wc_notify_action value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } template <> void pysvn_enum< svn_wc_status_kind >::init_type(void) { behaviors().name("wc_status_kind"); behaviors().doc("wc_status_kind enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_wc_status_kind >::init_type(void) { behaviors().name("wc_status_kind"); behaviors().doc("wc_status_kind value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } template <> void pysvn_enum< svn_wc_schedule_t >::init_type(void) { behaviors().name("wc_schedule"); behaviors().doc("wc_schedule enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_wc_schedule_t >::init_type(void) { behaviors().name("wc_schedule"); behaviors().doc("wc_schedule value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } template <> void pysvn_enum< svn_wc_merge_outcome_t >::init_type(void) { behaviors().name("wc_merge_outcome"); behaviors().doc("wc_merge_outcome enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_wc_merge_outcome_t >::init_type(void) { behaviors().name("wc_merge_outcome"); behaviors().doc("wc_merge_outcome value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } template <> void pysvn_enum< svn_wc_notify_state_t >::init_type(void) { behaviors().name("wc_notify_state"); behaviors().doc("wc_notify_state enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_wc_notify_state_t >::init_type(void) { behaviors().name("wc_notify_state"); behaviors().doc("wc_notify_state value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } template <> void pysvn_enum< svn_node_kind_t >::init_type(void) { behaviors().name("node_kind"); behaviors().doc("node_kind enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_node_kind_t >::init_type(void) { behaviors().name("node_kind"); behaviors().doc("node_kind value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } #if defined( PYSVN_HAS_DIFF_FILE_IGNORE_SPACE ) template <> void pysvn_enum< svn_diff_file_ignore_space_t >::init_type(void) { behaviors().name("diff_file_ignore_space"); behaviors().doc("diff_file_ignore_space enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_diff_file_ignore_space_t >::init_type(void) { behaviors().name("diff_file_ignore_space"); behaviors().doc("diff_file_ignore_space value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } #endif #if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE ) template <> void pysvn_enum< svn_client_diff_summarize_kind_t >::init_type(void) { behaviors().name("client_diff_summarize_kind"); behaviors().doc("client_diff_summarize_kind enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_client_diff_summarize_kind_t >::init_type(void) { behaviors().name("client_diff_summarize_kind"); behaviors().doc("client_diff_summarize_kind value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } #endif #if defined( PYSVN_HAS_SVN__DEPTH_PARAMETER ) template <> void pysvn_enum< svn_depth_t >::init_type(void) { behaviors().name("depth"); behaviors().doc("depth enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_depth_t >::init_type(void) { behaviors().name("depth"); behaviors().doc("depth value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } #endif #if defined( PYSVN_HAS_SVN_WC_CONFLICT_CHOICE_T ) template <> void pysvn_enum< svn_wc_conflict_choice_t >::init_type(void) { behaviors().name("wc_conflict_choice"); behaviors().doc("wc_conflict_choice enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_wc_conflict_choice_t >::init_type(void) { behaviors().name("wc_conflict_choice"); behaviors().doc("wc_conflict_choice value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } template <> void pysvn_enum< svn_wc_conflict_action_t >::init_type(void) { behaviors().name("wc_conflict_action"); behaviors().doc("wc_conflict_action enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_wc_conflict_action_t >::init_type(void) { behaviors().name("wc_conflict_action"); behaviors().doc("wc_conflict_action value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } template <> void pysvn_enum< svn_wc_conflict_kind_t >::init_type(void) { behaviors().name("wc_conflict_kind"); behaviors().doc("wc_conflict_kind enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_wc_conflict_kind_t >::init_type(void) { behaviors().name("wc_conflict_kind"); behaviors().doc("wc_conflict_kind value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } template <> void pysvn_enum< svn_wc_conflict_reason_t >::init_type(void) { behaviors().name("wc_conflict_reason"); behaviors().doc("wc_conflict_reason enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_wc_conflict_reason_t >::init_type(void) { behaviors().name("wc_conflict_reason"); behaviors().doc("wc_conflict_reason value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } #endif #if defined( PYSVN_HAS_SVN_WC_OPERATION_T ) template <> void pysvn_enum< svn_wc_operation_t >::init_type(void) { behaviors().name("wc_operation"); behaviors().doc("wc_operation enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< svn_wc_operation_t >::init_type(void) { behaviors().name("wc_operation"); behaviors().doc("wc_operation value"); behaviors().supportCompare(); behaviors().supportRichCompare(); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } #endif pysvn-1.7.8/Source/pysvn_path.cpp000644 000771 000771 00000005102 12136240632 017346 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include #include "svn_path.h" #include #include // SVN lives in a world of its own for URL and path syntax // here are routines to convert from OS conventions to SVN's // is this a path of a url svn? bool is_svn_url( const std::string &path_or_url ) { return svn_path_is_url( path_or_url.c_str() ) != 0; } // convert a path or URL to what SVN likes std::string svnNormalisedIfPath( const std::string &unnormalised, SvnPool &pool ) { if( is_svn_url( unnormalised ) ) { return svnNormalisedUrl( unnormalised, pool ); } else { return svnNormalisedPath( unnormalised, pool ); } } #if defined(PYSVN_HAS_SVN_1_7) std::string svnNormalisedUrl( const std::string &unnormalised, SvnPool &pool ) { const char *normalised_path = svn_uri_canonicalize( unnormalised.c_str(), pool ); return std::string( normalised_path ); } std::string svnNormalisedPath( const std::string &unnormalised, SvnPool &pool ) { const char *normalised_path = svn_dirent_internal_style( unnormalised.c_str(), pool ); return std::string( normalised_path ); } // convert a path to what the native OS likes std::string osNormalisedPath( const std::string &unnormalised, SvnPool &pool ) { const char *local_path = svn_dirent_local_style( unnormalised.c_str(), pool ); return std::string( local_path ); } #else std::string svnNormalisedUrl( const std::string &unnormalised, SvnPool &pool ) { const char *normalised_path = svn_path_canonicalize( unnormalised.c_str(), pool ); return std::string( normalised_path ); } std::string svnNormalisedPath( const std::string &unnormalised, SvnPool &pool ) { const char *normalised_path = svn_path_internal_style( unnormalised.c_str(), pool ); return std::string( normalised_path ); } // convert a path to what the native OS likes std::string osNormalisedPath( const std::string &unnormalised, SvnPool &pool ) { const char *local_path = svn_path_local_style( unnormalised.c_str(), pool ); return std::string( local_path ); } #endif pysvn-1.7.8/Source/pysvn_profile.cpp000644 000771 000771 00000001026 11132131027 020043 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_profile.cpp // // Functions to help profile performance of the pysvn code // #ifdef WIN32 #include int elapse_time() { return GetTickCount(); } #endif pysvn-1.7.8/Source/pysvn_revision.cpp000644 000771 000771 00000007344 11132131027 020252 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_revision.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_docs.hpp" //-------------------------------------------------------------------------------- static apr_time_t toAprTime( double t_in ) { return apr_time_t( t_in * 1000000 ); } pysvn_revision::pysvn_revision ( svn_opt_revision_kind kind, double date, int revnum ) { memset( &m_svn_revision, 0, sizeof( m_svn_revision ) ); m_svn_revision.kind = kind; if( kind == svn_opt_revision_date ) m_svn_revision.value.date = toAprTime( date ); if( kind == svn_opt_revision_number ) m_svn_revision.value.number = revnum; } pysvn_revision::~pysvn_revision() { } const svn_opt_revision_t &pysvn_revision::getSvnRevision() const { return m_svn_revision; } Py::Object pysvn_revision::repr() { std::string s("( m_svn_revision.kind ) ); } else if( name == "date" ) { if( m_svn_revision.kind == svn_opt_revision_date ) return Py::Float( double( m_svn_revision.value.date )/1000000 ); else return Py::None(); } else if( name == "number" ) { if( m_svn_revision.kind == svn_opt_revision_number ) return Py::Int( m_svn_revision.value.number ); else return Py::None(); } return getattr_methods( _name ); } int pysvn_revision::setattr( const char *_name, const Py::Object &value ) { std::string name( _name ); if( name == "kind" ) { Py::ExtensionObject< pysvn_enum_value > kind( value ); m_svn_revision.kind = svn_opt_revision_kind( kind.extensionObject()->m_value ); } else if( name == "date" ) { Py::Float py_date( value ); m_svn_revision.value.date = toAprTime( double( py_date ) ); } else if( name == "number" ) { Py::Int revnum( value ); m_svn_revision.value.number = revnum; } else throw Py::AttributeError( "Unknown revision attribute" ); return 0; } void pysvn_revision::init_type() { behaviors().name("revision"); behaviors().doc( pysvn_revision_doc ); behaviors().supportGetattr(); behaviors().supportRepr(); } pysvn-1.7.8/Source/pysvn_static_strings.cpp000644 000771 000771 00000001424 11132131027 021445 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_static_strings.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #undef PYSVN_STATIC_PY_STRINGS_HPP #define PYSVN_STATIC_STRING( name, value ) const char name[] = value; #define PYSVN_STATIC_PY_STRING_P( name ) Py::String *name; #include "pysvn_static_strings.hpp" pysvn-1.7.8/Source/pysvn_static_strings.hpp000644 000771 000771 00000020446 12075600054 021467 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_static_strings.hpp // #ifndef PYSVN_STATIC_PY_STRINGS_HPP #define PYSVN_STATIC_PY_STRINGS_HPP 1 #ifndef PYSVN_STATIC_STRING #define PYSVN_STATIC_STRING( name, value ) const char name[] = value; #define PYSVN_STATIC_PY_STRING_P( name ) extern Py::String *name; #endif PYSVN_STATIC_STRING( empty_string, "" ) PYSVN_STATIC_STRING( name___members__, "__members__" ) PYSVN_STATIC_STRING( name_action, "action" ) PYSVN_STATIC_STRING( name_add_parents, "add_parents" ) PYSVN_STATIC_STRING( name_allow_unver_obstructions, "allow_unver_obstructions" ) PYSVN_STATIC_STRING( name_author, "author" ) PYSVN_STATIC_STRING( name_base_revision_for_url, "base_revision_for_url" ) PYSVN_STATIC_STRING( name_callback_cancel, "callback_cancel" ) PYSVN_STATIC_STRING( name_callback_get_log_message, "callback_get_log_message" ) PYSVN_STATIC_STRING( name_callback_get_login, "callback_get_login" ) PYSVN_STATIC_STRING( name_callback_notify, "callback_notify" ) PYSVN_STATIC_STRING( name_callback_progress, "callback_progress" ) PYSVN_STATIC_STRING( name_callback_conflict_resolver, "callback_conflict_resolver" ) PYSVN_STATIC_STRING( name_callback_ssl_client_cert_password_prompt, "callback_ssl_client_cert_password_prompt" ) PYSVN_STATIC_STRING( name_callback_ssl_client_cert_prompt, "callback_ssl_client_cert_prompt" ) PYSVN_STATIC_STRING( name_callback_ssl_server_prompt, "callback_ssl_server_prompt" ) PYSVN_STATIC_STRING( name_callback_ssl_server_trust_prompt, "callback_ssl_server_trust_prompt" ) PYSVN_STATIC_STRING( name_changed_paths, "changed_paths" ) PYSVN_STATIC_STRING( name_changelist, "changelist" ) PYSVN_STATIC_STRING( name_changelists, "changelists" ) PYSVN_STATIC_STRING( name_comment, "comment" ) PYSVN_STATIC_STRING( name_commit_info_style, "commit_info_style" ) PYSVN_STATIC_STRING( name_conflict_choice, "conflict_choice" ) PYSVN_STATIC_STRING( name_copy_as_child, "copy_as_child" ) PYSVN_STATIC_STRING( name_copyfrom_path, "copyfrom_path" ) PYSVN_STATIC_STRING( name_copyfrom_revision, "copyfrom_revision" ) PYSVN_STATIC_STRING( name_created_rev, "created_rev" ) PYSVN_STATIC_STRING( name_date, "date" ) PYSVN_STATIC_STRING( name_depth, "depth" ) PYSVN_STATIC_STRING( name_depth_is_sticky, "depth_is_sticky" ) PYSVN_STATIC_STRING( name_dest_path, "dest_path" ) PYSVN_STATIC_STRING( name_dest_url_or_path, "dest_url_or_path" ) PYSVN_STATIC_STRING( name_diff_deleted, "diff_deleted" ) PYSVN_STATIC_STRING( name_diff_options, "diff_options" ) PYSVN_STATIC_STRING( name_dirent_fields, "dirent_fields" ) PYSVN_STATIC_STRING( name_discover_changed_paths, "discover_changed_paths" ) PYSVN_STATIC_STRING( name_dry_run, "dry_run" ) PYSVN_STATIC_STRING( name_enable, "enable" ) PYSVN_STATIC_STRING( name_exception_style, "exception_style" ) PYSVN_STATIC_STRING( name_fetch_locks, "fetch_locks" ) PYSVN_STATIC_STRING( name_force, "force" ) PYSVN_STATIC_STRING( name_from_url, "from_url" ) PYSVN_STATIC_STRING( name_get_all, "get_all" ) PYSVN_STATIC_STRING( name_has_props, "has_props" ) PYSVN_STATIC_STRING( name_header_encoding, "header_encoding" ) PYSVN_STATIC_STRING( name_ignore, "ignore" ) PYSVN_STATIC_STRING( name_ignore_ancestry, "ignore_ancestry" ) PYSVN_STATIC_STRING( name_ignore_content_type, "ignore_content_type" ) PYSVN_STATIC_STRING( name_ignore_eol_style, "ignore_eol_style" ) PYSVN_STATIC_STRING( name_ignore_externals, "ignore_externals" ) PYSVN_STATIC_STRING( name_ignore_keywords, "ignore_keywords" ) PYSVN_STATIC_STRING( name_ignore_mime_type, "ignore_mime_type" ) PYSVN_STATIC_STRING( name_ignore_space, "ignore_space" ) PYSVN_STATIC_STRING( name_ignore_unknown_node_types, "ignore_unknown_node_types" ) PYSVN_STATIC_STRING( name_include_merged_revisions, "include_merged_revisions" ) PYSVN_STATIC_STRING( name_is_revision, "is_revision" ) PYSVN_STATIC_STRING( name_keep_changelist, "keep_changelist" ) PYSVN_STATIC_STRING( name_keep_local, "keep_local" ) PYSVN_STATIC_STRING( name_keep_locks, "keep_locks" ) PYSVN_STATIC_STRING( name_kind, "kind" ) PYSVN_STATIC_STRING( name_last_author, "last_author" ) PYSVN_STATIC_STRING( name_limit, "limit" ) PYSVN_STATIC_STRING( name_line, "line" ) PYSVN_STATIC_STRING( name_local_path, "local_path" ) PYSVN_STATIC_STRING( name_lock, "lock" ) PYSVN_STATIC_STRING( name_log_message, "log_message" ) PYSVN_STATIC_STRING( name_make_parents, "make_parents" ) PYSVN_STATIC_STRING( name_merge_options, "merge_options" ) PYSVN_STATIC_STRING( name_message, "message" ) PYSVN_STATIC_STRING( name_move_as_child, "move_as_child" ) PYSVN_STATIC_STRING( name_name, "name" ) PYSVN_STATIC_STRING( name_native_eol, "native_eol" ) PYSVN_STATIC_STRING( name_node_kind, "node_kind" ) PYSVN_STATIC_STRING( name_notice_ancestry, "notice_ancestry" ) PYSVN_STATIC_STRING( name_number, "number" ) PYSVN_STATIC_STRING( name_password, "password" ) PYSVN_STATIC_STRING( name_path, "path" ) PYSVN_STATIC_STRING( name_peg_revision, "peg_revision" ) PYSVN_STATIC_STRING( name_prop_changed, "prop_changed" ) PYSVN_STATIC_STRING( name_prop_name, "prop_name" ) PYSVN_STATIC_STRING( name_prop_value, "prop_value" ) PYSVN_STATIC_STRING( name_ranges_to_merge, "ranges_to_merge" ) PYSVN_STATIC_STRING( name_record_only, "record_only" ) PYSVN_STATIC_STRING( name_recurse, "recurse" ) PYSVN_STATIC_STRING( name_relative_to_dir, "relative_to_dir" ) PYSVN_STATIC_STRING( name_repos_path, "repos_path" ) PYSVN_STATIC_STRING( name_revision1, "revision1" ) PYSVN_STATIC_STRING( name_revision2, "revision2" ) PYSVN_STATIC_STRING( name_revision, "revision" ) PYSVN_STATIC_STRING( name_revision_end, "revision_end" ) PYSVN_STATIC_STRING( name_revision_start, "revision_start" ) PYSVN_STATIC_STRING( name_revprops, "revprops" ) PYSVN_STATIC_STRING( name_size, "size" ) PYSVN_STATIC_STRING( name_skip_checks, "skip_checks" ) PYSVN_STATIC_STRING( name_sources, "sources" ) PYSVN_STATIC_STRING( name_src_revision, "src_revision" ) PYSVN_STATIC_STRING( name_src_url_or_path, "src_url_or_path" ) PYSVN_STATIC_STRING( name_strict_node_history, "strict_node_history" ) PYSVN_STATIC_STRING( name_summarize_kind, "summarize_kind" ) PYSVN_STATIC_STRING( name_target_wcpath, "target_wcpath" ) PYSVN_STATIC_STRING( name_time, "time" ) PYSVN_STATIC_STRING( name_tmp_path, "tmp_path" ) PYSVN_STATIC_STRING( name_to_url, "to_url" ) PYSVN_STATIC_STRING( name_unlock, "unlock" ) PYSVN_STATIC_STRING( name_update, "update" ) PYSVN_STATIC_STRING( name_url, "url" ) PYSVN_STATIC_STRING( name_url_or_path1, "url_or_path1" ) PYSVN_STATIC_STRING( name_url_or_path2, "url_or_path2" ) PYSVN_STATIC_STRING( name_url_or_path, "url_or_path" ) PYSVN_STATIC_STRING( name_username, "username" ) PYSVN_STATIC_STRING( name_utf8, "utf-8" ) PYSVN_STATIC_STRING( name_transaction_name, "transaction_name" ) PYSVN_STATIC_STRING( name_config_dir, "config_dir" ) PYSVN_STATIC_STRING( name_result_wrappers, "result_wrappers" ) PYSVN_STATIC_STRING( name_copy_info, "copy_info" ) PYSVN_STATIC_PY_STRING_P( py_name_callback_cancel ) PYSVN_STATIC_PY_STRING_P( py_name_callback_conflict_resolver ) PYSVN_STATIC_PY_STRING_P( py_name_callback_get_log_message ) PYSVN_STATIC_PY_STRING_P( py_name_callback_get_login ) PYSVN_STATIC_PY_STRING_P( py_name_callback_notify ) PYSVN_STATIC_PY_STRING_P( py_name_callback_ssl_client_cert_password_prompt ) PYSVN_STATIC_PY_STRING_P( py_name_callback_ssl_client_cert_prompt ) PYSVN_STATIC_PY_STRING_P( py_name_callback_ssl_server_prompt ) PYSVN_STATIC_PY_STRING_P( py_name_callback_ssl_server_trust_prompt ) PYSVN_STATIC_PY_STRING_P( py_name_commit_info_style ) PYSVN_STATIC_PY_STRING_P( py_name_created_rev ) PYSVN_STATIC_PY_STRING_P( py_name_exception_style ) PYSVN_STATIC_PY_STRING_P( py_name_has_props ) PYSVN_STATIC_PY_STRING_P( py_name_kind ) PYSVN_STATIC_PY_STRING_P( py_name_last_author ) PYSVN_STATIC_PY_STRING_P( py_name_name ) PYSVN_STATIC_PY_STRING_P( py_name_node_kind ) PYSVN_STATIC_PY_STRING_P( py_name_path ) PYSVN_STATIC_PY_STRING_P( py_name_prop_changed ) PYSVN_STATIC_PY_STRING_P( py_name_repos_path ) PYSVN_STATIC_PY_STRING_P( py_name_size ) PYSVN_STATIC_PY_STRING_P( py_name_summarize_kind ) PYSVN_STATIC_PY_STRING_P( py_name_time ) #undef PYSVN_STATIC_STRING #undef PYSVN_STATIC_PY_STRING_P #endif pysvn-1.7.8/Source/pysvn_svnenv.cpp000644 000771 000771 00000045346 11471734335 017760 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // #include "pysvn_svnenv.hpp" #include "svn_config.h" #include "svn_pools.h" #include "CXX/Objects.hxx" //-------------------------------------------------------------------------------- // // SvnException // //-------------------------------------------------------------------------------- SvnException::SvnException( svn_error_t *error ) : m_message() , m_exception_arg() { std::string whole_message; // set the error to be a list of (code, message) tuples Py::List error_list; while( error != NULL ) { Py::Tuple t( 2 ); if( !whole_message.empty() ) { whole_message += "\n"; } if( error->message != NULL ) { t[0] = Py::String( error->message ); whole_message += error->message; } else { char buffer[256]; buffer[0] = '\0'; svn_strerror( error->apr_err, buffer, sizeof( buffer ) ); whole_message += buffer; t[0] = Py::String( buffer ); } t[1] = Py::Int( error->apr_err ); error_list.append( t ); error = error->child; } m_message = Py::String( whole_message ); Py::Tuple arg_list(2); arg_list[0] = m_message; arg_list[1] = error_list; m_exception_arg = arg_list; svn_error_clear( error ); } SvnException::SvnException( const SvnException &other ) : m_code( other.m_code ) , m_message( other.m_message ) , m_exception_arg( other.m_exception_arg ) { } SvnException::~SvnException() { } Py::String &SvnException::message() { return m_message; } apr_status_t SvnException::code() { return m_code; } Py::Object &SvnException::pythonExceptionArg( int style ) { if( style == 1 ) { return m_exception_arg; } else { return m_message; } } //-------------------------------------------------------------------------------- // // SvnContext // //-------------------------------------------------------------------------------- #if defined( PYSVN_HAS_CONTEXT_LOG_MSG2 ) extern "C" svn_error_t *handlerLogMsg2 ( const char **log_msg, const char **tmp_file, const apr_array_header_t *commit_items, void *baton, apr_pool_t *pool ) { SvnContext *context = reinterpret_cast( baton ); std::string msg; if (!context->contextGetLogMessage( msg ) ) return svn_error_create( SVN_ERR_CANCELLED, NULL, "" ); *log_msg = svn_string_ncreate( msg.data(), msg.length(), pool )->data; *tmp_file = NULL; return SVN_NO_ERROR; } #else extern "C" svn_error_t *handlerLogMsg ( const char **log_msg, const char **tmp_file, apr_array_header_t *commit_items, void *baton, apr_pool_t *pool ) { SvnContext *context = reinterpret_cast( baton ); std::string msg; if (!context->contextGetLogMessage( msg ) ) return svn_error_create( SVN_ERR_CANCELLED, NULL, "" ); *log_msg = svn_string_ncreate( msg.data(), msg.length(), pool )->data; *tmp_file = NULL; return SVN_NO_ERROR; } #endif #if defined( PYSVN_HAS_CONTEXT_NOTIFY2 ) extern "C" void handlerNotify2 ( void *baton, const svn_wc_notify_t *notify, apr_pool_t *pool ) { SvnContext *context = reinterpret_cast( baton ); context->contextNotify2( notify, pool ); } #else extern "C" void handlerNotify ( void * baton, const char *path, svn_wc_notify_action_t action, svn_node_kind_t kind, const char *mime_type, svn_wc_notify_state_t content_state, svn_wc_notify_state_t prop_state, svn_revnum_t revision ) { pysvn_bpt(); SvnContext *context = reinterpret_cast( baton ); context->contextNotify( path, action, kind, mime_type, content_state, prop_state, revision ); } #endif #if defined( PYSVN_HAS_CONTEXT_PROGRESS ) extern "C" void handlerProgress ( apr_off_t progress, apr_off_t total, void *baton, apr_pool_t *pool ) { SvnContext *context = reinterpret_cast( baton ); context->contextProgress( progress, total ); } #endif #if defined( PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC ) extern "C" svn_error_t *handlerConflictResolver ( svn_wc_conflict_result_t **result, const svn_wc_conflict_description_t *description, void *baton, apr_pool_t *pool ) { SvnContext *context = reinterpret_cast( baton ); if( context->contextConflictResolver( result, description, pool ) ) return SVN_NO_ERROR; else return svn_error_create( SVN_ERR_CANCELLED, NULL, "cancelled by user" ); } #endif extern "C" svn_error_t *handlerCancel ( void * baton ) { SvnContext *context = reinterpret_cast( baton ); if( context->contextCancel() ) return svn_error_create( SVN_ERR_CANCELLED, NULL, "cancelled by user" ); else return SVN_NO_ERROR; } extern "C" svn_error_t *handlerSimplePrompt ( svn_auth_cred_simple_t **cred, void *baton, const char *a_realm, const char *a_username, svn_boolean_t a_may_save, apr_pool_t *pool ) { SvnContext *context = reinterpret_cast( baton ); bool may_save = a_may_save != 0; if( a_realm == NULL ) a_realm = ""; if( a_username == NULL ) a_username = ""; std::string realm( a_realm ); std::string username( a_username ); std::string password; if( !context->contextGetLogin( realm, username, password, may_save ) ) return svn_error_create( SVN_ERR_CANCELLED, NULL, "" ); svn_auth_cred_simple_t *lcred = (svn_auth_cred_simple_t *)apr_palloc( pool, sizeof( svn_auth_cred_simple_t ) ); lcred->username = svn_string_ncreate( username.data(), username.length(), pool )->data; lcred->password = svn_string_ncreate( password.data(), password.length(), pool )->data; // tell svn if the credentials need to be saved lcred->may_save = may_save; *cred = lcred; return SVN_NO_ERROR; } extern "C" svn_error_t *handlerSslServerTrustPrompt ( svn_auth_cred_ssl_server_trust_t **cred, void *baton, const char *a_realm, apr_uint32_t failures, const svn_auth_ssl_server_cert_info_t *info, svn_boolean_t may_save, apr_pool_t *pool ) { SvnContext *context = reinterpret_cast( baton ); apr_uint32_t accepted_failures = failures; bool accept_permanently = true; if( a_realm == NULL ) a_realm = ""; std::string realm( a_realm ); if( !context->contextSslServerTrustPrompt( *info, realm, accepted_failures, accept_permanently ) ) { *cred = NULL; return SVN_NO_ERROR; } svn_auth_cred_ssl_server_trust_t *new_cred = (svn_auth_cred_ssl_server_trust_t *) apr_palloc( pool, sizeof (svn_auth_cred_ssl_server_trust_t) ); if( accept_permanently ) { new_cred->may_save = 1; new_cred->accepted_failures = accepted_failures; } *cred = new_cred; return SVN_NO_ERROR; } extern "C" svn_error_t *handlerSslClientCertPrompt ( svn_auth_cred_ssl_client_cert_t **cred, void *baton, const char *a_realm, svn_boolean_t a_may_save, apr_pool_t *pool ) { SvnContext *context = reinterpret_cast( baton ); if( a_realm == NULL ) a_realm = ""; std::string realm( a_realm ); bool may_save = a_may_save != 0; std::string cert_file; if( !context->contextSslClientCertPrompt( cert_file, realm, may_save ) ) return svn_error_create (SVN_ERR_CANCELLED, NULL, ""); svn_auth_cred_ssl_client_cert_t *new_cred = (svn_auth_cred_ssl_client_cert_t*) apr_palloc (pool, sizeof (svn_auth_cred_ssl_client_cert_t)); new_cred->cert_file = svn_string_ncreate( cert_file.data(), cert_file.length(), pool )->data; new_cred->may_save = may_save; *cred = new_cred; return SVN_NO_ERROR; } extern "C" svn_error_t *handlerSslClientCertPwPrompt ( svn_auth_cred_ssl_client_cert_pw_t **cred, void *baton, const char *a_realm, svn_boolean_t a_may_save, apr_pool_t *pool ) { SvnContext *context = reinterpret_cast( baton ); if( a_realm == NULL ) a_realm = ""; std::string realm( a_realm ); std::string password; bool may_save = a_may_save != 0; if( !context->contextSslClientCertPwPrompt( password, realm, may_save ) ) return svn_error_create( SVN_ERR_CANCELLED, NULL, "" ); svn_auth_cred_ssl_client_cert_pw_t *new_cred = (svn_auth_cred_ssl_client_cert_pw_t *) apr_palloc (pool, sizeof (svn_auth_cred_ssl_client_cert_pw_t)); new_cred->password = svn_string_ncreate( password.data(), password.length(), pool )->data; new_cred->may_save = may_save; *cred = new_cred; return SVN_NO_ERROR; } SvnContext::SvnContext( const std::string &config_dir_str ) : m_pool( NULL ) , m_context( NULL ) , m_config_dir( NULL ) { memset( &m_context, 0, sizeof( m_context ) ); apr_pool_create( &m_pool, NULL ); svn_client_create_context( &m_context, m_pool ); if( !config_dir_str.empty() ) { m_config_dir = new char[config_dir_str.size() + 1]; strcpy( m_config_dir, config_dir_str.c_str() ); } svn_config_ensure( m_config_dir, m_pool ); #if defined( PYSVN_HAS_SVN_AUTH_PROVIDERS ) apr_array_header_t *providers = apr_array_make( m_pool, 11, sizeof( svn_auth_provider_object_t * ) ); // simple providers svn_auth_provider_object_t *provider = NULL; #if defined( WIN32 ) svn_auth_get_windows_simple_provider(&provider, m_pool); *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; #endif #if defined( DARWIN ) svn_auth_get_keychain_simple_provider(&provider, m_pool); *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; #endif #if defined( PYSVN_HAS_AUTH_GET_SIMPLE_PROVIDER2 ) svn_auth_get_simple_provider2( &provider, NULL, NULL, m_pool ); #else svn_auth_get_simple_provider( &provider, m_pool ); #endif *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; svn_auth_get_username_provider( &provider, m_pool ); *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; svn_auth_get_simple_prompt_provider( &provider, handlerSimplePrompt, this, 1000000, m_pool ); *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; // ssl providers // order is important - file first then prompt providers svn_auth_get_ssl_server_trust_file_provider( &provider, m_pool ); *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; svn_auth_get_ssl_client_cert_file_provider( &provider, m_pool ); *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; #if defined( PYSVN_HAS_AUTH_GET_SSL_CLIENT_CERT_PW_FILE_PROVIDER2 ) svn_auth_get_ssl_client_cert_pw_file_provider2( &provider, NULL, NULL, m_pool ); #else svn_auth_get_ssl_client_cert_pw_file_provider( &provider, m_pool ); #endif *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; svn_auth_get_ssl_server_trust_prompt_provider( &provider, handlerSslServerTrustPrompt, this, m_pool ); *(svn_auth_provider_object_t **)apr_array_push (providers) = provider; svn_auth_get_ssl_client_cert_prompt_provider( &provider, handlerSslClientCertPrompt, this, 3, m_pool ); *(svn_auth_provider_object_t **)apr_array_push (providers) = provider; svn_auth_get_ssl_client_cert_pw_prompt_provider( &provider, handlerSslClientCertPwPrompt, this, 3, m_pool ); *(svn_auth_provider_object_t **)apr_array_push (providers) = provider; #else // Pre 1.4.0 version apr_array_header_t *providers = apr_array_make( m_pool, 8, sizeof( svn_auth_provider_object_t * ) ); // simple providers svn_auth_provider_object_t *provider = NULL; svn_client_get_simple_provider( &provider, m_pool ); *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; svn_client_get_username_provider( &provider, m_pool ); *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; svn_client_get_simple_prompt_provider( &provider, handlerSimplePrompt, this, 3, m_pool ); *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; // ssl providers // order is important - file first then prompt providers svn_client_get_ssl_server_trust_file_provider( &provider, m_pool ); *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; svn_client_get_ssl_client_cert_file_provider( &provider, m_pool ); *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; svn_client_get_ssl_client_cert_pw_file_provider( &provider, m_pool ); *(svn_auth_provider_object_t **)apr_array_push( providers ) = provider; svn_client_get_ssl_server_trust_prompt_provider( &provider, handlerSslServerTrustPrompt, this, m_pool ); *(svn_auth_provider_object_t **)apr_array_push (providers) = provider; svn_client_get_ssl_client_cert_prompt_provider( &provider, handlerSslClientCertPrompt, this, 3, m_pool ); *(svn_auth_provider_object_t **)apr_array_push (providers) = provider; svn_client_get_ssl_client_cert_pw_prompt_provider( &provider, handlerSslClientCertPwPrompt, this, 3, m_pool ); *(svn_auth_provider_object_t **)apr_array_push (providers) = provider; #endif svn_auth_baton_t *auth_baton = NULL; svn_auth_open( &auth_baton, providers, m_pool ); // get the config based on the config dir passed in svn_config_get_config( &m_context->config, m_config_dir, m_pool ); // tell the auth functions where the config dir is svn_auth_set_parameter( auth_baton, SVN_AUTH_PARAM_CONFIG_DIR, m_config_dir ); m_context->auth_baton = auth_baton; #if defined( PYSVN_HAS_CONTEXT_LOG_MSG2 ) m_context->log_msg_func2 = handlerLogMsg2; m_context->log_msg_baton2 = this; #else m_context->log_msg_func = handlerLogMsg; m_context->log_msg_baton = this; #endif } void SvnContext::installCancel( bool install ) { if( install ) { m_context->cancel_func = handlerCancel; m_context->cancel_baton = this; } else { m_context->cancel_func = NULL; m_context->cancel_baton = NULL; } } void SvnContext::installNotify( bool install ) { if( install ) { #if defined( PYSVN_HAS_CONTEXT_NOTIFY2 ) m_context->notify_func2 = handlerNotify2; m_context->notify_baton2 = this; #else m_context->notify_func = handlerNotify; m_context->notify_baton = this; #endif } else { #if defined( PYSVN_HAS_CONTEXT_NOTIFY2 ) m_context->notify_func2 = NULL; m_context->notify_baton2 = NULL; #else m_context->notify_func = NULL; m_context->notify_baton = NULL; #endif } } #if defined( PYSVN_HAS_CONTEXT_PROGRESS ) void SvnContext::installProgress( bool install ) { if( install ) { m_context->progress_func = handlerProgress; m_context->progress_baton = this; } else { m_context->progress_func = handlerProgress; m_context->progress_baton = this; } } #endif #if defined( PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC ) void SvnContext::installConflictResolver( bool install ) { if( install ) { m_context->conflict_func = handlerConflictResolver; m_context->conflict_baton = this; } else { m_context->conflict_func = NULL; m_context->conflict_baton = NULL; } } #endif SvnContext::~SvnContext() { delete m_config_dir; if( m_pool ) { apr_pool_destroy( m_pool ); } } SvnContext::operator svn_client_ctx_t *() { return m_context; } svn_client_ctx_t *SvnContext::ctx() { return m_context; } // only use this pool for data that has a life time // that matches the life time of the context apr_pool_t *SvnContext::getContextPool() { return m_pool; } //-------------------------------------------------------------------------------- // // SvnTransaction // //-------------------------------------------------------------------------------- SvnTransaction::SvnTransaction() : m_pool( NULL ) , m_repos( NULL ) , m_fs( NULL ) , m_txn( NULL ) , m_txn_name( NULL ) , m_rev_id( SVN_INVALID_REVNUM ) { apr_pool_create( &m_pool, NULL ); } svn_error_t *SvnTransaction::init( const std::string &repos_path, const std::string &transaction_name, bool is_revision ) { svn_error_t *error; error = svn_repos_open( &m_repos, repos_path.c_str(), m_pool ); if( error != NULL ) return error; m_fs = svn_repos_fs( m_repos ); // what is a warning function? // svn_fs_set_warning_func (m_fs, warning_func, NULL); if( is_revision ) { Py::String rev_name( transaction_name ); Py::Long long_val( rev_name ); m_rev_id = (long)long_val; if (! SVN_IS_VALID_REVNUM( m_rev_id )) return svn_error_create( SVN_ERR_CL_ARG_PARSING_ERROR, NULL, "invalid revision number supplied" ); } else { m_txn_name = apr_pstrdup( m_pool, transaction_name.c_str() ); error = svn_fs_open_txn( &m_txn, m_fs, m_txn_name, m_pool ); } return error; } SvnTransaction::~SvnTransaction() { } svn_error_t *SvnTransaction::root( svn_fs_root_t **root, apr_pool_t *pool ) { if( is_revision() ) return svn_fs_revision_root( root, m_fs, m_rev_id, pool ); else return svn_fs_txn_root( root, m_txn, pool ); } SvnTransaction::operator svn_fs_txn_t *() { return m_txn; } SvnTransaction::operator svn_fs_t *() { return m_fs; } SvnTransaction::operator svn_repos_t *() { return m_repos; } svn_fs_txn_t *SvnTransaction::transaction() { return m_txn; } svn_revnum_t SvnTransaction::revision() { return m_rev_id; } //-------------------------------------------------------------------------------- // // Pool // //-------------------------------------------------------------------------------- SvnPool::SvnPool( SvnContext &ctx ) : m_pool( NULL ) { m_pool = svn_pool_create( NULL ); } SvnPool::SvnPool( SvnTransaction &txn ) : m_pool( NULL ) { m_pool = svn_pool_create( NULL ); } SvnPool::~SvnPool() { if( m_pool != NULL ) { svn_pool_destroy( m_pool ); } } SvnPool::operator apr_pool_t *() const { return m_pool; } #if 0 // keep around as it useful for debugging pysvn static const char *toHex( unsigned int num ) { static char buffer[9]; for( int i=0; i<8; i++ ) { buffer[i] = "0123456789abcdef"[ (num >> (32-(i+1)*4)) & 0x0f ]; } buffer[8] = '\0'; return buffer; } #endif pysvn-1.7.8/Source/pysvn_svnenv.hpp000644 000771 000771 00000027614 12164243762 017762 0ustar00barrybarry000000 000000 // // ==================================================================== // (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // #ifndef __PYSVN_SVNENV__ #define __PYSVN_SVNENV__ #include "CXX/Objects.hxx" #ifndef PYCXX_MAKEVERSION #error PyCXX version 5.3.5 is required #endif #if PYCXX_VERSION < PYCXX_MAKEVERSION( 6, 2, 4 ) #error PyCXX version 6.2.4 is required #endif #include #include #include #include #include #include #include #if !defined( SVN_VER_MAJOR ) #error "SVN_VER_MAJOR not defined" #endif #if !defined( SVN_VER_MINOR ) #error "SVN_VER_MINOR not defined" #endif // SVN 1.1 or later #if (SVN_VER_MAJOR == 1 && SVN_VER_MINOR >= 1) || SVN_VER_MAJOR > 1 #define PYSVN_HAS_CLIENT_ADD2 #define PYSVN_HAS_CLIENT_DIFF_PEG #define PYSVN_HAS_CLIENT_EXPORT2 #define PYSVN_HAS_CLIENT_MERGE_PEG #define PYSVN_HAS_CLIENT_VERSION #endif // SVN 1.2 or later #if (SVN_VER_MAJOR == 1 && SVN_VER_MINOR >= 2) || SVN_VER_MAJOR > 1 #define PYSVN_HAS_CLIENT_ANNOTATE2 #define PYSVN_HAS_CLIENT_CAT2 #define PYSVN_HAS_CLIENT_CHECKOUT2 #define PYSVN_HAS_CLIENT_COMMIT2 #define PYSVN_HAS_CLIENT_DIFF_PEG2 #define PYSVN_HAS_CLIENT_DIFF2 #define PYSVN_HAS_CLIENT_EXPORT3 #define PYSVN_HAS_CLIENT_INFO #define PYSVN_HAS_CLIENT_LOCK #define PYSVN_HAS_CLIENT_LOG2 #define PYSVN_HAS_CLIENT_LS2 #define PYSVN_HAS_CLIENT_MOVE2 #define PYSVN_HAS_CLIENT_PROPGET2 #define PYSVN_HAS_CLIENT_PROPLIST2 #define PYSVN_HAS_CLIENT_PROPSET2 #define PYSVN_HAS_CLIENT_STATUS2 #define PYSVN_HAS_CLIENT_UPDATE2 #define PYSVN_HAS_CONTEXT_NOTIFY2 #define PYSVN_HAS_WC_ADM_PROBE_OPEN3 #endif // SVN 1.3 or later #if (SVN_VER_MAJOR == 1 && SVN_VER_MINOR >= 3) || SVN_VER_MAJOR > 1 #define PYSVN_HAS_SVN_CLIENT_COMMIT_ITEM2_T #define PYSVN_HAS_SVN_COMMIT_INFO_T #define PYSVN_HAS_CONTEXT_LOG_MSG2 #define PYSVN_HAS_CONTEXT_PROGRESS #define PYSVN_HAS_WC_ADM_DIR #define PYSVN_HAS_CLIENT_ADD3 #define PYSVN_HAS_CLIENT_COMMIT3 #define PYSVN_HAS_CLIENT_COPY2 #define PYSVN_HAS_CLIENT_DELETE2 #define PYSVN_HAS_CLIENT_DIFF_PEG3 #define PYSVN_HAS_CLIENT_DIFF3 #define PYSVN_HAS_CLIENT_IMPORT2 #define PYSVN_HAS_CLIENT_LS3 #define PYSVN_HAS_CLIENT_MKDIR2 #define PYSVN_HAS_CLIENT_MOVE3 #endif // SVN 1.4 or later #if (SVN_VER_MAJOR == 1 && SVN_VER_MINOR >= 4) || SVN_VER_MAJOR > 1 #define PYSVN_HAS_CLIENT_ANNOTATE3 #define PYSVN_HAS_CLIENT_COPY3 #define PYSVN_HAS_CLIENT_DIFF_SUMMARIZE #define PYSVN_HAS_CLIENT_LIST #define PYSVN_HAS_CLIENT_LOG3 #define PYSVN_HAS_CLIENT_MERGE2 #define PYSVN_HAS_CLIENT_MERGE_PEG2 #define PYSVN_HAS_CLIENT_MOVE4 #define PYSVN_HAS_DIFF_FILE_IGNORE_SPACE #define PYSVN_HAS_SVN_AUTH_PROVIDERS #define PYSVN_HAS_IO_OPEN_UNIQUE_FILE2 #endif // SVN 1.5 or later #if (SVN_VER_MAJOR == 1 && SVN_VER_MINOR >= 5) || SVN_VER_MAJOR > 1 #define PYSVN_HAS_SVN__DEPTH_PARAMETER #define PYSVN_HAS_CLIENT_ADD4 #define PYSVN_HAS_CLIENT_ADD_TO_CHANGELIST #define PYSVN_HAS_SVN_CLIENT_BLAME_RECEIVER2_T QQQ #define PYSVN_HAS_CLIENT_ANNOTATE4 #define PYSVN_HAS_CLIENT_CHECKOUT3 #define PYSVN_HAS_CLIENT_COMMIT4 #define PYSVN_HAS_CLIENT_COPY4 #define PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC #define PYSVN_HAS_SVN_CLIENT_CTX_T__LOG_MSG_FUNC3 QQQ #define PYSVN_HAS_SVN_CLIENT_CTX_T__MIMETYPES_MAP QQQ #define PYSVN_HAS_CLIENT_DELETE3 #define PYSVN_HAS_CLIENT_DIFF4 #define PYSVN_HAS_CLIENT_DIFF_PEG4 #define PYSVN_HAS_CLIENT_DIFF_SUMMARIZE2 #define PYSVN_HAS_CLIENT_DIFF_SUMMARIZE_PEG2 #define PYSVN_HAS_CLIENT_EXPORT4 #define PYSVN_HAS_CLIENT_GET_CHANGELIST #define PYSVN_HAS_CLIENT_GET_CHANGELIST_STREAMY QQQ #define PYSVN_HAS_SVN_CLIENT_GET_COMMIT_LOG3_T QQQ #define PYSVN_HAS_CLIENT_IMPORT3 #define PYSVN_HAS_CLIENT_INFO2 #define PYSVN_HAS_CLIENT_LIST2 #define PYSVN_HAS_CLIENT_LOG4 #define PYSVN_HAS_CLIENT_MERGE3 #define PYSVN_HAS_CLIENT_MERGE_REINTEGRATE #define PYSVN_HAS_CLIENT_MERGEINFO_GET_AVAILABLE QQQ #define PYSVN_HAS_CLIENT_MERGEINFO_GET_MERGED QQQ #define PYSVN_HAS_CLIENT_MERGE_PEG3 QQQ #define PYSVN_HAS_CLIENT_MKDIR3 #define PYSVN_HAS_CLIENT_MOVE5 #define PYSVN_HAS_CLIENT_PROPGET3 #define PYSVN_HAS_CLIENT_PROPLIST3 #define PYSVN_HAS_CLIENT_PROPSET3 #define PYSVN_HAS_CLIENT_REMOVE_FROM_CHANGELISTS #define PYSVN_HAS_CLIENT_RESOLVE #define PYSVN_HAS_CLIENT_REVERT2 #define PYSVN_HAS_CLIENT_ROOT_URL_FROM_PATH #define PYSVN_HAS_CLIENT_STATUS3 #define PYSVN_HAS_CLIENT_SUGGEST_MERGE_SOURCES QQQ #define PYSVN_HAS_CLIENT_SWITCH2 #define PYSVN_HAS_CLIENT_UPDATE3 #define PYSVN_HAS_SVN_INFO_T__CHANGELIST #define PYSVN_HAS_SVN_INFO_T__SIZES #define PYSVN_HAS_SVN_WC_NOTIFY_ACTION_T__1_5 QQQ #define PYSVN_HAS_SVN_WC_CONFLICT_CHOICE_T #endif // SVn 1.6 or later #if (SVN_VER_MAJOR == 1 && SVN_VER_MINOR >= 6) || SVN_VER_MAJOR > 1 #define PYSVN_HAS_SVN_1_6 #define PYSVN_HAS_CLIENT_COPY5 #define PYSVN_HAS_IO_OPEN_UNIQUE_FILE3 #define PYSVN_HAS_CLIENT_LOG5 #define PYSVN_HAS_CLIENT_STATUS4 #define PYSVN_HAS_AUTH_GET_SIMPLE_PROVIDER2 #define PYSVN_HAS_AUTH_GET_SSL_CLIENT_CERT_PW_FILE_PROVIDER2 #define PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC_1_6 #define PYSVN_HAS_SVN_WC_OPERATION_T #define PYSVN_HAS_SVN_WC_CONFLICT_RESULT_T__SAVE_MERGED #endif // SVN 1.7 or later #if (SVN_VER_MAJOR == 1 && SVN_VER_MINOR >= 7) || SVN_VER_MAJOR > 1 #define PYSVN_HAS_SVN_1_7 #define PYSNV_HAS_REPOS_OPEN2 1 #define PYSNV_HAS_IO_REMOVE_FILE2 1 #define PYSVN_HAS_CLIENT_BLAME5 QQQ #define PYSVN_HAS_CLIENT_COMMIT5 QQQ #define PYSVN_HAS_CLIENT_COPY6 QQQ #define PYSVN_HAS_CLIENT_DELETE4 QQQ #define PYSVN_HAS_CLIENT_DIFF5 QQQ #define PYSVN_HAS_CLIENT_DIFF_PEG5 QQQ #define PYSVN_HAS_CLIENT_EXPORT5 #define PYSVN_HAS_CLIENT_GET_WC_ROOT QQQ #define PYSVN_HAS_CLIENT_IMPORT4 QQQ #define PYSVN_HAS_CLIENT_INFO2_T QQQ #define PYSVN_HAS_CLIENT_INFO3 QQQ #define PYSVN_HAS_CLIENT_INFO_RECEIVER2_T QQQ #define PYSVN_HAS_CLIENT_MERGE4 QQQ #define PYSVN_HAS_CLIENT_MERGEINFO_LOG QQQ #define PYSVN_HAS_CLIENT_MERGE_PEG4 QQQ #define PYSVN_HAS_CLIENT_MIN_MAX_REVISIONS QQQ #define PYSVN_HAS_CLIENT_MKDIR4 QQQ #define PYSVN_HAS_CLIENT_MOVE6 QQQ #define PYSVN_HAS_CLIENT_PATCH QQQ #define PYSVN_HAS_CLIENT_PATCH_FUNC_T QQQ #define PYSVN_HAS_CLIENT_PROPGET4 QQQ #define PYSVN_HAS_CLIENT_PROPSET_LOCAL QQQ #define PYSVN_HAS_CLIENT_PROPSET_REMOTE QQQ #define PYSVN_HAS_CLIENT_RELOCATE2 QQQ #define PYSVN_HAS_CLIENT_STATUS5 QQQ #define PYSVN_HAS_CLIENT_STATUS_T QQQ #define PYSVN_HAS_CLIENT_SWITCH3 QQQ #define PYSVN_HAS_CLIENT_UPDATE4 QQQ #define PYSVN_HAS_CLIENT_UPGRADE QQQ #define PYSVN_HAS_CLIENT_URL_FROM_PATH2 QQQ #define PYSVN_HAS_CLIENT_UUID_FROM_PATH2 QQQ #endif #if (SVN_VER_MAJOR == 1 && SVN_VER_MINOR >= 8) || SVN_VER_MAJOR > 1 #define PYSVN_HAS_SVN_1_8 #define PYSVN_HAS_CLIENT_GET_REPOS_ROOT 1 #define PYSVN_HAS_CLIENT_ADD5 1 #define PYSVN_HAS_CLIENT_CREATE_CONTEXT2 1 #endif #if defined( PYSVN_HAS_CLIENT_STATUS3 ) typedef svn_wc_status2_t pysvn_wc_status_t; #elif defined( PYSVN_HAS_CLIENT_STATUS2 ) typedef svn_wc_status2_t pysvn_wc_status_t; #else typedef svn_wc_status_t pysvn_wc_status_t; #endif #if defined( PYSVN_HAS_SVN_COMMIT_INFO_T ) typedef svn_commit_info_t pysvn_commit_info_t; #else typedef svn_client_commit_info_t pysvn_commit_info_t; #endif class SvnPool; class SvnContext; class SvnTransaction; class SvnException { public: SvnException( svn_error_t *error ); SvnException( const SvnException &other ); virtual ~SvnException(); // access methods Py::String &message(); Py::Object &pythonExceptionArg( int style ); apr_status_t code(); private: int m_code; Py::String m_message; Py::Object m_exception_arg; private: SvnException(); SvnException &operator=( const SvnException & ); }; class SvnPool { public: SvnPool( SvnContext &ctx ); SvnPool( SvnTransaction &txn ); ~SvnPool(); operator apr_pool_t *() const; private: apr_pool_t *m_pool; }; class SvnContext { public: SvnContext( const std::string &config_dir="" ); virtual ~SvnContext(); operator svn_client_ctx_t *(); svn_client_ctx_t *ctx(); // only use this pool for data that has a life time // that matches the life time of the context apr_pool_t *getContextPool(); // // this method will be called to retrieve // authentication information // // WORKAROUND FOR apr_xlate PROBLEM: // STRINGS ALREADY HAVE TO BE UTF8!!! // // @retval true continue // void installGetLogin( bool install ); virtual bool contextGetLogin ( const std::string &realm, std::string &username, std::string &password, bool &may_save ) = 0; // // this method will be called to notify about // the progress of an ongoing action // void installNotify( bool install ); #if defined( PYSVN_HAS_CONTEXT_NOTIFY2 ) virtual void contextNotify2 ( const svn_wc_notify_t *notify, apr_pool_t *pool ) = 0; #else virtual void contextNotify ( const char *path, svn_wc_notify_action_t action, svn_node_kind_t kind, const char *mime_type, svn_wc_notify_state_t content_state, svn_wc_notify_state_t prop_state, svn_revnum_t revision ) = 0; #endif #if defined( PYSVN_HAS_CONTEXT_PROGRESS ) void installProgress( bool install ); virtual void contextProgress ( apr_off_t progress, apr_off_t total ) = 0; #endif #if defined( PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC ) void installConflictResolver( bool install ); virtual bool contextConflictResolver ( svn_wc_conflict_result_t **result, const svn_wc_conflict_description_t *description, apr_pool_t *pool ) = 0; #endif // // this method will be called periodically to allow // the app to cancel long running operations // // @return cancel action? // @retval true cancel // void installCancel( bool install ); virtual bool contextCancel ( ) = 0; // // this method will be called to retrieve // a log message // virtual bool contextGetLogMessage ( std::string &msg ) = 0; // // this method is called if there is ssl server // information, that has to be confirmed by the user // // @param data // @return @a SslServerTrustAnswer // virtual bool contextSslServerTrustPrompt ( const svn_auth_ssl_server_cert_info_t &info, const std::string &relam, apr_uint32_t &acceptedFailures, bool &accept_permanent ) = 0; // // this method is called to retrieve client side // information // virtual bool contextSslClientCertPrompt ( std::string &cert_file, const std::string &realm, bool &may_save ) = 0; // // this method is called to retrieve the password // for the certificate // // @param password // virtual bool contextSslClientCertPwPrompt ( std::string &password, const std::string &realm, bool &may_save ) = 0; private: apr_pool_t *m_pool; svn_client_ctx_t *m_context; char *m_config_dir; }; class SvnTransaction { public: SvnTransaction(); ~SvnTransaction(); svn_error_t *init( const std::string &repos_path, const std::string &transaction, bool is_revision ); operator svn_fs_txn_t *(); svn_fs_txn_t *transaction(); operator svn_fs_t *(); operator svn_repos_t *(); svn_revnum_t revision(); bool is_revision() const { return m_txn == NULL; }; svn_error_t *root( svn_fs_root_t **root, apr_pool_t *pool ); private: apr_pool_t *m_pool; svn_repos_t *m_repos; svn_fs_t *m_fs; svn_fs_txn_t *m_txn; char *m_txn_name; svn_revnum_t m_rev_id; }; #endif // __PYSVN_SVNENV__ pysvn-1.7.8/Source/pysvn_transaction.cpp000644 000771 000771 00000054211 11724524356 020756 0ustar00barrybarry000000 000000 // // ==================================================================== // (c) 2003-2009 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_transaction.cpp // #if defined( _MSC_VER ) // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "pysvn.hpp" #include "pysvn_docs.hpp" #include "pysvn_svnenv.hpp" #include "svn_path.h" #include "svn_sorts.h" #include "pysvn_static_strings.hpp" static void convertReposTree ( Py::Dict &dict, bool copy_info, svn_repos_node_t *node, const std::string &path, apr_pool_t *pool ); //-------------------------------------------------------------------------------- pysvn_transaction::pysvn_transaction ( pysvn_module &_module, Py::Dict result_wrappers ) : m_module( _module ) , m_transaction() , m_exception_style( 1 ) { } void pysvn_transaction::init ( const std::string &repos_path, const std::string &transaction_name, bool is_revision ) { svn_error_t *error = m_transaction.init( repos_path, transaction_name, is_revision ); if( error != NULL ) { SvnException e( error ); throw_client_error( e ); } } pysvn_transaction::~pysvn_transaction() { } void pysvn_transaction::throw_client_error( SvnException &e ) { throw Py::Exception( m_module.client_error, e.pythonExceptionArg( m_exception_style ) ); } Py::Object pysvn_transaction::getattr( const char *_name ) { std::string name( _name ); // std::cout << "getattr( " << name << " )" << std::endl << std::flush; if( name == name___members__ ) { Py::List members; members.append( Py::String( name_exception_style ) ); return members; } if( name == name_exception_style ) return Py::Int( m_exception_style ); return getattr_default( _name ); } int pysvn_transaction::setattr( const char *_name, const Py::Object &value ) { std::string name( _name ); if( name == name_exception_style ) { Py::Int style( value ); if( style == 0l || style == 1l ) { m_exception_style = style; } else { throw Py::AttributeError( "exception_style value must be 0 or 1" ); } } else { std::string msg( "Unknown attribute: " ); msg += name; throw Py::AttributeError( msg ); } return 0; } Py::Object pysvn_transaction::cmd_cat( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, NULL } }; FunctionArguments args( "cat", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_path ) ); SvnPool pool( m_transaction ); svn_stringbuf_t * stringbuf = svn_stringbuf_create( empty_string, pool ); svn_stream_t * stream = svn_stream_from_stringbuf( stringbuf, pool ); try { svn_error_t *error; svn_fs_root_t *txn_root = NULL; error = m_transaction.root( &txn_root, pool ); if( error != NULL ) throw SvnException( error ); svn_stream_t * fstream; error = svn_fs_file_contents( &fstream, txn_root, path.c_str(), pool ); if( error != NULL ) throw SvnException( error ); char buf[BUFSIZ]; apr_size_t len = BUFSIZ; do { error = svn_stream_read( fstream, buf, &len ); if( error != NULL ) throw SvnException( error ); error = svn_stream_write( stream, buf, &len ); if( error != NULL ) throw SvnException( error ); } while (len == BUFSIZ); } catch( SvnException &e ) { throw_client_error( e ); } // return the bytes as is to the application // we can assume nothing about them return Py::String( stringbuf->data, (int)stringbuf->len ); } Py::Object pysvn_transaction::cmd_changed( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { false, name_copy_info }, { false, NULL } }; FunctionArguments args( "changed", args_desc, a_args, a_kws ); args.check(); bool copy_info = args.getBoolean( name_copy_info, false ); SvnPool pool( m_transaction ); svn_repos_node_t *tree = NULL; try { svn_error_t *error; svn_revnum_t base_rev; if( m_transaction.is_revision() ) { base_rev = m_transaction.revision() - 1; } else { base_rev = svn_fs_txn_base_revision( m_transaction ); } if( !SVN_IS_VALID_REVNUM( base_rev ) ) { error = svn_error_create( SVN_ERR_FS_NO_SUCH_REVISION, NULL, "Transaction is not based on a revision" ); throw SvnException( error ); } // Get the base root. svn_fs_root_t *base_rev_root = NULL; error = svn_fs_revision_root( &base_rev_root, m_transaction, base_rev, pool ); if( error != NULL ) throw SvnException( error ); svn_fs_root_t *txn_root = NULL; error = m_transaction.root( &txn_root, pool ); if( error != NULL ) throw SvnException( error ); // Request our editor const svn_delta_editor_t *editor = NULL; void *edit_baton = NULL; error = svn_repos_node_editor( &editor, &edit_baton, m_transaction, base_rev_root, txn_root, pool, pool ); if( error != NULL ) throw SvnException( error ); // Drive our editor error = svn_repos_replay( txn_root, editor, edit_baton, pool ); if( error != NULL ) throw SvnException( error ); // Return the tree we just built tree = svn_repos_node_from_baton( edit_baton ); } catch( SvnException &e ) { throw_client_error( e ); } Py::Dict dict; convertReposTree( dict, copy_info, tree, empty_string, pool ); return dict; } Py::Object pysvn_transaction::cmd_list( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { false, name_path }, { false, NULL } }; FunctionArguments args( "list", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_path, empty_string ) ); SvnPool pool( m_transaction ); apr_hash_t *dir_entries = NULL; try { svn_error_t *error; svn_fs_root_t *txn_root = NULL; error = m_transaction.root( &txn_root, pool ); if( error != NULL ) throw SvnException( error ); svn_node_kind_t kind; error = svn_fs_check_path( &kind, txn_root, path.c_str(), pool ); if( error != NULL ) throw SvnException( error ); if( kind == svn_node_none ) { error = svn_error_createf( SVN_ERR_FS_NOT_FOUND, NULL, "Path '%s' does not exist", path.c_str() ); throw SvnException( error ); } if( kind != svn_node_dir ) { error = svn_error_createf( SVN_ERR_FS_NOT_DIRECTORY, NULL, "Path '%s' is not a directory", path.c_str() ); throw SvnException( error ); } error = svn_fs_dir_entries( &dir_entries, txn_root, path.c_str(), pool ); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { throw_client_error( e ); } return direntsToObject( dir_entries, pool ); } #if 0 Py::Object pysvn_transaction::cmd_diff( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, NULL } }; FunctionArguments args( "diff", args_desc, a_args, a_kws ); args.check(); return Py::None(); } #endif Py::Object pysvn_transaction::cmd_propdel( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_prop_name }, { true, name_path }, { false, NULL } }; FunctionArguments args( "propdel", args_desc, a_args, a_kws ); args.check(); std::string prop_name( args.getUtf8String( name_prop_name ) ); std::string path( args.getUtf8String( name_path ) ); SvnPool pool( m_transaction ); try { svn_error_t * error; svn_fs_root_t *txn_root = NULL; error = m_transaction.root( &txn_root, pool ); if( error != NULL ) throw SvnException( error ); svn_node_kind_t kind; error = svn_fs_check_path( &kind, txn_root, path.c_str(), pool ); if( error != NULL ) throw SvnException( error ); if( kind == svn_node_none ) { error = svn_error_createf( SVN_ERR_FS_NOT_FOUND, NULL, "Path '%s' does not exist", path.c_str() ); throw SvnException( error ); } error = svn_fs_change_node_prop ( txn_root, path.c_str(), prop_name.c_str(), NULL, // delete value pool ); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { throw_client_error( e ); } return Py::None(); } Py::Object pysvn_transaction::cmd_propget( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_prop_name }, { true, name_path }, { false, NULL } }; FunctionArguments args( "propget", args_desc, a_args, a_kws ); args.check(); std::string prop_name( args.getUtf8String( name_prop_name ) ); std::string path( args.getUtf8String( name_path ) ); SvnPool pool( m_transaction ); svn_string_t *prop_val = NULL; try { svn_error_t * error; svn_fs_root_t *txn_root = NULL; error = m_transaction.root( &txn_root, pool ); if( error != NULL ) throw SvnException( error ); svn_node_kind_t kind; error = svn_fs_check_path( &kind, txn_root, path.c_str(), pool ); if( error != NULL ) throw SvnException( error ); if( kind == svn_node_none ) { error = svn_error_createf( SVN_ERR_FS_NOT_FOUND, NULL, "Path '%s' does not exist", path.c_str() ); throw SvnException( error ); } error = svn_fs_node_prop( &prop_val, txn_root, path.c_str(), prop_name.c_str(), pool ); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { throw_client_error( e ); } if( prop_val == NULL ) { return Py::None(); } else { return Py::String( prop_val->data, prop_val->len, name_utf8 ); } } Py::Object pysvn_transaction::cmd_proplist( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_path }, { false, NULL } }; FunctionArguments args( "proplist", args_desc, a_args, a_kws ); args.check(); std::string path( args.getUtf8String( name_path ) ); SvnPool pool( m_transaction); apr_hash_t *props = NULL; try { svn_error_t * error; svn_fs_root_t *txn_root = NULL; error = m_transaction.root( &txn_root, pool ); if( error != NULL ) throw SvnException( error ); svn_node_kind_t kind; error = svn_fs_check_path( &kind, txn_root, path.c_str(), pool ); if( error != NULL ) throw SvnException( error ); if( kind == svn_node_none ) { error = svn_error_createf( SVN_ERR_FS_NOT_FOUND, NULL, "Path '%s' does not exist", path.c_str() ); throw SvnException( error ); } error = svn_fs_node_proplist( &props, txn_root, path.c_str(), pool ); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { throw_client_error( e ); } return propsToObject( props, pool ); } Py::Object pysvn_transaction::cmd_propset( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_prop_name }, { true, name_prop_value }, { true, name_path }, { false, NULL } }; FunctionArguments args( "propset", args_desc, a_args, a_kws ); args.check(); std::string prop_name( args.getUtf8String( name_prop_name ) ); std::string prop_val( args.getUtf8String( name_prop_value ) ); std::string path( args.getUtf8String( name_path ) ); SvnPool pool( m_transaction ); try { svn_error_t * error; svn_fs_root_t *txn_root = NULL; error = m_transaction.root( &txn_root, pool ); if( error != NULL ) throw SvnException( error ); const svn_string_t *svn_prop_val = svn_string_ncreate( prop_val.c_str(), prop_val.size(), pool ); svn_node_kind_t kind; error = svn_fs_check_path( &kind, txn_root, path.c_str(), pool ); if( error != NULL ) throw SvnException( error ); if( kind == svn_node_none ) { error = svn_error_createf( SVN_ERR_FS_NOT_FOUND, NULL, "Path '%s' does not exist", path.c_str() ); throw SvnException( error ); } error = svn_fs_change_node_prop ( txn_root, path.c_str(), prop_name.c_str(), svn_prop_val, pool ); if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { throw_client_error( e ); } return Py::None(); } Py::Object pysvn_transaction::cmd_revpropdel( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_prop_name }, { false, NULL } }; FunctionArguments args( "revpropdel", args_desc, a_args, a_kws ); args.check(); std::string prop_name( args.getUtf8String( name_prop_name ) ); SvnPool pool( m_transaction ); try { svn_error_t *error; if( m_transaction.is_revision() ) { error = svn_fs_change_rev_prop ( m_transaction, m_transaction.revision(), prop_name.c_str(), NULL, // value = NULL pool ); } else { error = svn_fs_change_txn_prop ( m_transaction, prop_name.c_str(), NULL, // value = NULL pool ); } if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { throw_client_error( e ); } return Py::None(); } Py::Object pysvn_transaction::cmd_revpropget( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_prop_name }, { false, NULL } }; FunctionArguments args( "revpropget", args_desc, a_args, a_kws ); args.check(); std::string prop_name( args.getUtf8String( name_prop_name ) ); SvnPool pool( m_transaction ); svn_string_t *prop_val = NULL; try { svn_error_t *error; if( m_transaction.is_revision() ) { error = svn_fs_revision_prop ( &prop_val, m_transaction, m_transaction.revision(), prop_name.c_str(), pool ); } else { error = svn_fs_txn_prop ( &prop_val, m_transaction, prop_name.c_str(), pool ); } if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { throw_client_error( e ); } if( prop_val == NULL ) { return Py::None(); } else { return Py::String( prop_val->data, prop_val->len, name_utf8 ); } } Py::Object pysvn_transaction::cmd_revproplist( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { false, NULL } }; FunctionArguments args( "revproplist", args_desc, a_args, a_kws ); args.check(); SvnPool pool( m_transaction); apr_hash_t *props = NULL; try { svn_error_t *error; if( m_transaction.is_revision() ) { error = svn_fs_revision_proplist ( &props, m_transaction, m_transaction.revision(), pool ); } else { error = svn_fs_txn_proplist ( &props, m_transaction, pool ); } if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { throw_client_error( e ); } return propsToObject( props, pool ); } Py::Object pysvn_transaction::cmd_revpropset( const Py::Tuple &a_args, const Py::Dict &a_kws ) { static argument_description args_desc[] = { { true, name_prop_name }, { true, name_prop_value }, { false, NULL } }; FunctionArguments args( "revpropset", args_desc, a_args, a_kws ); args.check(); std::string prop_name( args.getUtf8String( name_prop_name ) ); std::string prop_val( args.getUtf8String( name_prop_value ) ); SvnPool pool( m_transaction ); try { const svn_string_t *svn_prop_val = svn_string_ncreate( prop_val.c_str(), prop_val.size(), pool ); svn_error_t *error; if( m_transaction.is_revision() ) { error = svn_fs_change_rev_prop ( m_transaction, m_transaction.revision(), prop_name.c_str(), svn_prop_val, pool ); } else { error = svn_fs_change_txn_prop ( m_transaction, prop_name.c_str(), svn_prop_val, pool ); } if( error != NULL ) throw SvnException( error ); } catch( SvnException &e ) { throw_client_error( e ); } return Py::None(); } void pysvn_transaction::init_type() { behaviors().name("Transaction"); behaviors().doc( pysvn_transaction_doc ); behaviors().supportGetattr(); behaviors().supportSetattr(); add_keyword_method("cat", &pysvn_transaction::cmd_cat, pysvn_transaction_cat_doc ); add_keyword_method("changed", &pysvn_transaction::cmd_changed, pysvn_transaction_changed_doc ); add_keyword_method("list", &pysvn_transaction::cmd_list, pysvn_transaction_list_doc ); #if 0 add_keyword_method("diff", &pysvn_transaction::cmd_diff, pysvn_transaction_diff_doc ); #endif add_keyword_method("propdel", &pysvn_transaction::cmd_propdel, pysvn_transaction_propdel_doc ); add_keyword_method("propget", &pysvn_transaction::cmd_propget, pysvn_transaction_propget_doc ); add_keyword_method("proplist", &pysvn_transaction::cmd_proplist, pysvn_transaction_proplist_doc ); add_keyword_method("propset", &pysvn_transaction::cmd_propset, pysvn_transaction_propset_doc ); add_keyword_method("revpropdel", &pysvn_transaction::cmd_revpropdel, pysvn_transaction_revpropdel_doc ); add_keyword_method("revpropget", &pysvn_transaction::cmd_revpropget, pysvn_transaction_revpropget_doc ); add_keyword_method("revproplist", &pysvn_transaction::cmd_revproplist, pysvn_transaction_revproplist_doc ); add_keyword_method("revpropset", &pysvn_transaction::cmd_revpropset, pysvn_transaction_revpropset_doc ); } static void convertReposTree ( Py::Dict &dict, bool copy_info, svn_repos_node_t *node, const std::string &path, apr_pool_t *pool ) { if( node == NULL ) return; bool is_changed = false; // is node changed? if( node->action == 'A' ) is_changed = true; else if( node->action == 'D' ) is_changed = true; else if( node->action == 'R' ) { if( node->text_mod ) is_changed = true; if( node->prop_mod ) is_changed = true; } else is_changed = false; if( is_changed ) { if( copy_info ) { Py::Tuple value( 6 ); char action[2] = {node->action, 0}; value[0] = Py::String( action ); value[1] = toEnumValue( node->kind ); value[2] = Py::Int( node->text_mod ); value[3] = Py::Int( node->prop_mod ); if( node->copyfrom_path == NULL ) value[4] = Py::Int( 0 ); else value[4] = Py::Int( node->copyfrom_rev ); value[5] = utf8_string_or_none( node->copyfrom_path ); dict[ Py::String( path, name_utf8 ) ] = value; } else { Py::Tuple value( 4 ); char action[2] = {node->action, 0}; value[0] = Py::String( action ); value[1] = toEnumValue( node->kind ); value[2] = Py::Int( node->text_mod ); value[3] = Py::Int( node->prop_mod ); dict[ Py::String( path, name_utf8 ) ] = value; } } /* Return here if the node has no children. */ node = node->child; if( node == NULL ) return; /* Recursively handle the node's children. */ std::string full_path( path ); if( !full_path.empty() ) full_path += "/"; full_path += node->name; convertReposTree( dict, copy_info, node, full_path, pool ); while( node->sibling != NULL ) { node = node->sibling; std::string full_path( path ); if( !full_path.empty() ) full_path += "/"; full_path += node->name; convertReposTree( dict, copy_info, node, full_path, pool ); } } pysvn-1.7.8/Source/pysvn_version.hpp.template000644 000771 000771 00000001136 11110632344 021715 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2003-2007 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // // // pysvn_version.hpp.template // #ifndef __PYSVN_VERSION_HPP__ #define __PYSVN_VERSION_HPP__ const int version_major( %(MAJOR)s ); const int version_minor( %(MINOR)s ); const int version_patch( %(PATCH)s ); const int version_build( %(BUILD)s ); #endif pysvn-1.7.8/Source/run_devenv.cmd000644 000771 000771 00000000347 11264373560 017325 0ustar00barrybarry000000 000000 if "%SVN_VER_MAJ_MIN%" == "1.4" devenv pysvn-for-svn-1-4-msvc71.sln /useenv if "%SVN_VER_MAJ_MIN%" == "1.5" devenv pysvn-for-svn-1-5-msvc71.sln /useenv if "%SVN_VER_MAJ_MIN%" == "1.6" devenv pysvn-for-svn-1-6-msvc71.sln /useenv pysvn-1.7.8/Source/run_msdev.cmd000644 000771 000771 00000000024 10016223412 017124 0ustar00barrybarry000000 000000 msdev pysvn.dsw %* pysvn-1.7.8/Source/run_py.cmd000644 000771 000771 00000000114 10026704226 016446 0ustar00barrybarry000000 000000 setlocal set PYTHONPATH=%WORKDIR%\Source c:\python23\python %* endlocal pysvn-1.7.8/Source/run_py.sh000755 000771 000771 00000000207 10064155646 016333 0ustar00barrybarry000000 000000 #!/bin/sh export PYTHONPATH=${WORKDIR}/Source export LD_LIBRARY_PATH=${SVNCPP_LIB} export DYLD_LIBRARY_PATH=${SVNCPP_LIB} ${PYTHON} $* pysvn-1.7.8/Source/run_vcexpress.cmd000644 000771 000771 00000000360 11264373560 020053 0ustar00barrybarry000000 000000 if "%SVN_VER_MAJ_MIN%" == "1.4" vcexpress pysvn-for-svn-1-4-msvc90.sln /useenv if "%SVN_VER_MAJ_MIN%" == "1.5" vcexpress pysvn-for-svn-1-5-msvc90.sln /useenv if "%SVN_VER_MAJ_MIN%" == "1.6" vcexpress pysvn-for-svn-1-6-msvc90.sln /useenv pysvn-1.7.8/Source/setup.py000644 000771 000771 00000003630 11704056554 016175 0ustar00barrybarry000000 000000 # # ==================================================================== # (c) 2005-2009 Barry A Scott. All rights reserved. # # This software is licensed as described in the file LICENSE.txt, # which you should have received as part of this distribution. # # ==================================================================== # # # setup.py # # make it easy to build pysvn outside of svn # import sys import os import setup_backport def main( argv ): if argv[1:2] == ['backport']: if setup_backport.backportRequired(): return setup_backport.cmd_backport( argv ) else: print( 'Info: These sources are compatible with python %d.%d - no need to run the backport command' % (sys.version_info[0], sys.version_info[1]) ) return 0 elif argv[1:2] == ['configure']: if setup_backport.backportRequired(): print( 'Error: These sources are not compatible with python %d.%d - run the backport command to fix' % (sys.version_info[0], sys.version_info[1]) ) return 1 # must not import unless backporting has been done import setup_configure return setup_configure.cmd_configure( argv ) elif argv[1:2] == ['help']: setup_help( argv ) return 0 else: return setup_help( argv ) def setup_help( argv ): progname = os.path.basename( argv[0] ) print( ''' Help python %(progname)s help Backport the PySVN sources to work with python 2.5 and earlier python %(progname)s backport ''' % {'progname': progname} ) if setup_backport.backportRequired(): print( ' Further help is not available until the backport command has been run.' ) return 1 setup_backport.cmd_help( argv ) import setup_configure setup_configure.cmd_help( argv ) return 1 if __name__ == '__main__': sys.exit( main( sys.argv ) ) pysvn-1.7.8/Source/setup_backport.py000644 000771 000771 00000004464 11132430564 020060 0ustar00barrybarry000000 000000 # # backport_sources.py # # fixup the python sources to work with python2.5 and earlier # import os import sys def backportRequired(): try: import setup_backport_probe return False except SyntaxError: return True def cmd_help( argv ): progname = os.path.basename( argv[0] ) print( ''' Backport the PySVN sources to work with python 2.5 and earlier python %(progname)s backport [] ''' % {'progname': progname} ) def cmd_backport( argv ): if len(argv) > 2: pysvn_root = argv[2] else: pysvn_root = '..' if os.path.exists( os.path.join( pysvn_root, '.svn' ) ): print( 'Error: Cannot apply backport command to a subversion working copy - becuase of risk of backported files being committed.' ) return 1 all_files = [] walk( pysvn_root, all_files ) all_files.sort() backported = 0 for filename in all_files: if fixup_source( filename ): backported += 1 if backported == 0: print( 'Warning: Of %d candidate files no files required backporting' % len(all_files) ) else: print( 'Info: Backported source for %d files' % backported ) return 0 def walk( dirname, all_files ): for filename in os.listdir( dirname ): filename = os.path.join( dirname, filename ) if os.path.isdir( filename ): walk( filename, all_files ) elif filename.endswith( '.py' ): all_files.append( filename ) elif filename.endswith( '.py.template' ): all_files.append( filename ) def fixup_source( filename ): f = open( filename, 'r' ) all_lines = f.readlines() f.close() replaced = False for index in range( len( all_lines ) ): if( all_lines[ index ].strip().startswith( 'except ' ) and ' as e:' in all_lines[ index ] ): replaced = True print( 'Info: processing %s' % filename ) print( 'Info: Before: %r' % all_lines[ index ] ) all_lines[ index ] = all_lines[ index ].replace( ' as e:', ', e:' ) print( 'Info: After: %r' % all_lines[ index ] ) if replaced: print( 'Info: Updating %s' % filename ) f = open( filename, 'w' ) f.write( ''.join( all_lines ) ) f.close() return replaced pysvn-1.7.8/Source/setup_backport_probe.py000644 000771 000771 00000000746 11132131027 021236 0ustar00barrybarry000000 000000 # # ==================================================================== # (c) 2005-2009 Barry A Scott. All rights reserved. # # This software is licensed as described in the file LICENSE.txt, # which you should have received as part of this distribution. # # ==================================================================== # # # setup_backport_probe.py # # loading this module to test for the need to run the backport command # try: pass except ValueError as e: pass pysvn-1.7.8/Source/setup_configure.py000644 000771 000771 00000176660 12204134775 020252 0ustar00barrybarry000000 000000 # # ==================================================================== # Copyright (c) 2005-2011 Barry A Scott. All rights reserved. # # This software is licensed as described in the file LICENSE.txt, # which you should have received as part of this distribution. # # ==================================================================== # # # setup_configure.py # # make it easy to build pysvn outside of svn # import sys import os import distutils import distutils.sysconfig import distutils.util import xml.dom.minidom import xml.sax class SetupError(Exception): pass # version of PyCXX that we require pycxx_version = (6, 2, 4) _debug = False def debug( msg ): if _debug: sys.stderr.write( 'Debug: %s\n' % (msg,) ) def cmd_configure( argv ): try: o = Options( argv ) setup = Setup( o ) setup.generateSourcesMakefile() setup.generateTestMakefile() return 0 except SetupError as e: print( 'Error:', str(e) ) return 1 def cmd_help( argv ): o = Options( argv ) o.usage() return 1 class Options: all_options_info = { '--arch': (2, ''), '--apr-inc-dir': (1, ''), '--apu-inc-dir': (1, ''), '--apr-lib-dir': (1, ''), '--debug': (0, None), # debug this script '--define': (2, ''), '--enable-debug': (0, None), '--fixed-module-name': (0, None), '--norpath': (0, None), '--platform': (1, ''), '--pycxx-dir': (1, ''), '--pycxx-src-dir': (1, ''), '--svn-inc-dir': (1, ''), '--svn-lib-dir': (1, ''), '--svn-bin-dir': (1, ''), '--svn-root-dir': (1, ''), '--verbose': (0, None), } def __init__( self, argv ): self.__argv = argv self.__progname = os.path.basename( argv[0] ) self.__all_options = {} self.__used_options = set() def usage( self ): print( ''' Create a makefile for this python and platform python %(progname)s configure where is one or more of: ''' % {'progname': self.__progname} ) for option, num_value in sorted( self.all_options_info.items() ): num, value = num_value if num == 0: print( ' %s' % (option,) ) else: print( ' %s=%s' % (option,value) ) def parseOptions( self ): for option in self.__argv[2:]: option_parts = option.split( '=', 1 ) option_name = option_parts[0] if option_name not in self.all_options_info: print( 'Error: Unknown option %s' % option ) return False repeat_count, value = self.all_options_info[ option_name ] if repeat_count == 0: if len(option_parts) != 1: print( 'Error: Option %s does not take a value' % (option_name,) ) return False self.__all_options[ option_name ] = None elif repeat_count == 1: if len(option_parts) != 2: print( 'Error: Option %s requires a value' % (option_name,) ) return False if option_name in self.__all_options: print( 'Error: only one %s is allowed' % (option_name,) ) return False self.__all_options[ option_name ] = option_parts[1] elif repeat_count == 2: if len(option_parts) != 2: print( 'Error: Option %s requires a value' % (option_name,) ) return False self.__all_options.setdefault( option_name, [] ).append( option_parts[1] ) global _debug if self.hasOption( '--debug' ): _debug = True return True def hasOption( self, option_name ): self.__used_options.add( option_name ) return option_name in self.__all_options def getOption( self, option_name ): self.__used_options.add( option_name ) return self.__all_options[ option_name ] def checkAllOptionsUsed( self ): all_options = set( self.__all_options ) unused_options = all_options - self.__used_options if len(unused_options) > 0: print( 'Error: Unused options: %s' % (', '.join( unused_options ),) ) return False return True #-------------------------------------------------------------------------------- class Setup: def __init__( self, options ): self.options = options def makePrint( self, line ): self.__makefile.write( line ) self.__makefile.write( '\n' ) def setupCompile( self ): print( 'Info: Configure for python %d.%d.%d in exec_prefix %s' % (sys.version_info[0], sys.version_info[1], sys.version_info[2] ,sys.exec_prefix) ) if self.options.hasOption( '--platform' ): self.platform = self.options.getOption( '--platform' ) else: if sys.platform == 'darwin' and os.path.exists( '/System/Library/CoreServices/SystemVersion.plist' ): self.platform = 'macosx' elif sys.platform.startswith('aix'): self.platform = 'aix' elif sys.platform.startswith('sunos5'): self.platform = 'sunos5' elif sys.platform.startswith('linux'): self.platform = 'linux' elif sys.platform.startswith('freebsd'): self.platform = 'freebsd' elif sys.platform == 'cygwin': self.platform = 'cygwin' else: raise SetupError( 'Cannot automatically detect your platform use --platform option' ) if self.platform == 'win32': self.c_utils = Win32CompilerMSVC90( self ) self.c_pysvn = Win32CompilerMSVC90( self ) elif self.platform == 'macosx': self.c_utils = MacOsxCompilerGCC( self ) self.c_pysvn = MacOsxCompilerGCC( self ) elif self.platform == 'linux': self.c_utils = LinuxCompilerGCC( self ) self.c_pysvn = LinuxCompilerGCC( self ) elif self.platform == 'freebsd': self.c_utils = FreeBsdCompilerGCC( self ) self.c_pysvn = FreeBsdCompilerGCC( self ) elif self.platform == 'cygwin': self.c_utils = CygwinCompilerGCC( self ) self.c_pysvn = CygwinCompilerGCC( self ) elif self.platform == 'aix': self.c_utils = AixCompilerGCC( self ) self.c_pysvn = AixCompilerGCC( self ) elif self.platform == 'sunos5': self.c_utils = SunOsCompilerGCC( self ) self.c_pysvn = SunOsCompilerGCC( self ) else: raise SetupError( 'Unknown platform %r' % (self.platform,) ) print( 'Info: Using tool chain %s' % (self.c_utils.__class__.__name__,) ) self.c_utils.setupUtilities() self.c_pysvn.setupPySvn() self.pycxx_obj_file = [ Source( self.c_pysvn, '%(PYCXX_SRC)s/cxxsupport.cxx' ), Source( self.c_pysvn, '%(PYCXX_SRC)s/cxx_extensions.cxx' ), Source( self.c_pysvn, '%(PYCXX_SRC)s/cxxextensions.c' ), Source( self.c_pysvn, '%(PYCXX_SRC)s/IndirectPythonInterface.cxx' ), ] pysvn_headers = ['pysvn.hpp', 'pysvn_docs.hpp', 'pysvn_svnenv.hpp', 'pysvn_static_strings.hpp', 'pysvn_version.hpp'] self.pysvn_obj_files = [ Source( self.c_pysvn, 'pysvn.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_callbacks.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_static_strings.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_enum_string.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client_cmd_add.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client_cmd_changelist.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client_cmd_checkin.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client_cmd_copy.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client_cmd_diff.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client_cmd_export.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client_cmd_info.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client_cmd_list.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client_cmd_lock.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client_cmd_merge.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client_cmd_prop.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client_cmd_revprop.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_client_cmd_switch.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_transaction.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_revision.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_docs.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_path.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_arg_processing.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_converters.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_svnenv.cpp', pysvn_headers ), Source( self.c_pysvn, 'pysvn_profile.cpp', pysvn_headers ), ] + self.pycxx_obj_file self.generate_svn_error_codes_obj_files = [ Source( self.c_utils, 'generate_svn_error_codes/generate_svn_error_codes.cpp', ['generate_svn_error_codes.hpp'] ), ] self.all_support_targets = [ PysvnDocsSource( self.c_pysvn ), PysvnVersionHeader( self.c_pysvn ), GenerateSvnErrorCodesHeader( self.c_pysvn ), Program( self.c_utils, 'generate_svn_error_codes/generate_svn_error_codes', self.generate_svn_error_codes_obj_files ), PysvnDocsHeader( self.c_pysvn, ['pysvn_docs.cpp'] ) ] self.all_exe = [ PysvnModuleInit( self.c_pysvn ), PythonExtension( self.c_pysvn, self.c_pysvn.expand( 'pysvn/%(PYSVN_MODULE_BASENAME)s' ), self.pysvn_obj_files ), ] def generateSourcesMakefile( self ): if not self.options.parseOptions(): raise SetupError( 'failed to parse options' ) self.__makefile = open( 'Makefile', 'wt' ) self.setupCompile() print( 'Info: Creating Makefile for Sources' ) self.c_pysvn.generateMakefileHeader() self.makePrint( 'all: %s' % (' '.join( [exe.getTargetFilename() for exe in self.all_exe] )) ) self.makePrint( '' ) for exe in self.all_exe: exe.generateMakefile() for target in self.all_support_targets: target.generateMakefile() self.__makefile.close() self.__makefile = None if not self.options.checkAllOptionsUsed(): raise SetupError( 'not all options used' ) return 0 def generateTestMakefile( self ): print( 'Info: Creating Makefile for Tests' ) all_normal_test_cases = [ TestCase( self.c_pysvn, '01' ), TestCase( self.c_pysvn, '04' ), TestCase( self.c_pysvn, '05' ), TestCase( self.c_pysvn, '06' ), TestCase( self.c_pysvn, '07' ), ] all_extra_test_cases = [ TestCase( self.c_pysvn, '03' ), ] all_test_cases = [] all_test_cases.extend( all_normal_test_cases ) all_test_cases.extend( all_extra_test_cases ) self.__makefile = open( '../Tests/Makefile', 'wt' ) self.c_pysvn.ruleAllTestCase( 'all', all_normal_test_cases ) self.c_pysvn.ruleAllTestCase( 'extratests', all_extra_test_cases ) self.makePrint( 'clean: %s' % (' '.join( ['clean-%s' % (tc.test_name,) for tc in all_test_cases] )) ) for test_case in all_test_cases: test_case.generateMakefile() self.__makefile.close() self.__makefile = None return 0 #-------------------------------------------------------------------------------- class Compiler: def __init__( self, setup ): debug( 'Compiler.__init__()' ) self.setup = setup self.options = setup.options self.verbose = self.options.hasOption( '--verbose' ) self.__variables = {} self._addVar( 'PYCXX_VER', '6.2.4' ) self._addVar( 'DEBUG', 'NDEBUG') self._addVar( 'PYSVN_SRC_DIR', os.path.dirname( os.getcwd() ) ) self.py_module_defines = [] self.py_module_init_function = None def _getDefines( self, arg_fmt ): all_defines = [] if self.setup.options.hasOption( '--define' ): for define in self.setup.options.getOption( '--define' ): all_defines.append( arg_fmt % (define,) ) return all_defines def _pysvnModuleSetup( self ): if self.options.hasOption( '--fixed-module-name' ): print( 'Info: Using fixed module name' ) self.pysvn_module_name = '_pysvn' if sys.version_info[0] >= 3: self.py_module_init_function = 'PyInit__pysvn' else: self.py_module_init_function = 'init_pysvn' else: # name of the module including the python version to help # ensure that only a matching _pysvn.so for the version of # python is imported self.pysvn_module_name = '_pysvn_%d_%d' % (sys.version_info[0], sys.version_info[1]) if sys.version_info[0] >= 3: self.py_module_init_function = 'PyInit__pysvn_%d_%d' % sys.version_info[:2] self.py_module_defines.append( ('PyInit__pysvn', self.py_module_init_function) ) self.py_module_defines.append( ('PyInit__pysvn_d', '%s_d' % (self.py_module_init_function,)) ) else: self.py_module_init_function = 'init_pysvn_%d_%d' % sys.version_info[:2] self.py_module_defines.append( ('init_pysvn', self.py_module_init_function) ) self.py_module_defines.append( ('init_pysvn_d', '%s_d' % (self.py_module_init_function,)) ) def _completeInit( self ): # must be called by the leaf derived class to finish initialising the compile self._addVar( 'PYTHON', sys.executable ) self._addVar( 'PYCXX', self.find_pycxx() ) self._addVar( 'PYCXX_SRC', self.find_pycxx_src() ) svn_inc = self.find_svn_inc() self._addVar( 'SVN_INC', svn_inc ) self._addVar( 'SVN_LIB', self.find_svn_lib() ) self._addVar( 'SVN_BIN', self.find_svn_bin() ) self._addVar( 'APR_INC', self.find_apr_inc() ) self._addVar( 'APU_INC', self.find_apu_inc() ) self._addVar( 'APR_LIB', self.find_apr_lib() ) self.__getSvnVersion( svn_inc ) def platformFilename( self, filename ): return filename def makePrint( self, line ): self.setup.makePrint( line ) def generateMakefileHeader( self ): raise NotImplementedError( 'generateMakefileHeader' ) def _addFromEnv( self, name ): debug( 'Compiler._addFromEnv( %r )' % (name,) ) self._addVar( name, os.environ[ name ] ) def _addVar( self, name, value ): debug( '%s._addVar( %r, %r )' % (self.__class__.__name__, name, value) ) try: if '%' in value: value = value % self.__variables self.__variables[ name ] = value except TypeError: raise SetupError( 'Cannot addVar name %r value %r' % (name, value) ) except KeyError as e: raise SetupError( 'Cannot addVar name %r value %r - %s' % (name, value, e) ) def expand( self, s ): try: return s % self.__variables except (TypeError, KeyError) as e: print( 'Error: %s' % (e,) ) print( 'String: %s' % (s,) ) for key, value in sorted( self.__variables.items() ): print( 'Variable: %s: %r' % (key, value) ) raise SetupError( 'Cannot expand string %r - %s' % (s,e) ) def find_pycxx( self ): pycxx_dir = self.find_dir( 'PyCXX include', '--pycxx-dir', None, self._find_paths_pycxx_dir, 'CXX/Version.hxx' ) major_match = False minor_match = False f = open( os.path.join( pycxx_dir, 'CXX/Version.hxx' ) ) for line in f: words = line.split() if 'PYCXX_VERSION_MAJOR' in words: major_match = int( words[2] ) == pycxx_version[0] if 'PYCXX_VERSION_MINOR' in words: minor_match = int( words[2] ) == pycxx_version[1] if not major_match and not minor_match: raise SetupError( 'PyCXX version not as required.' ) return pycxx_dir def find_pycxx_src( self ): v = {'PYCXX': self.find_pycxx()} return self.find_dir( 'PyCXX Source', '--pycxx-src-dir', None, [p % v for p in self._find_paths_pycxx_src], 'cxxsupport.cxx' ) def find_svn_inc( self ): for folder in ['include/subversion-1', 'include']: try: return self.find_dir( 'SVN include', '--svn-inc-dir', folder, self._find_paths_svn_inc, 'svn_client.h' ) except SetupError as e: last_exception = e raise last_exception def find_svn_bin( self ): return self.find_dir( 'SVN bin', '--svn-bin-dir', 'bin', self._find_paths_svn_bin, 'svnadmin%s' % (self.getProgramExt(),) ) def find_svn_lib( self ): folder = self.find_dir( 'SVN library', '--svn-lib-dir', 'lib', self._find_paths_svn_lib, self.get_lib_name_for_platform( 'libsvn_client-1' ) ) # if we are using the Fink SVN then remember this self.is_mac_os_x_fink = folder.startswith( '/sw/' ) self.is_mac_os_x_darwin_ports = folder.startswith( '/opt/local/' ) return folder def find_apr_inc( self ): return self.find_dir( 'APR include', '--apr-inc-dir', None, self._find_paths_apr_inc, 'apr.h' ) def find_apu_inc( self ): return self.find_dir( 'APR include', '--apu-inc-dir', None, self._find_paths_apr_util_inc, 'apu.h' ) def find_apr_lib( self ): last_exception = None lib_list = [(self.get_lib_name_for_platform( 'libapr-1' ), 'apr-1'), (self.get_lib_name_for_platform( 'libapr-0' ), 'apr-0')] for apr_libname, self.lib_apr in lib_list: try: return self.find_dir( 'APR library', '--apr-lib-dir', 'lib', [], apr_libname ) except SetupError: pass for apr_libname, self.lib_apr in lib_list: try: return self.find_dir( 'APR library', '--apr-lib-dir', None, self._find_paths_apr_lib, apr_libname ) except SetupError as e: last_exception = e raise last_exception def get_lib_name_for_platform( self, libname ): raise NotImplementedError def find_dir( self, name, kw, svn_root_suffix, base_dir_list, check_file ): dirname = self.__find_dir( name, kw, svn_root_suffix, base_dir_list, check_file ) print( 'Info: Found %14.14s in %s' % (name, dirname) ) return dirname def __find_dir( self, name, kw, svn_root_suffix, base_dir_list, check_file ): debug( '__find_dir( name=%r, kw=%r, svn_root_suffix=%r, base_dir_list=%r, check_file=%r )' % (name, kw, svn_root_suffix, base_dir_list, check_file) ) # override the base_dir_list from the command line kw svn_root_dir = None if self.options.hasOption( kw ): base_dir_list = [self.options.getOption( kw )] elif( self.options.hasOption( '--svn-root-dir' ) and svn_root_suffix is not None ): base_dir_list = ['%s/%s' % (self.options.getOption( '--svn-root-dir' ), svn_root_suffix)] debug( '__find_dir base_dir_list=%r' % (base_dir_list,) ) # expect to find check_file in one of the dir for dirname in base_dir_list: full_check_file = os.path.join( dirname, check_file ) if self.verbose: print( 'Info: Checking for %s in %s' % (name, full_check_file) ) if os.path.exists( full_check_file ): return os.path.abspath( dirname ) raise SetupError( 'cannot find %s %s - use %s' % (name, check_file, kw) ) def __getSvnVersion( self, svn_include ): all_svn_version_lines = open( os.path.join( svn_include, 'svn_version.h' ) ).readlines() major = None minor = None patch = None for line in all_svn_version_lines: words = line.strip().split() if len(words) > 2 and words[0] == '#define': if words[1] == 'SVN_VER_MAJOR': major = int(words[2]) elif words[1] == 'SVN_VER_MINOR': minor = int(words[2]) elif words[1] == 'SVN_VER_PATCH': patch = int(words[2]) print( 'Info: Building against SVN %d.%d.%d' % (major, minor, patch) ) self.__svn_version_tuple = (major, minor, patch) def getSvnVersion( self ): return self.__svn_version_tuple class Win32CompilerMSVC90(Compiler): def __init__( self, setup ): Compiler.__init__( self, setup ) self._find_paths_pycxx_dir = [] self._find_paths_pycxx_src = [ '%(PYCXX)s/Src', ] self._find_paths_svn_inc = [] self._find_paths_svn_bin = [] self._find_paths_svn_lib = [] self._find_paths_apr_inc = [] self._find_paths_apr_util_inc = [] self._find_paths_apr_lib = [] if self.options.hasOption( '--svn-root-dir' ): svn_root_dir = self.options.getOption( '--svn-root-dir' ) self._find_paths_apr_inc.append( r'%s\include\apr' % (svn_root_dir,) ) self._find_paths_apr_util_inc.append( r'%s\include\apr-util' % (svn_root_dir,) ) self._find_paths_apr_lib.append( r'%s\lib\apr' % (svn_root_dir,) ) self._addVar( 'PYTHON_DIR', sys.exec_prefix ) self._addVar( 'PYTHON_INC', r'%(PYTHON_DIR)s\include' ) self._addVar( 'PYTHON_LIB', r'%(PYTHON_DIR)s\libs' ) self._completeInit() def platformFilename( self, filename ): return filename.replace( '/', '\\' ) def getPythonExtensionFileExt( self ): return '.pyd' def getProgramExt( self ): return '.exe' def getObjectExt( self ): return '.obj' def getTouchCommand( self ): return r'c:\UnxUtils\touch' def generateMakefileHeader( self ): self.makePrint( '#' ) self.makePrint( '# Pysvn Makefile generated by setup.py' ) self.makePrint( '#' ) self.makePrint( 'CCC=cl /nologo' ) self.makePrint( 'CC=cl /nologo' ) self.makePrint( '' ) self.makePrint( 'LDSHARED=$(CCC) /LD /Zi /MT /EHsc' ) self.makePrint( 'LDEXE=$(CCC) /Zi /MT /EHsc' ) self.makePrint( self.expand( 'LDLIBS=%(LDLIBS)s' ) ) self.makePrint( '' ) def ruleLinkProgram( self, target ): pyd_filename = target.getTargetFilename() pdf_filename = target.getTargetFilename( '.pdf' ) all_objects = [source.getTargetFilename() for source in target.all_sources] rules = [''] rules.append( '' ) rules.append( '%s : %s' % (pyd_filename, ' '.join( all_objects )) ) rules.append( '\t@echo Link %s' % (pyd_filename,) ) rules.append( '\t@$(LDEXE) %%(CCCFLAGS)s /Fe%s /Fd%s %s $(LDLIBS)' % (pyd_filename, pdf_filename, ' '.join( all_objects )) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleLinkShared( self, target ): pyd_filename = target.getTargetFilename() pdf_filename = target.getTargetFilename( '.pdf' ) all_objects = [source.getTargetFilename() for source in target.all_sources] rules = [''] rules.append( '' ) rules.append( '%s : %s' % (pyd_filename, ' '.join( all_objects )) ) rules.append( '\t@echo Link %s' % (pyd_filename,) ) rules.append( '\t@$(LDSHARED) %%(CCCFLAGS)s /Fe%s /Fd%s %s %%(PYTHON_LIB)s\python%d%d.lib $(LDLIBS)' % (pyd_filename, pdf_filename, ' '.join( all_objects ), sys.version_info[0], sys.version_info[1]) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleCxx( self, target ): obj_filename = target.getTargetFilename() rules = [] rules.append( '%s: %s %s' % (obj_filename, target.src_filename, ' '.join( target.all_dependencies )) ) rules.append( '\t@echo Compile: %s into %s' % (target.src_filename, target.getTargetFilename()) ) rules.append( '\t@$(CCC) /c %%(CCCFLAGS)s /Fo%s /Fd%s %s' % (obj_filename, target.dependent.getTargetFilename( '.pdb' ), target.src_filename) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleC( self, target ): # can reuse the C++ rule self.ruleCxx( target ) def ruleClean( self, filename ): rules = [] rules.append( 'clean::' ) rules.append( '\tif exist %s del %s' % (filename, filename) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def get_lib_name_for_platform( self, libname ): return '%s.lib' % (libname,) def setupUtilities( self ): self._addVar( 'CCCFLAGS', r'/Zi /MT /EHsc ' r'/I. /I%(APR_INC)s /I%(APU_INC)s /I%(SVN_INC)s ' r'/D_CRT_NONSTDC_NO_DEPRECATE ' r'/U_DEBUG ' r'/DWIN32 ' r'/D%(DEBUG)s' ) def setupPySvn( self ): self._pysvnModuleSetup() self._addVar( 'PYSVN_MODULE_BASENAME', self.pysvn_module_name ) py_cflags_list = [ r'/Zi /MT /EHsc ', r'/I. /I%(APR_INC)s /I%(APU_INC)s /I%(SVN_INC)s', r'/DPYCXX_PYTHON_2TO3 /I%(PYCXX)s /I%(PYCXX_SRC)s /I%(PYTHON_INC)s', r'/D_CRT_NONSTDC_NO_DEPRECATE', r'/U_DEBUG', r'/DWIN32', r'/D%(DEBUG)s', ] for define, value in self.py_module_defines: py_cflags_list.append( '/D%s=%s' % (define, value) ) py_cflags_list.extend( self._getDefines( '/D%s' ) ) self._addVar( 'CCCFLAGS', ' '.join( py_cflags_list ) ) ldlibs = [ r'odbc32.lib', r'odbccp32.lib', r'Rpcrt4.lib', r'Mswsock.lib', r'%(SVN_LIB)s\libsvn_client-1.lib', r'%(SVN_LIB)s\libsvn_delta-1.lib', r'%(SVN_LIB)s\libsvn_diff-1.lib', r'%(SVN_LIB)s\libsvn_fs-1.lib', r'%(SVN_LIB)s\libsvn_fs_fs-1.lib', r'%(SVN_LIB)s\libsvn_ra-1.lib', r'%(SVN_LIB)s\libsvn_ra_local-1.lib', r'%(SVN_LIB)s\libsvn_ra_svn-1.lib', r'%(SVN_LIB)s\libsvn_repos-1.lib', r'%(SVN_LIB)s\libsvn_subr-1.lib', r'%(SVN_LIB)s\libsvn_wc-1.lib', r'%(SVN_LIB)s\apr-iconv\libapriconv-1.lib', r'%(SVN_LIB)s\apr-util\libaprutil-1.lib', r'%(SVN_LIB)s\apr-util\xml.lib', r'%(SVN_LIB)s\apr\libapr-1.lib', ] if os.path.exists( self.expand( r'%(SVN_LIB)s\serf\serf-1.lib' ) ): ldlibs.append( r'%(SVN_LIB)s\serf\serf-1.lib' ) elif os.path.exists( self.expand( r'%(SVN_LIB)s\libsvn_ra_neon-1.lib' ) ): ldlibs.append( r'%(SVN_LIB)s\libsvn_ra_neon-1.lib' ) else: raise SetupError( 'Cannot find serf or neon' ) ldlibs.append( r'ws2_32.lib' ) self._addVar( 'LDLIBS', ' '.join( ldlibs ) ) def ruleAllTestCase( self, target_name, all_test_cases ): self.makePrint( '%s: %s' % (target_name , ' '.join( ['test-%s.win32.new.log.clean' % (tc.test_name,) for tc in all_test_cases] )) ) def ruleTestCase( self, test_case ): v = {'TN': test_case.test_name ,'KGV': 'py%d-svn%d.%d' % (sys.version_info[0] ,self.getSvnVersion()[0], self.getSvnVersion()[1]) ,'SVN_VERSION': '%d.%d.%d' % self.getSvnVersion() } rules = [] rules.append( '' ) rules.append( '' ) rules.append( 'test-%(TN)s.win32.new.log: test-%(TN)s.cmd test-%(TN)s.win32.known_good-%(KGV)s.log' % v ) rules.append( '\t' '-subst b: /d >nul 2>&1' % v ) rules.append( '\t' 'if exist testroot-%(TN)s rmdir /s /q testroot-%(TN)s' % v ) rules.append( '\t' 'set PATH=%%(SVN_BIN)s;$(PATH)' % v ) rules.append( '\t' 'set PYTHON=%%(PYTHON)s' % v ) rules.append( '\t' 'test-%(TN)s.cmd >test-%(TN)s.win32.new.log 2>&1' % v ) rules.append( '' ) rules.append( 'test-%(TN)s.win32.new.log.clean: test-%(TN)s.win32.new.log' % v ) rules.append( '\t' '%%(PYTHON)s benchmark_diff.py %(SVN_VERSION)s test-%(TN)s.win32.known_good-%(KGV)s.log test-%(TN)s.win32.new.log' % v ) rules.append( '' ) rules.append( 'clean-%(TN)s:' % v ) rules.append( '\t' '-subst b: /d >nul 2>&1' % v ) rules.append( '\t' 'if exist test-%(TN)s.win32.new.log del test-%(TN)s.win32.new.log' % v ) rules.append( '\t' 'if exist testroot-%(TN)s rmdir /s /q testroot-%(TN)s' % v ) rules.append( '' ) rules.append( 'diff-%(TN)s: test-%(TN)s.win32.new.log' % v ) rules.append( '\t' 'wb-diff.cmd test-%(TN)s.win32.known_good-%(KGV)s.log.clean test-%(TN)s.win32.new.log.clean' % v ) rules.append( '' ) rules.append( 'new-%(TN)s: test-%(TN)s.win32.new.log' % v ) rules.append( '\t' 'copy test-%(TN)s.win32.new.log test-%(TN)s.win32.known_good-%(KGV)s.log' % v ) self.makePrint( self.expand( '\n'.join( rules ) ) ) class CompilerGCC(Compiler): def __init__( self, setup ): Compiler.__init__( self, setup ) self._addVar( 'CCC', 'g++' ) self._addVar( 'CC', 'gcc' ) def getPythonExtensionFileExt( self ): return '.so' def getProgramExt( self ): return '' def getObjectExt( self ): return '.o' def getTouchCommand( self ): return 'touch' def generateMakefileHeader( self ): self.makePrint( '#' ) self.makePrint( '# Pysvn Makefile generated by setup.py' ) self.makePrint( '#' ) self.makePrint( '' ) def ruleLinkProgram( self, target ): target_filename = target.getTargetFilename() all_objects = [source.getTargetFilename() for source in target.all_sources] rules = [] rules.append( '%s : %s' % (target_filename, ' '.join( all_objects )) ) rules.append( '\t@echo Link %s' % (target_filename,) ) rules.append( '\t@%%(LDEXE)s -o %s %%(CCCFLAGS)s %s' % (target_filename, ' '.join( all_objects )) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleLinkShared( self, target ): target_filename = target.getTargetFilename() all_objects = [source.getTargetFilename() for source in target.all_sources] rules = [] rules.append( '%s : %s' % (target_filename, ' '.join( all_objects )) ) rules.append( '\t@echo Link %s' % (target_filename,) ) rules.append( '\t@%%(LDSHARED)s -o %s %%(CCCFLAGS)s %s %%(LDLIBS)s' % (target_filename, ' '.join( all_objects )) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleCxx( self, target ): obj_filename = target.getTargetFilename() rules = [] rules.append( '%s: %s %s' % (obj_filename, target.src_filename, ' '.join( target.all_dependencies )) ) rules.append( '\t@echo Compile: %s into %s' % (target.src_filename, obj_filename) ) rules.append( '\t@%%(CCC)s -c %%(CCCFLAGS)s -o%s %s' % (obj_filename, target.src_filename) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleC( self, target ): obj_filename = target.getTargetFilename() rules = [] rules.append( '%s: %s %s' % (obj_filename, target.src_filename, ' '.join( target.all_dependencies )) ) rules.append( '\t@echo Compile: %s into %s' % (target.src_filename, target) ) rules.append( '\t@%%(CC)s -c %%(CCCFLAGS)s -o%s %s' % (obj_filename, target.src_filename) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleClean( self, filename ): rules = [] rules.append( 'clean::' ) rules.append( '\trm -f %s' % (filename,) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleAllTestCase( self, target_name, all_test_cases ): self.makePrint( '%s: %s' % (target_name , ' '.join( ['test-%s.unix.new.log.clean' % (tc.test_name,) for tc in all_test_cases] )) ) def ruleTestCase( self, test_case ): v = {'TN': test_case.test_name ,'KGV': 'py%d-svn%d.%d' % (sys.version_info[0] ,self.getSvnVersion()[0], self.getSvnVersion()[1]) ,'SVN_VERSION': '%d.%d.%d' % self.getSvnVersion() } rules = [] rules.append( '' ) rules.append( '' ) rules.append( 'test-%(TN)s.unix.new.log: test-%(TN)s.sh test-%(TN)s.unix.known_good-%(KGV)s.log' % v ) rules.append( '\t' '-rm -rf testroot-%(TN)s' % v ) rules.append( '\t' 'LD_LIBRARY_PATH=%%(SVN_LIB)s:%%(APR_LIB)s PATH=%%(SVN_BIN)s:$(PATH) PYTHON=%%(PYTHON)s ./test-%(TN)s.sh >test-%(TN)s.unix.new.log 2>&1' % v ) rules.append( '' ) rules.append( 'test-%(TN)s.unix.new.log.clean: test-%(TN)s.unix.new.log' % v ) rules.append( '\t' '%%(PYTHON)s benchmark_diff.py %(SVN_VERSION)s test-%(TN)s.unix.known_good-%(KGV)s.log test-%(TN)s.unix.new.log' % v ) rules.append( '' ) rules.append( 'clean-%(TN)s:' % v ) rules.append( '\t' '-rm -f test-%(TN)s.unix.new.log' % v ) rules.append( '\t' '-rm -f test-%(TN)s.unix.new.log.clean' % v ) rules.append( '\t' '-rm -rf testroot-%(TN)s' % v ) rules.append( '' ) rules.append( 'diff-%(TN)s: test-%(TN)s.unix.new.log.clean' % v ) rules.append( '\t' 'wb-diff test-%(TN)s.unix.known_good-%(KGV)s.log.clean test-%(TN)s.unix.new.log.clean' % v ) rules.append( '' ) rules.append( 'new-%(TN)s: test-%(TN)s.unix.new.log' % v ) rules.append( '\t' 'cp test-%(TN)s.unix.new.log test-%(TN)s.unix.known_good-%(KGV)s.log' % v ) self.makePrint( self.expand( '\n'.join( rules ) ) ) class MacOsxCompilerGCC(CompilerGCC): def __init__( self, setup ): CompilerGCC.__init__( self, setup ) if self.options.hasOption( '--arch' ): arch_options = ' '.join( ['-arch %s' % (arch,) for arch in self.options.getOption( '--arch' )] ) else: arch_options = '' self._addVar( 'CCC', 'g++ %s' % (arch_options,) ) self._addVar( 'CC', 'gcc %s' % (arch_options,) ) self._find_paths_pycxx_dir = [ '../Import/pycxx-%d.%d.%d' % pycxx_version, distutils.sysconfig.get_python_inc() # typical Linux ] self._find_paths_pycxx_src = [ '%(PYCXX)s/Src', '/usr/share/python%s/CXX' % (distutils.sysconfig.get_python_version(),) # typical Linux ] self._find_paths_svn_inc = [ '/opt/local/include/subversion-1', # Darwin - darwin ports '/sw/include/subversion-1', # Darwin - Fink '/usr/include/subversion-1', # typical Linux '/usr/local/include/subversion-1', # typical *BSD '/usr/pkg/include/subversion-1', # netbsd ] self._find_paths_svn_bin = [ '/opt/local/bin', # Darwin - darwin ports '/sw/bin', # Darwin - Fink '/usr/bin', # typical Linux '/usr/local/bin', # typical *BSD '/usr/pkg/bin', # netbsd ] self._find_paths_svn_lib = [ '/opt/local/lib', # Darwin - darwin ports '/sw/lib', # Darwin - Fink '/usr/lib64', # typical 64bit Linux '/usr/lib', # typical Linux '/usr/local/lib64', # typical 64bit Linux '/usr/local/lib', # typical *BSD '/usr/pkg/lib', # netbsd ] self._find_paths_apr_inc = [ '/opt/local/include/apr-1', # Darwin - darwin ports '/sw/include/apr-1', # Darwin - fink '/usr/include/apr-1', # typical Linux '/usr/local/apr/include/apr-1', # Mac OS X www.metissian.com '/usr/pkg/include/apr-1', # netbsd '/usr/include/apache2', # alternate Linux '/usr/include/httpd', # alternate Linux '/usr/local/include/apr-1', # typical FreeBSD '/usr/local/include/apr0', # typical *BSD '/usr/local/include/apache2', # alternate *BSD ] self._find_paths_apr_util_inc = self._find_paths_apr_inc self._find_paths_apr_lib = [ '/opt/local/lib', # Darwin - darwin ports '/sw/lib', # Darwin - fink '/usr/lib64', # typical 64bit Linux '/usr/lib', # typical Linux '/usr/local/lib64', # typical 64bit Linux '/usr/local/lib', # typical *BSD '/usr/local/apr/lib', # Mac OS X www.metissian.com '/usr/pkg/lib', # netbsd ] self._completeInit() def get_lib_name_for_platform( self, libname ): return '%s.dylib' % (libname,) def setupUtilities( self ): self._addVar( 'CCCFLAGS', '-g ' '-no-long-double ' '-Wall -fPIC -fexceptions -frtti ' '-I. -I%(APR_INC)s -I%(SVN_INC)s ' '-D%(DEBUG)s' ) self._addVar( 'LDEXE', '%(CCC)s -g' ) def setupPySvn( self ): self._pysvnModuleSetup() self._addVar( 'PYSVN_MODULE_BASENAME', self.pysvn_module_name ) self._addVar( 'PYTHON_VERSION', '%d.%d' % (sys.version_info[0], sys.version_info[1]) ) self._addVar( 'PYTHON_DIR', sys.exec_prefix ) self._addVar( 'PYTHON_FRAMEWORK', os.path.join( sys.exec_prefix, 'Python' ) ) self._addVar( 'PYTHON_INC', distutils.sysconfig.get_python_inc() ) py_cflags_list = [ '-g', '-no-long-double', '-Wall -fPIC -fexceptions -frtti', '-I. -I%(APR_INC)s -I%(SVN_INC)s', '-DPYCXX_PYTHON_2TO3 -I%(PYCXX)s -I%(PYCXX_SRC)s -I%(PYTHON_INC)s', '-D%(DEBUG)s', ] for define, value in self.py_module_defines: py_cflags_list.append( '-D%s=%s' % (define, value) ) py_cflags_list.extend( self._getDefines( '-D%s' ) ) py_ld_libs = [ '-L%(SVN_LIB)s', '-L/usr/lib', '-lsvn_client-1', '-lsvn_repos-1', '-lsvn_wc-1', '-lsvn_fs-1', '-lsvn_subr-1', '-lsvn_diff-1', '-lapr-1', '-lssl', ] self._addVar( 'CCCFLAGS', ' '.join( py_cflags_list ) ) self._addVar( 'LDLIBS', ' '.join( py_ld_libs ) ) self._addVar( 'LDSHARED', '%(CCC)s -bundle -g ' '-framework System ' '%(PYTHON_FRAMEWORK)s ' '-framework CoreFoundation ' '-framework Kerberos ' '-framework Security ' '%(LDLIBS)s' ) class UnixCompilerGCC(CompilerGCC): def __init__( self, setup ): CompilerGCC.__init__( self, setup ) self._find_paths_pycxx_dir = [ '../Import/pycxx-%d.%d.%d' % pycxx_version, distutils.sysconfig.get_python_inc() # typical Linux ] self._find_paths_pycxx_src = [ '%(PYCXX)s/Src', '/usr/share/python%s/CXX' % distutils.sysconfig.get_python_version() # typical Linux ] self._find_paths_svn_inc = [ '/usr/include/subversion-1', # typical Linux '/usr/local/include/subversion-1', # typical *BSD '/usr/pkg/include/subversion-1', # netbsd ] self._find_paths_svn_bin = [ '/usr/bin', # typical Linux '/usr/local/bin', # typical *BSD '/usr/pkg/bin', # netbsd ] self._find_paths_svn_lib = [ '/usr/lib64', # typical 64bit Linux '/usr/lib', # typical Linux '/usr/local/lib64', # typical 64bit Linux '/usr/local/lib', # typical *BSD '/usr/pkg/lib', # netbsd ] self._find_paths_apr_inc = [ '/usr/include/apr-1', # typical Linux '/usr/local/apr/include/apr-1', # Mac OS X www.metissian.com '/usr/pkg/include/apr-1', # netbsd '/usr/include/apache2', # alternate Linux '/usr/include/httpd', # alternate Linux '/usr/local/include/apr-1', # typical *BSD '/usr/local/include/apache2', # alternate *BSD ] self._find_paths_apr_util_inc = self._find_paths_apr_inc self._find_paths_apr_lib = [ '/usr/lib64', # typical 64bit Linux '/usr/lib', # typical Linux '/usr/local/lib64', # typical 64bit Linux '/usr/local/lib', # typical *BSD '/usr/local/apr/lib', # Mac OS X www.metissian.com '/usr/pkg/lib', # netbsd ] self._completeInit() def get_lib_name_for_platform( self, libname ): if self.setup.platform == 'cygwin': return '%s.dll.a' % libname else: return '%s.so' % libname def setupUtilities( self ): self._addVar( 'CCCFLAGS', '-g ' '-Wall -fPIC -fexceptions -frtti ' '-I. -I%(APR_INC)s -I%(SVN_INC)s ' '-D%(DEBUG)s' ) self._addVar( 'LDEXE', '%(CCC)s -g' ) def setupPySvn( self ): self._pysvnModuleSetup() self._addVar( 'PYSVN_MODULE_BASENAME', self.pysvn_module_name ) self._addVar( 'PYTHON_VERSION', '%d.%d' % (sys.version_info[0], sys.version_info[1]) ) self._addVar( 'PYTHON_INC', distutils.sysconfig.get_python_inc( False ) ) self._addVar( 'PYTHON_ARCH_SPECIFIC_INC', distutils.sysconfig.get_python_inc( True ) ) py_cflags_list = [ '-Wall -fPIC -fexceptions -frtti', '-I. -I%(APR_INC)s -I%(SVN_INC)s', '-DPYCXX_PYTHON_2TO3 -I%(PYCXX)s -I%(PYCXX_SRC)s -I%(PYTHON_INC)s', '-I%(PYTHON_ARCH_SPECIFIC_INC)s', '-D%(DEBUG)s', ] for define, value in self.py_module_defines: py_cflags_list.append( '-D%s=%s' % (define, value) ) py_cflags_list.extend( self._getDefines( '-D%s' ) ) if self.options.hasOption( '--enable-debug' ): print( 'Info: Debug enabled' ) py_cflags_list.append( '-g' ) self._addVar( 'CCCFLAGS', ' '.join( py_cflags_list ) ) self._addVar( 'LDLIBS', ' '.join( self._getLdLibs() ) ) self._addVar( 'LDSHARED', '%(CCC)s -shared -g' ) #-------------------------------------------------------------------------------- class LinuxCompilerGCC(UnixCompilerGCC): def __init__( self, setup ): UnixCompilerGCC.__init__( self, setup ) def _getLdLibs( self ): py_ld_libs = [ '-L%(SVN_LIB)s', ] if not self.setup.options.hasOption( '--norpath' ): py_ld_libs.extend( [ '-Wl,--rpath', '-Wl,%(SVN_LIB)s' ] ) py_ld_libs.extend( [ '-lsvn_client-1', '-lsvn_repos-1', '-lsvn_wc-1', '-lsvn_fs-1', '-lsvn_subr-1', '-lsvn_diff-1', '-lapr-1', ] ) return py_ld_libs class FreeBsdCompilerGCC(UnixCompilerGCC): def __init__( self, setup ): UnixCompilerGCC.__init__( self, setup ) def _getLdLibs( self ): py_ld_libs = [ '-L%(SVN_LIB)s', '-Wl,--rpath', '-Wl,/usr/lib:/usr/local/lib', '-lsvn_client-1', '-lsvn_diff-1', '-lsvn_repos-1', ] if os.path.exists( '/usr/lib/libkrb5.so' ): py_ld_libs.append( '-lkrb5' ) py_ld_libs.extend( [ '-lcom_err', '-lexpat', '-lneon', ] ) return py_ld_libs class CygwinCompilerGCC(UnixCompilerGCC): def __init__( self, setup ): UnixCompilerGCC.__init__( self, setup ) def _getLdLibs( self ): py_ld_libs = [ '-L%(svn_lib_dir)s', '-L/usr/lib/python%d.%d/config -lpython%d.%d.dll' % (sys.version_info[0], sys.version_info[1], sys.version_info[0], sys.version_info[1]), '-lsvn_client-1', '-lsvn_repos-1', '-lsvn_subr-1', '-lsvn_delta-1', '-lsvn_fs_fs-1', '-lsvn_fs-1', '-lsvn_ra_svn-1', '-lsvn_repos-1', '-lsvn_ra_local-1', '-lsvn_diff-1', '-lsvn_ra-1', '-lsvn_wc-1', '-lapr-1', '-laprutil-1', '-liconv', '-lexpat', '-lpthread', '-lz', ] return py_ld_libs class AixCompilerGCC(UnixCompilerGCC): def __init__( self, setup ): UnixCompilerGCC.__init__( self, setup ) def _getLdLibs( self ): for path in sys.path: python_exp = os.path.join( path, 'config', 'python.exp' ) if os.path.exists( python_exp ): break else: python_exp = os.path.abspath( os.path.join( sys.executable, os.path.pardir, os.path.pardir, 'lib', 'python%d.%d' % (sys.version_info[0], sys.version_info[1]), 'config', 'python.exp')) if not os.path.exists(python_exp): python_exp = 'python.exp' py_ld_libs = [ '-L%(svn_lib_dir)s', '-lsvn_client-1', '-lsvn_repos-1', '-lsvn_subr-1', '-lsvn_delta-1', '-lsvn_fs_fs-1', '-lsvn_fs-1', '-lsvn_ra_svn-1', '-lsvn_repos-1', '-lsvn_ra_local-1', '-lsvn_diff-1', '-lsvn_ra-1', '-lsvn_wc-1', '-lsvn_fs_util-1', '-lsvn_ra_neon-1', '-lapr-1', '-lneon', '-laprutil-1', '-liconv', '-lexpat', '-lintl', '-lpthread', '-lz', '-Wl,-bI:%s' % (python_exp,), ] return py_ld_libs class SunOsCompilerGCC(UnixCompilerGCC): def __init__( self, setup ): UnixCompilerGCC.__init__( self, setup ) def _getLdLibs( self ): py_ld_libs = [ '-L%(svn_lib_dir)s', '-Wl,--rpath -Wl,%(svn_lib_dir)s', '-lsvn_client-1', '-lsvn_diff-1', '-lsvn_repos-1', '-lresolv', '-lexpat', '-lneon', ] return py_ld_libs #-------------------------------------------------------------------------------- class Target: def __init__( self, compiler, all_sources ): self.compiler = compiler self.__generated = False self.dependent = None self.all_sources = all_sources for source in self.all_sources: source.setDependent( self ) def getTargetFilename( self ): raise NotImplementedError( '%s.getTargetFilename' % self.__class__.__name__ ) def generateMakefile( self ): if self.__generated: return self.__generated = True return self._generateMakefile() def _generateMakefile( self ): raise NotImplementedError( '_generateMakefile' ) def ruleClean( self, ext=None ): if ext is None: target_filename = self.getTargetFilename() else: target_filename = self.getTargetFilename( ext ) self.compiler.ruleClean( target_filename ) def setDependent( self, dependent ): debug( '%r.setDependent( %r )' % (self, dependent,) ) self.dependent = dependent class Program(Target): def __init__( self, compiler, output, all_sources ): self.output = output Target.__init__( self, compiler, all_sources ) debug( 'Program:0x%8.8x.__init__( %r, ... )' % (id(self), output,) ) def __repr__( self ): return '' % (id(self), self.output) def getTargetFilename( self, ext=None ): if ext is None: ext = self.compiler.getProgramExt() return self.compiler.platformFilename( self.compiler.expand( '%s%s' % (self.output, ext) ) ) def _generateMakefile( self ): debug( 'Program:0x%8.8x.generateMakefile() for %r dependent %r' % (id(self), self.output, self.dependent) ) self.compiler.ruleLinkProgram( self ) self.compiler.ruleClean( self.getTargetFilename() ) for source in self.all_sources: source.generateMakefile() class PythonExtension(Target): def __init__( self, compiler, output, all_sources ): self.output = output Target.__init__( self, compiler, all_sources ) debug( 'PythonExtension:0x%8.8x.__init__( %r, ... )' % (id(self), output,) ) for source in self.all_sources: source.setDependent( self ) def __repr__( self ): return '' % (id(self), self.output) def getTargetFilename( self, ext=None ): if ext is None: ext = self.compiler.getPythonExtensionFileExt() return self.compiler.platformFilename( self.compiler.expand( '%s%s' % (self.output, ext) ) ) def _generateMakefile( self ): debug( 'PythonExtension:0x%8.8x.generateMakefile() for %r' % (id(self), self.output,) ) self.compiler.ruleLinkShared( self ) self.compiler.ruleClean( self.getTargetFilename( '.*' ) ) for source in self.all_sources: source.generateMakefile() class Source(Target): def __init__( self, compiler, src_filename, all_dependencies=None ): self.src_filename = compiler.platformFilename( compiler.expand( src_filename ) ) Target.__init__( self, compiler, [] ) debug( 'Source:0x%8.8x.__init__( %r, %r )' % (id(self), src_filename, all_dependencies) ) self.all_dependencies = all_dependencies if self.all_dependencies is None: self.all_dependencies = [] def __repr__( self ): return '' % (id(self), self.src_filename) def makePrint( self, line ): self.compiler.makePrint( line ) def getTargetFilename( self ): #if not os.path.exists( self.src_filename ): # raise SetupError( 'Cannot find source %s' % (self.src_filename,) ) obj_ext = self.compiler.getObjectExt() basename = os.path.basename( self.src_filename ) if basename.endswith( '.cpp' ): return self.compiler.platformFilename( self.compiler.expand( '%s%s' % (basename[:-len('.cpp')], obj_ext) ) ) if basename.endswith( '.cxx' ): return self.compiler.platformFilename( self.compiler.expand( '%s%s' % (basename[:-len('.cxx')], obj_ext) ) ) if basename.endswith( '.c' ): return self.compiler.platformFilename( self.compiler.expand( '%s%s' % (basename[:-len('.c')], obj_ext) ) ) raise SetupError( 'unknown source %r' % (self.src_filename,) ) def _generateMakefile( self ): debug( 'Source:0x%8.8x.generateMakefile() for %r' % (id(self), self.src_filename,) ) self.compiler.ruleCxx( self ) self.compiler.ruleClean( self.getTargetFilename() ) class PysvnSvnErrorsPy(Source): def __init__( self, compiler ): Source.__init__( self, compiler, [] ) debug( 'PysvnSvnErrorsPy:0x%8.8x.__init__()' % (id(self),) ) def __repr__( self ): return '' % (id(self),) def getTargetFilename( self ): return self.compiler.platformFilename( '' ) def generateMakefile( self ): rules = [''] rules.append( '%s : %s %s' % (self.getTargetFilename() ,self.compiler.platformFilename( '../Docs/generate_cpp_docs_from_html_docs.py' ) ,self.compiler.platformFilename( '../Docs/pysvn_prog_ref.html' )) ) rules.append( '\t@ echo Info: Make %s' % self.getTargetFilename() ) rules.append( '\t%%(PYTHON)s -u %s %%(SVN_INC)s %s %s pysvn_docs.hpp pysvn_docs.cpp' % (self.getTargetFilename() ,self.compiler.platformFilename( '../Docs/generate_cpp_docs_from_html_docs.py' ) ,self.compiler.platformFilename( '../Docs/pysvn_prog_ref.html' )) ) self.makePrint( self.compiler.expand( '\n'.join( rules ) ) ) self.ruleClean() class PysvnDocsSource(Source): def __init__( self, compiler ): Source.__init__( self, compiler, 'pysvn_docs.cpp', [] ) debug( 'PysvnDocsSource:0x%8.8x.__init__()' % (id(self),) ) def __repr__( self ): return '' % (id(self),) def getTargetFilename( self ): return self.compiler.platformFilename( 'pysvn_docs.cpp' ) def generateMakefile( self ): rules = [''] rules.append( '%s : %s %s' % (self.getTargetFilename() ,self.compiler.platformFilename( '../Docs/generate_cpp_docs_from_html_docs.py' ) ,self.compiler.platformFilename( '../Docs/pysvn_prog_ref.html' )) ) rules.append( '\t@ echo Info: Make %s' % self.getTargetFilename() ) rules.append( '\t%%(PYTHON)s -u %s %%(SVN_INC)s %s pysvn_docs.hpp pysvn_docs.cpp' % (self.compiler.platformFilename( '../Docs/generate_cpp_docs_from_html_docs.py' ) ,self.compiler.platformFilename( '../Docs/pysvn_prog_ref.html' )) ) self.makePrint( self.compiler.expand( '\n'.join( rules ) ) ) self.ruleClean() class GenerateSvnErrorCodesHeader(Source): def __init__( self, compiler ): Source.__init__( self, compiler, 'generate_svn_error_codes.hpp', [] ) debug( 'GenerateSvnErrorCodesHeader:0x%8.8x.__init__()' % (id(self),) ) def __repr__( self ): return '' % (id(self),) def getTargetFilename( self ): return self.compiler.platformFilename( 'generate_svn_error_codes.hpp' ) def generateMakefile( self ): rules = [''] rules.append( '%s : %s' % (self.getTargetFilename() ,self.compiler.platformFilename( 'generate_svn_error_codes/create_svn_error_codes_hpp.py' )) ) rules.append( '\t@ echo Info: Make %s' % self.getTargetFilename() ) rules.append( '\t%%(PYTHON)s -u %s %%(SVN_INC)s' % (self.compiler.platformFilename( 'generate_svn_error_codes/create_svn_error_codes_hpp.py' ),) ) self.makePrint( self.compiler.expand( '\n'.join( rules ) ) ) self.ruleClean() class PysvnDocsHeader(Source): def __init__( self, compiler, all_dependencies ): Source.__init__( self, compiler, 'pysvn_docs.hpp', [] ) self.all_dependencies = all_dependencies debug( 'PysvnDocsHeader:0x%8.8x.__init__()' % (id(self),) ) def __repr__( self ): return '' % (id(self),) def getTargetFilename( self ): return self.compiler.platformFilename( 'pysvn_docs.hpp' ) def generateMakefile( self ): rules = [''] rules.append( '%s : %s' % (self.getTargetFilename() ,' '.join( self.all_dependencies)) ) rules.append( '\t@ echo Info: Make %s' % self.getTargetFilename() ) rules.append( '\t%s %s' % (self.compiler.getTouchCommand() ,self.getTargetFilename(),) ) self.makePrint( self.compiler.expand( '\n'.join( rules ) ) ) self.ruleClean() class PysvnVersionHeader(Source): def __init__( self, compiler ): Source.__init__( self, compiler, 'pysvn_version.hpp', [] ) debug( 'PysvnVersionHeader:0x%8.8x.__init__()' % (id(self),) ) def __repr__( self ): return '' % (id(self),) def getTargetFilename( self ): return self.compiler.platformFilename( 'pysvn_version.hpp' ) def generateMakefile( self ): rules = [''] rules.append( '%s : %s %s %s' % (self.getTargetFilename() ,self.compiler.platformFilename( '../Builder/brand_version.py' ) ,self.compiler.platformFilename( '../Builder/version.info' ) ,self.compiler.platformFilename( 'pysvn_version.hpp.template' )) ) rules.append( '\t@ echo Info: Make %s' % self.getTargetFilename() ) rules.append( '\t%%(PYTHON)s -u %s %s %s' % (self.compiler.platformFilename( '../Builder/brand_version.py' ) ,self.compiler.platformFilename( '../Builder/version.info' ) ,self.compiler.platformFilename( 'pysvn_version.hpp.template' )) ) self.makePrint( self.compiler.expand( '\n'.join( rules ) ) ) self.ruleClean() class PysvnModuleInit(Source): def __init__( self, compiler ): Source.__init__( self, compiler, 'pysvn/__init__.py', [] ) debug( 'PysvnModuleInit:0x%8.8x.__init__()' % (id(self),) ) def __repr__( self ): return '' % (id(self),) def getTargetFilename( self ): return self.compiler.platformFilename( 'pysvn/__init__.py' ) def generateMakefile( self ): rules = [''] rules.append( '%s : %s %s %s' % (self.getTargetFilename() ,self.compiler.platformFilename( 'pysvn/__init__.py.template' ) ,self.compiler.platformFilename( 'create__init__.py' ) ,self.compiler.platformFilename( 'generate_svn_error_codes/generate_svn_error_codes%s' % (self.compiler.getProgramExt(),) )) ) rules.append( '\t@ echo Info: Make %s' % self.getTargetFilename() ) rules.append( '\t%%(PYTHON)s -u %s %s %s %s %%(PYSVN_MODULE_BASENAME)s%s' % (self.compiler.platformFilename( 'create__init__.py' ) ,self.compiler.platformFilename( 'pysvn/__init__.py.template' ) ,self.getTargetFilename() ,self.compiler.platformFilename( 'generate_svn_error_codes/generate_svn_error_codes%s' % (self.compiler.getProgramExt(),) ) ,self.compiler.getPythonExtensionFileExt()) ) self.makePrint( self.compiler.expand( '\n'.join( rules ) ) ) self.ruleClean() class TestCase(Target): def __init__( self, compiler, test_name ): self.test_name = test_name Target.__init__( self, compiler, [] ) debug( 'TestCase:0x%8.8x.__init__( %r )' % (id(self), test_name) ) def __repr__( self ): return '' % (id(self), self.test_name) def _generateMakefile( self ): debug( 'TestCase:0x%8.8x.generateMakefile() for %r' % (id(self), self.test_name) ) self.compiler.ruleTestCase( self ) pysvn-1.7.8/Source/pysvn/__init__.py.template000644 000771 000771 00000011151 11471734335 021563 0ustar00barrybarry000000 000000 ''' ==================================================================== Copyright (c) 2003-2009 Barry A Scott. All rights reserved. This software is licensed as described in the file LICENSE.txt, which you should have received as part of this distribution. ==================================================================== ''' import sys try: import UserDict user_dict_base = UserDict.IterableUserDict except ImportError: import collections user_dict_base = collections.UserDict class PysvnDictBase(user_dict_base): def __init__( self, value_dict, name='' ): user_dict_base.__init__( self, value_dict ) self.__name = name if self.__name is None: print( '%s given None as name' % self.__class__.__name__ ) def __getattr__( self, name ): if name in self.data: return self.data[ name ] raise AttributeError( "%s instance has no attribute '%s'" % (self.__class__.__name__, name) ) def __repr__( self ): return '<%s %s>' % (self.__class__.__name__, repr(self.__name)) class PysvnDirent(PysvnDictBase): def __init__( self, value_dict ): PysvnDictBase.__init__( self, value_dict, value_dict.get( 'name', None ) ) class PysvnList(PysvnDictBase): def __init__( self, value_dict ): PysvnDictBase.__init__( self, value_dict, value_dict.get( 'path', None ) ) class PysvnEntry(PysvnDictBase): def __init__( self, value_dict ): PysvnDictBase.__init__( self, value_dict, value_dict.get( 'name', None ) ) class PysvnInfo(PysvnDictBase): def __init__( self, value_dict ): PysvnDictBase.__init__( self, value_dict ) class PysvnLock(PysvnDictBase): def __init__( self, value_dict ): PysvnDictBase.__init__( self, value_dict ) class PysvnLog(PysvnDictBase): def __init__( self, value_dict ): PysvnDictBase.__init__( self, value_dict ) class PysvnLogChangedPath(PysvnDictBase): def __init__( self, value_dict ): PysvnDictBase.__init__( self, value_dict ) class PysvnWcInfo(PysvnDictBase): def __init__( self, value_dict ): PysvnDictBase.__init__( self, value_dict ) class PysvnStatus(PysvnDictBase): def __init__( self, value_dict ): PysvnDictBase.__init__( self, value_dict, value_dict.get( 'path', None ) ) class PysvnDiffSummary(PysvnDictBase): def __init__( self, value_dict ): PysvnDictBase.__init__( self, value_dict, value_dict.get( 'path', None ) ) # An indication that you are interested in the @c kind field SVN_DIRENT_KIND = 0x00001 # An indication that you are interested in the @c size field SVN_DIRENT_SIZE = 0x00002 # An indication that you are interested in the @c has_props field SVN_DIRENT_HAS_PROPS = 0x00004 # An indication that you are interested in the @c created_rev field SVN_DIRENT_CREATED_REV = 0x00008 # An indication that you are interested in the @c time field SVN_DIRENT_TIME = 0x00010 # An indication that you are interested in the @c last_author field SVN_DIRENT_LAST_AUTHOR = 0x00020 # A combination of all the dirent fields SVN_DIRENT_ALL = 0xffffffff try: maj_min = sys.version_info[:2] ### IMPORT BLOCK BEGIN # # use an if tree so that its easy for app makers to # find the import that is requires # if maj_min == (2,3): import _pysvn_2_3 _pysvn = _pysvn_2_3 elif maj_min == (2,4): import _pysvn_2_4 _pysvn = _pysvn_2_4 elif maj_min == (2,5): import _pysvn_2_5 _pysvn = _pysvn_2_5 elif maj_min == (2,6): import _pysvn_2_6 _pysvn = _pysvn_2_6 elif maj_min == (2,7): import _pysvn_2_7 _pysvn = _pysvn_2_7 elif maj_min == (3,0): import _pysvn_3_0 _pysvn = _pysvn_3_0 elif maj_min == (3,1): import _pysvn_3_1 _pysvn = _pysvn_3_1 else: raise ImportError( 'Fix pysvn/__init__.py to support python %d.%d' % tuple(maj_min) ) ### IMPORT BLOCK END for key, value in _pysvn.__dict__.items(): if not key.startswith( '__' ): globals()[ key ] = value except ImportError as e: # check for common installation errors that show up as ImportError if ': undefined symbol:' in str(e): raise ImportError( 'pysvn was built against newer (svn, apr, etc.) libraries then the ones installed on this system. %s' % str(e) ) else: raise def Client( config_dir='' ): return _pysvn._Client( config_dir, result_wrappers=globals() ) def Transaction( repos_path, transaction_name, is_revision=False ): return _pysvn._Transaction( repos_path, transaction_name, is_revision, result_wrappers=globals() ) pysvn-1.7.8/Source/generate_svn_error_codes/create_svn_error_codes_hpp.py000644 000771 000771 00000001021 11065126507 027455 0ustar00barrybarry000000 000000 # # create_svn_error_codes_hpp.py # import sys import os svn_include = sys.argv[1] f = open( 'generate_svn_error_codes.hpp', 'w' ) svn_err_file = open( os.path.join( svn_include, 'svn_error_codes.h' ), 'r' ) emit = False for line in svn_err_file: if line == 'SVN_ERROR_START\n': emit = True if emit and 'SVN_ERRDEF(' in line: symbol = line.split( 'SVN_ERRDEF(' )[1].split( ',' )[0] f.write( ' printf( " %s = %%d\\n", %s );\n' % (symbol.lower()[len('SVN_ERR_'):], symbol) ) f.close() pysvn-1.7.8/Source/generate_svn_error_codes/generate_svn_error_codes.cpp000644 000771 000771 00000000330 11655466510 027277 0ustar00barrybarry000000 000000 #include #include #include "svn_error_codes.h" int main( int argc, char **argv ) { printf( "\n" ); printf( "class svn_err:\n" ); #include "generate_svn_error_codes.hpp" return 0; } pysvn-1.7.8/Patches/readme.txt000644 000771 000771 00000000153 10133330526 016572 0ustar00barrybarry000000 000000 This directory contains any patches that need to be applied to 3rd party code to allow pysvn to build. pysvn-1.7.8/Patches/test_proplist.cpp000644 000771 000771 00000004265 11654776730 020247 0ustar00barrybarry000000 000000 #include #include #include #include "svn_config.h" #include "svn_pools.h" #include "svn_client.h" static int elapse_time(); int main( int argc, char **argv ) { if( argc < 4 ) { std::cout << "Usage: " << argv[0] << " " << std::endl; std::cout << " " << argv[0] << " readme.txt 50 0" << std::endl; std::cout << " " << argv[0] << " ../Sources 1 1" << std::endl; return 1; } apr_initialize(); apr_pool_initialize(); apr_pool_t *m_pool; apr_pool_create( &m_pool, NULL ); svn_config_ensure( "", m_pool ); svn_client_ctx_t m_context; memset( &m_context, 0, sizeof( m_context ) ); // get the config based on the config dir passed in svn_config_get_config( &m_context.config, "", m_pool ); apr_pool_t *pool = svn_pool_create( NULL ); svn_opt_revision_t revision; revision.kind = svn_opt_revision_working; char *path = argv[1]; svn_boolean_t recurse = atoi( argv[3] ); int t0 = elapse_time(); int max_calls = atoi( argv[2] ); int i; for( i=0; i # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=test_proplist - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "test_proplist.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "test_proplist.mak" CFG="test_proplist - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "test_proplist - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "test_proplist - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "test_proplist - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /O2/D "WIN32" /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "$(APR)/apr/include" /I "$(APR)/apr-util/include" /I "$(APR)/apr-util/xml/expat/lib" /I "$(SUBVERSION)/subversion/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Rpcrt4.lib Mswsock.lib $(SUBVERSION)\Release\subversion\libsvn_client\libsvn_client-1.lib $(SUBVERSION)\Release\subversion\libsvn_delta\libsvn_delta-1.lib $(SUBVERSION)\Release\subversion\libsvn_diff\libsvn_diff-1.lib $(SUBVERSION)\Release\subversion\libsvn_fs\libsvn_fs-1.lib $(SUBVERSION)\Release\subversion\libsvn_fs_base\libsvn_fs_base-1.lib $(SUBVERSION)\Release\subversion\libsvn_fs_fs\libsvn_fs_fs-1.lib $(SUBVERSION)\Release\subversion\libsvn_ra\libsvn_ra-1.lib $(SUBVERSION)\Release\subversion\libsvn_ra_dav\libsvn_ra_dav-1.lib $(SUBVERSION)\Release\subversion\libsvn_ra_local\libsvn_ra_local-1.lib $(SUBVERSION)\Release\subversion\libsvn_ra_svn\libsvn_ra_svn-1.lib $(SUBVERSION)\Release\subversion\libsvn_repos\libsvn_repos-1.lib $(SUBVERSION)\Release\subversion\libsvn_subr\libsvn_subr-1.lib $(SUBVERSION)\Release\subversion\libsvn_wc\libsvn_wc-1.lib $(APR)\apr-iconv\RELEASE\libapriconv.lib $(APR)\apr-util\RELEASE\libaprutil.lib $(APR)\apr-util\xml\expat\lib\LibR\xml.lib $(APR)\apr\RELEASE\libapr.lib $(SUBVERSION)\db4-win\lib\libdb43.lib $(SUBVERSION)\neon\libneon.lib ws2_32.lib /nologo /subsystem:console /pdb:"sept" /machine:I386 /out:"test_proplist.exe" # SUBTRACT LINK32 /pdb:none !ELSEIF "$(CFG)" == "test_proplist - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "$(APR)/apr/include" /I "$(APR)/apr-util/include" /I "$(APR)/apr-util/xml/expat/lib" /I "$(SUBVERSION)/subversion/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib Rpcrt4.lib Mswsock.lib $(SUBVERSION)\Release\subversion\libsvn_client\libsvn_client-1.lib $(SUBVERSION)\Release\subversion\libsvn_delta\libsvn_delta-1.lib $(SUBVERSION)\Release\subversion\libsvn_diff\libsvn_diff-1.lib $(SUBVERSION)\Release\subversion\libsvn_fs\libsvn_fs-1.lib $(SUBVERSION)\Release\subversion\libsvn_fs_base\libsvn_fs_base-1.lib $(SUBVERSION)\Release\subversion\libsvn_fs_fs\libsvn_fs_fs-1.lib $(SUBVERSION)\Release\subversion\libsvn_ra\libsvn_ra-1.lib $(SUBVERSION)\Release\subversion\libsvn_ra_dav\libsvn_ra_dav-1.lib $(SUBVERSION)\Release\subversion\libsvn_ra_local\libsvn_ra_local-1.lib $(SUBVERSION)\Release\subversion\libsvn_ra_svn\libsvn_ra_svn-1.lib $(SUBVERSION)\Release\subversion\libsvn_repos\libsvn_repos-1.lib $(SUBVERSION)\Release\subversion\libsvn_subr\libsvn_subr-1.lib $(SUBVERSION)\Release\subversion\libsvn_wc\libsvn_wc-1.lib $(APR)\apr-iconv\RELEASE\libapriconv.lib $(APR)\apr-util\RELEASE\libaprutil.lib $(APR)\apr-util\xml\expat\lib\LibR\xml.lib $(APR)\apr\RELEASE\libapr.lib $(SUBVERSION)\db4-win\lib\libdb43.lib $(SUBVERSION)\neon\libneon.lib ws2_32.lib /nologo /subsystem:console /pdb:"sept" /machine:I386 /out:"test_proplist.exe" # SUBTRACT LINK32 /pdb:none !ENDIF # Begin Target # Name "test_proplist - Win32 Release" # Name "test_proplist - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\test_proplist.cpp # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project pysvn-1.7.8/Patches/test_proplist.dsw000644 000771 000771 00000001045 10140664312 020230 0ustar00barrybarry000000 000000 Microsoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "test_proplist"=.\test_proplist.dsp - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### pysvn-1.7.8/Patches/test_proplist.mak000644 000771 000771 00000000377 10140664776 020230 0ustar00barrybarry000000 000000 CCCFLAGS=-fPIC -fexceptions -frtti -I$(SVN_INC) -I$(APR_INC) LDLIBS=-L$(SVN_LIB) -lsvn_client-1 -lapr-0 test_proplist: test_proplist.o g++ -g -o test_proplist test_proplist.o $(LDLIBS) test_proplist.o: test_proplist.cpp g++ -c -g $(CCCFLAGS) -o $@ $< pysvn-1.7.8/Patches/test_proplist.sh000755 000771 000771 00000000367 11654776730 020101 0ustar00barrybarry000000 000000 #!/bin/sh export SVN_INC=/usr/include/subversion-1 export SVN_LIB=/usr/lib if [ -e /usr/include/apr-0 ] then export APR_INC=/usr/include/apr-0 else export APR_INC=/usr/include/apache2 fi export APR_LIB=/usr/lib make -f test_proplist.mak pysvn-1.7.8/Kit/FreeBSD/000755 000771 000771 00000000000 12204167354 015157 5ustar00barrybarry000000 000000 pysvn-1.7.8/Kit/Linux/000755 000771 000771 00000000000 12204167354 015044 5ustar00barrybarry000000 000000 pysvn-1.7.8/Kit/MacOSX/000755 000771 000771 00000000000 12204167353 015036 5ustar00barrybarry000000 000000 pysvn-1.7.8/Kit/Win32-1.4/000755 000771 000771 00000000000 12204167354 015147 5ustar00barrybarry000000 000000 pysvn-1.7.8/Kit/Win32-1.5/000755 000771 000771 00000000000 12204167354 015150 5ustar00barrybarry000000 000000 pysvn-1.7.8/Kit/Win32-1.6/000755 000771 000771 00000000000 12204167354 015151 5ustar00barrybarry000000 000000 pysvn-1.7.8/Kit/Win32-1.7/000755 000771 000771 00000000000 12204167354 015152 5ustar00barrybarry000000 000000 pysvn-1.7.8/Kit/Win32-1.8/000755 000771 000771 00000000000 12204167354 015153 5ustar00barrybarry000000 000000 pysvn-1.7.8/Kit/Win32-1.8/makefile000644 000771 000771 00000000372 12164343227 016655 0ustar00barrybarry000000 000000 # # makefile - make the windows kit # # 1.8 can use the 1.6 makefiles # all_msvc90: cd ..\Win32-1.6 & $(MAKE) all_msvc90 mkdir tmp\Output copy /y ..\win32-1.6\tmp\Output\py*.exe tmp\Output >nul clean: cd ..\Win32-1.6 & $(MAKE) clean pysvn-1.7.8/Kit/Win32-1.7/makefile000644 000771 000771 00000000372 11724413760 016655 0ustar00barrybarry000000 000000 # # makefile - make the windows kit # # 1.7 can use the 1.6 makefiles # all_msvc90: cd ..\Win32-1.6 & $(MAKE) all_msvc90 mkdir tmp\Output copy /y ..\win32-1.6\tmp\Output\py*.exe tmp\Output >nul clean: cd ..\Win32-1.6 & $(MAKE) clean pysvn-1.7.8/Kit/Win32-1.6/makefile000644 000771 000771 00000000710 11723227644 016653 0ustar00barrybarry000000 000000 # # makefile - make the windows kit # all_msvc90: kit_msvc kit_msvc: pysvn.iss setup_version_handling.py if not exist tmp mkdir tmp copy ..\..\LICENSE.txt tmp\LICENSE.txt copy $(SVN_BIN)\*.dll tmp $(PYTHON) setup_version_handling.py "C:\Program Files (x86)\Inno Setup 5\ISCC.exe" tmp\pysvn-branded.iss tmp\setup_copy.cmd debug: "C:\Program Files (x86)\Inno Setup 5\Compil32.exe" pysvn.iss clean: if exist tmp rmdir /s /q tmp pysvn-1.7.8/Kit/Win32-1.6/pysvn.iss000644 000771 000771 00000005165 11724374053 017061 0ustar00barrybarry000000 000000 ; ; -- bemacs.iss -- ; [Code] function InitializeSetup(): Boolean; var install_path : string; rcb : Boolean; begin rcb := RegQueryStringValue( HKLM, 'SOFTWARE\Python\PythonCore\%(py_maj)d.%(py_min)d\InstallPath', '', install_path ); if not rcb then begin rcb := RegQueryStringValue( HKCU, 'SOFTWARE\Python\PythonCore\%(py_maj)d.%(py_min)d\InstallPath', '', install_path ); if not rcb then begin MsgBox( 'pysvn requires Python %(py_maj)d.%(py_min)d to be installed.' #13 #13 'Quitting installation', mbError, MB_OK ); end; end; Result := rcb; end; function pythondir(Default: String): String; var install_path : string; rcb : Boolean; begin rcb := RegQueryStringValue( HKLM, 'SOFTWARE\Python\PythonCore\%(py_maj)d.%(py_min)d\InstallPath', '', install_path ); if rcb then begin Result := install_path; end else begin rcb := RegQueryStringValue( HKCU, 'SOFTWARE\Python\PythonCore\%(py_maj)d.%(py_min)d\InstallPath', '', install_path ); if rcb then begin Result := install_path; end else begin Result := 'c:\python%(py_maj)d.%(py_min)d'; end; end; end; [Setup] AppName=Python %(py_maj)d.%(py_min)d PySVN AppVerName=Python %(py_maj)d.%(py_min)d PySVN %(pysvn_version_string)s AppCopyright=Copyright (C) 2003-2008 Barry A. Scott DefaultDirName={code:pythondir}\lib\site-packages\pysvn DefaultGroupName=PySVN for Python %(py_maj)d.%(py_min)d DisableStartupPrompt=yes InfoBeforeFile=info_before.txt Compression=bzip/9 [Files] Source: "..\..\..\Source\pysvn\__init__.py"; DestDir: "{app}"; Source: "..\..\..\Source\pysvn\_pysvn_%(py_maj)d_%(py_min)d.pyd"; DestDir: "{app}"; Flags: ignoreversion; Source: "..\..\..\Docs\pysvn.html"; DestDir: "{app}"; Source: "..\..\..\Docs\pysvn_prog_guide.html"; DestDir: "{app}"; Source: "..\..\..\Docs\pysvn_prog_ref.html"; DestDir: "{app}"; Source: "..\..\..\Docs\pysvn_prog_ref.js"; DestDir: "{app}"; Source: "LICENSE.txt"; DestDir: "{app}"; Source: "..\..\..\Examples\Client\svn_cmd.py"; DestDir: "{app}\Examples\Client"; Source: "..\..\..\Examples\Client\parse_datetime.py"; DestDir: "{app}\Examples\Client"; #include "system_files.iss" [Icons] Name: "{group}\PySVN Documentation"; Filename: "{app}\pysvn.html"; Name: "{group}\PySVN License"; Filename: "{app}\pysvn_LICENSE.txt"; Name: "{group}\PySVN Web Site"; Filename: "http://pysvn.tigris.org"; pysvn-1.7.8/Kit/Win32-1.6/setup_version_handling.py000644 000771 000771 00000004700 11724374053 022277 0ustar00barrybarry000000 000000 print( 'Info: setup_version_handling.py' ) import sys import time import os sys.path.insert( 0, '..\\..\\Source') import pysvn py_maj = sys.version_info[0] py_min = sys.version_info[1] python_version_string = '%d.%d.%d' % (py_maj, py_min, sys.version_info[2]) pysvn_version_string = '%d.%d.%d-%d' % (pysvn.version[0], pysvn.version[1], pysvn.version[2], pysvn.version[3]) svn_version_package_string = '%d%d%d' % (pysvn.svn_version[0], pysvn.svn_version[1], pysvn.svn_version[2]) svn_version_string = '%d.%d.%d' % (pysvn.svn_version[0], pysvn.svn_version[1], pysvn.svn_version[2]) build_time = time.time() build_time_str = time.strftime( '%d-%b-%Y %H:%M', time.localtime( build_time ) ) print( 'Info: Create info_before.txt' ) f = open( 'tmp\\info_before.txt', 'w' ) f.write( '''PySVN %s for Python %s and Subversion %s Barry Scott %s ''' % (pysvn_version_string, python_version_string, svn_version_string, build_time_str) ) f.close() print( 'Info: Creating pysvn-branded.iss from pysvn.iss' ) f = open( 'pysvn.iss', 'r' ) pysvn_iss_text = f.read() f.close() f = open( 'tmp\\pysvn-branded.iss', 'w' ) branding = { 'py_maj': py_maj, 'py_min': py_min, 'pysvn_version_string': pysvn_version_string, } print( 'Info: %r' % (branding,) ) f.write( pysvn_iss_text % branding ) f.close() all_dlls = [dll for dll in os.listdir( 'tmp' ) if dll.lower().endswith( '.dll' )] msvc90_dlls = [ R'c:\Program Files (x86)\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest', R'c:\Program Files (x86)\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\msvcm90.dll', R'c:\Program Files (x86)\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\msvcp90.dll', R'c:\Program Files (x86)\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\msvcr90.dll', ] if py_maj == 3: all_dlls.extend( msvc90_dlls ) elif py_maj == 2 and py_min >= 6: all_dlls.extend( msvc90_dlls ) else: raise RuntimeError( 'Unsupport python version' ) print( 'Info: Creating system_files.iss' ) f = open( 'tmp\\system_files.iss', 'w' ) for dll in all_dlls: f.write( 'Source: "%s"; DestDir: "{app}"; Flags: ignoreversion\n' % (dll,) ) f.close() print( 'Info: Create setup_copy.cmd' ) f = open( 'tmp\\setup_copy.cmd', 'w' ) f.write( 'copy tmp\\Output\\setup.exe tmp\\Output\\py%d%d-pysvn-svn%s-%s.exe\n' % (py_maj, py_min, svn_version_package_string, pysvn_version_string) ) f.close() pysvn-1.7.8/Kit/Win32-1.5/makefile000644 000771 000771 00000003235 11147775441 016662 0ustar00barrybarry000000 000000 # # makefile - make the windows kit # all_msvc71: kit_msvc all_msvc90: kit_msvc kit_msvc: pysvn-branded.iss info_before.txt copy_setup.cmd copy ..\..\LICENSE.txt tmp\LICENSE.txt copy $(SUBVERSION)\svn-win32-libintl\bin\intl3_svn.dll tmp copy $(SUBVERSION)\db4-win\bin\libdb44.dll tmp copy $(OPENSSL)\out32dll\libeay32.dll tmp copy $(OPENSSL)\out32dll\ssleay32.dll tmp copy $(SUBVERSION)\Release\bin\libapr-1.dll tmp copy $(SUBVERSION)\Release\bin\libaprutil-1.dll tmp copy $(SUBVERSION)\Release\bin\libapriconv-1.dll tmp copy $(SUBVERSION)\Release\bin\libexpat.dll tmp copy $(SUBVERSION)\Release\bin\libgettextlib.dll tmp copy $(SUBVERSION)\Release\bin\libgettextpo.dll tmp copy $(SUBVERSION)\Release\bin\libgettextsrc.dll tmp copy $(SUBVERSION)\Release\bin\libiconv2.dll tmp copy $(SUBVERSION)\Release\bin\libintl3.dll tmp copy $(SUBVERSION)\Release\bin\libsvn_client-1.dll tmp copy $(SUBVERSION)\Release\bin\libsvn_delta-1.dll tmp copy $(SUBVERSION)\Release\bin\libsvn_diff-1.dll tmp copy $(SUBVERSION)\Release\bin\libsvn_fs-1.dll tmp copy $(SUBVERSION)\Release\bin\libsvn_ra-1.dll tmp copy $(SUBVERSION)\Release\bin\libsvn_repos-1.dll tmp copy $(SUBVERSION)\Release\bin\libsvn_subr-1.dll tmp copy $(SUBVERSION)\Release\bin\libsvn_wc-1.dll tmp "c:\Program Files\Inno Setup 5\ISCC.exe" tmp\pysvn-branded.iss tmp\setup_copy.cmd info_before.txt: pysvn-branded.iss copy_setup.cmd: pysvn-branded.iss pysvn-branded.iss: setup_version_handling.py pysvn.iss if not exist tmp mkdir tmp python setup_version_handling.py debug: "c:\Program Files\Inno Setup 5\Compil32.exe" pysvn.iss clean: if exist tmp rmdir /s /q tmp pysvn-1.7.8/Kit/Win32-1.5/msvc71_system_files.iss000644 000771 000771 00000000533 10373217046 021576 0ustar00barrybarry000000 000000 ; ; msvc71_system_files.iss ; ; begin VC system files Source: "c:\Program Files\Microsoft Visual Studio .NET 2003\Visual C++ .NET Standard 2003 - English\msvcp71.dll"; DestDir: "{app}" Source: "c:\Program Files\Microsoft Visual Studio .NET 2003\Visual C++ .NET Standard 2003 - English\msvcr71.dll"; DestDir: "{app}" ; end VC system files pysvn-1.7.8/Kit/Win32-1.5/msvc90_system_files.iss000644 000771 000771 00000001077 11147775441 021613 0ustar00barrybarry000000 000000 ; ; msvc90_system_files.iss ; ; begin VC system files Source: "c:\Program Files\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest"; DestDir: "{app}" Source: "c:\Program Files\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\msvcm90.dll"; DestDir: "{app}" Source: "c:\Program Files\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\msvcp90.dll"; DestDir: "{app}" Source: "c:\Program Files\Microsoft Visual Studio 9.0\vc\redist\x86\Microsoft.VC90.CRT\msvcr90.dll"; DestDir: "{app}" ; end VC system files pysvn-1.7.8/Kit/Win32-1.5/pysvn.iss000644 000771 000771 00000006501 11033717524 017050 0ustar00barrybarry000000 000000 ; ; -- bemacs.iss -- ; [Code] function InitializeSetup(): Boolean; var install_path : string; rcb : Boolean; begin rcb := RegQueryStringValue( HKLM, 'SOFTWARE\Python\PythonCore\%(py_maj)d.%(py_min)d\InstallPath', '', install_path ); if not rcb then begin rcb := RegQueryStringValue( HKCU, 'SOFTWARE\Python\PythonCore\%(py_maj)d.%(py_min)d\InstallPath', '', install_path ); if not rcb then begin MsgBox( 'pysvn requires Python %(py_maj)d.%(py_min)d to be installed.' #13 #13 'Quitting installation', mbError, MB_OK ); end; end; Result := rcb; end; function pythondir(Default: String): String; var install_path : string; rcb : Boolean; begin rcb := RegQueryStringValue( HKLM, 'SOFTWARE\Python\PythonCore\%(py_maj)d.%(py_min)d\InstallPath', '', install_path ); if rcb then begin Result := install_path; end else begin rcb := RegQueryStringValue( HKCU, 'SOFTWARE\Python\PythonCore\%(py_maj)d.%(py_min)d\InstallPath', '', install_path ); if rcb then begin Result := install_path; end else begin Result := 'c:\python%(py_maj)d.%(py_min)d'; end; end; end; [Setup] AppName=Python %(py_maj)d.%(py_min)d PySVN AppVerName=Python %(py_maj)d.%(py_min)d PySVN %(pysvn_version_string)s AppCopyright=Copyright (C) 2003-2008 Barry A. Scott DefaultDirName={code:pythondir}\lib\site-packages\pysvn DefaultGroupName=PySVN for Python %(py_maj)d.%(py_min)d DisableStartupPrompt=yes InfoBeforeFile=info_before.txt Compression=bzip/9 [Files] #include "msvc_system_files.iss" Source: "..\..\..\Source\pysvn\__init__.py"; DestDir: "{app}"; Source: "..\..\..\Source\pysvn\_pysvn_%(py_maj)d_%(py_min)d.pyd"; DestDir: "{app}"; Source: "..\..\..\Docs\pysvn.html"; DestDir: "{app}"; Source: "..\..\..\Docs\pysvn_prog_guide.html"; DestDir: "{app}"; Source: "..\..\..\Docs\pysvn_prog_ref.html"; DestDir: "{app}"; Source: "..\..\..\Docs\pysvn_prog_ref.js"; DestDir: "{app}"; Source: "LICENSE.txt"; DestDir: "{app}"; Source: "..\..\..\Examples\Client\svn_cmd.py"; DestDir: "{app}\Examples\Client"; Source: "..\..\..\Examples\Client\parse_datetime.py"; DestDir: "{app}\Examples\Client"; Source: "intl3_svn.dll"; DestDir: "{app}" Source: "libapr-1.dll"; DestDir: "{app}" Source: "libaprutil-1.dll"; DestDir: "{app}" Source: "libapriconv-1.dll"; DestDir: "{app}" Source: "libexpat.dll"; DestDir: "{app}" Source: "libgettextlib.dll"; DestDir: "{app}" Source: "libgettextpo.dll"; DestDir: "{app}" Source: "libgettextsrc.dll"; DestDir: "{app}" Source: "libiconv2.dll"; DestDir: "{app}" Source: "libintl3.dll"; DestDir: "{app}" Source: "libsvn_client-1.dll"; DestDir: "{app}" Source: "libsvn_delta-1.dll"; DestDir: "{app}" Source: "libsvn_diff-1.dll"; DestDir: "{app}" Source: "libsvn_fs-1.dll"; DestDir: "{app}" Source: "libsvn_ra-1.dll"; DestDir: "{app}" Source: "libsvn_repos-1.dll"; DestDir: "{app}" Source: "libsvn_subr-1.dll"; DestDir: "{app}" Source: "libsvn_wc-1.dll"; DestDir: "{app}" Source: "libdb44.dll"; DestDir: "{app}" Source: "libeay32.dll"; DestDir: "{app}" Source: "ssleay32.dll"; DestDir: "{app}" [Icons] Name: "{group}\PySVN Documentation"; Filename: "{app}\pysvn.html"; Name: "{group}\PySVN License"; Filename: "{app}\pysvn_LICENSE.txt"; Name: "{group}\PySVN Web Site"; Filename: "http://pysvn.tigris.org"; pysvn-1.7.8/Kit/Win32-1.5/setup_version_handling.py000644 000771 000771 00000004217 11654776730 022313 0ustar00barrybarry000000 000000 print( 'Info: setup_version_handling.py' ) import sys sys.path.insert( 0, '..\\..\\Source') import pysvn import time py_maj = sys.version_info[0] py_min = sys.version_info[1] python_version_string = '%d.%d.%d' % (py_maj, py_min, sys.version_info[2]) pysvn_version_string = '%d.%d.%d-%d' % (pysvn.version[0], pysvn.version[1], pysvn.version[2], pysvn.version[3]) svn_version_package_string = '%d%d%d' % (pysvn.svn_version[0], pysvn.svn_version[1], pysvn.svn_version[2]) svn_version_string = '%d.%d.%d' % (pysvn.svn_version[0], pysvn.svn_version[1], pysvn.svn_version[2]) build_time = time.time() build_time_str = time.strftime( '%d-%b-%Y %H:%M', time.localtime( build_time ) ) print( 'Info: Create info_before.txt' ) f = open( 'tmp\\info_before.txt', 'w' ) f.write( '''PySVN %s for Python %s and Subversion %s Barry Scott %s ''' % (pysvn_version_string, python_version_string, svn_version_string, build_time_str) ) f.close() print( 'Info: Creating pysvn-branded.iss from pysvn.iss' ) f = open( 'pysvn.iss', 'r' ) pysvn_iss_text = f.read() f.close() f = open( 'tmp\\pysvn-branded.iss', 'w' ) branding = { 'py_maj': py_maj, 'py_min': py_min, 'pysvn_version_string': pysvn_version_string, } print( 'Info: %r' % (branding,) ) f.write( pysvn_iss_text % branding ) f.close() if py_maj == 3: msvc_system_files_iss = 'msvc90_system_files.iss' elif py_maj == 2 and py_min >= 6: msvc_system_files_iss = 'msvc90_system_files.iss' else: msvc_system_files_iss = 'msvc71_system_files.iss' print( 'Info: Creating %s from pysvn.iss' % msvc_system_files_iss ) f = open( msvc_system_files_iss, 'r' ) pysvn_iss_text = f.read() f.close() f = open( 'tmp\\msvc_system_files.iss', 'w' ) branding = { 'py_maj': py_maj, 'py_min': py_min, 'pysvn_version_string': pysvn_version_string, } print( 'Info: %r' % (branding,) ) f.write( pysvn_iss_text % branding ) f.close() print( 'Info: Create setup_copy.cmd' ) f = open( 'tmp\\setup_copy.cmd', 'w' ) f.write( 'copy tmp\\Output\\setup.exe tmp\\Output\\py%d%d-pysvn-svn%s-%s.exe\n' % (py_maj, py_min, svn_version_package_string, pysvn_version_string) ) f.close() pysvn-1.7.8/Kit/Win32-1.4/makefile000644 000771 000771 00000001632 11033717524 016650 0ustar00barrybarry000000 000000 all_msvc71: kit_msvc71 kit_msvc71: pysvn-branded.iss info_before.txt copy_setup.cmd copy ..\..\LICENSE.txt tmp\LICENSE.txt copy $(SUBVERSION)\svn-win32-libintl\bin\intl3_svn.dll tmp copy $(SUBVERSION)\db4-win\bin\libdb43.dll tmp copy $(OPENSSL)\out32dll\libeay32.dll tmp copy $(OPENSSL)\out32dll\ssleay32.dll tmp copy $(APR)\apr\release\libapr.dll tmp copy $(APR)\apr-util\release\libaprutil.dll tmp copy $(APR)\apr-iconv\release\libapriconv.dll tmp copy tmp\msvc71_system_files.iss tmp\msvc_system_files.iss "c:\Program Files\Inno Setup 5\ISCC.exe" tmp\pysvn-branded.iss tmp\setup_copy.cmd info_before.txt: pysvn-branded.iss copy_setup.cmd: pysvn-branded.iss pysvn-branded.iss: setup_version_handling.py pysvn.iss if not exist tmp mkdir tmp python setup_version_handling.py debug: "c:\Program Files\Inno Setup 5\Compil32.exe" pysvn.iss clean: if exist tmp rmdir /s /q tmp pysvn-1.7.8/Kit/Win32-1.4/msvc71_system_files.iss000644 000771 000771 00000000533 10373217046 021575 0ustar00barrybarry000000 000000 ; ; msvc71_system_files.iss ; ; begin VC system files Source: "c:\Program Files\Microsoft Visual Studio .NET 2003\Visual C++ .NET Standard 2003 - English\msvcp71.dll"; DestDir: "{app}" Source: "c:\Program Files\Microsoft Visual Studio .NET 2003\Visual C++ .NET Standard 2003 - English\msvcr71.dll"; DestDir: "{app}" ; end VC system files pysvn-1.7.8/Kit/Win32-1.4/pysvn.iss000644 000771 000771 00000005270 10557152702 017052 0ustar00barrybarry000000 000000 ; ; -- bemacs.iss -- ; [Code] function InitializeSetup(): Boolean; var install_path : string; rcb : Boolean; begin rcb := RegQueryStringValue( HKLM, 'SOFTWARE\Python\PythonCore\%(py_maj)d.%(py_min)d\InstallPath', '', install_path ); if not rcb then begin rcb := RegQueryStringValue( HKCU, 'SOFTWARE\Python\PythonCore\%(py_maj)d.%(py_min)d\InstallPath', '', install_path ); if not rcb then begin MsgBox( 'pysvn requires Python %(py_maj)d.%(py_min)d to be installed.' #13 #13 'Quitting installation', mbError, MB_OK ); end; end; Result := rcb; end; function pythondir(Default: String): String; var install_path : string; rcb : Boolean; begin rcb := RegQueryStringValue( HKLM, 'SOFTWARE\Python\PythonCore\%(py_maj)d.%(py_min)d\InstallPath', '', install_path ); if rcb then begin Result := install_path; end else begin rcb := RegQueryStringValue( HKCU, 'SOFTWARE\Python\PythonCore\%(py_maj)d.%(py_min)d\InstallPath', '', install_path ); if rcb then begin Result := install_path; end else begin Result := 'c:\python%(py_maj)d.%(py_min)d'; end; end; end; [Setup] AppName=Python %(py_maj)d.%(py_min)d PySVN AppVerName=Python %(py_maj)d.%(py_min)d PySVN %(pysvn_version_string)s AppCopyright=Copyright (C) 2003-2007 Barry A. Scott DefaultDirName={code:pythondir}\lib\site-packages\pysvn DefaultGroupName=PySVN for Python %(py_maj)d.%(py_min)d DisableStartupPrompt=yes InfoBeforeFile=info_before.txt Compression=bzip/9 [Files] #include "msvc_system_files.iss" Source: "..\..\..\Source\pysvn\__init__.py"; DestDir: "{app}"; Source: "..\..\..\Source\pysvn\_pysvn_%(py_maj)d_%(py_min)d.pyd"; DestDir: "{app}"; Source: "..\..\..\Docs\pysvn.html"; DestDir: "{app}"; Source: "..\..\..\Docs\pysvn_prog_guide.html"; DestDir: "{app}"; Source: "..\..\..\Docs\pysvn_prog_ref.html"; DestDir: "{app}"; Source: "..\..\..\Docs\pysvn_prog_ref.js"; DestDir: "{app}"; Source: "LICENSE.txt"; DestDir: "{app}"; Source: "..\..\..\Examples\Client\svn_cmd.py"; DestDir: "{app}\Examples\Client"; Source: "..\..\..\Examples\Client\parse_datetime.py"; DestDir: "{app}\Examples\Client"; Source: "intl3_svn.dll"; DestDir: "{app}" Source: "libapr.dll"; DestDir: "{app}" Source: "libaprutil.dll"; DestDir: "{app}" Source: "libapriconv.dll"; DestDir: "{app}" Source: "libdb43.dll"; DestDir: "{app}" Source: "libeay32.dll"; DestDir: "{app}" Source: "ssleay32.dll"; DestDir: "{app}" [Icons] Name: "{group}\PySVN Documentation"; Filename: "{app}\pysvn.html"; Name: "{group}\PySVN License"; Filename: "{app}\pysvn_LICENSE.txt"; Name: "{group}\PySVN Web Site"; Filename: "http://pysvn.tigris.org"; pysvn-1.7.8/Kit/Win32-1.4/setup_version_handling.py000644 000771 000771 00000003704 11654776730 022312 0ustar00barrybarry000000 000000 print 'Info: setup_version_handling.py' import sys sys.path.insert( 0, '..\\..\\Source') import pysvn import time python_version_string = '%d.%d.%d' % (sys.version_info[0], sys.version_info[1], sys.version_info[2]) pysvn_version_string = '%d.%d.%d-%d' % (pysvn.version[0], pysvn.version[1], pysvn.version[2], pysvn.version[3]) svn_version_package_string = '%d%d%d' % (pysvn.svn_version[0], pysvn.svn_version[1], pysvn.svn_version[2]) svn_version_string = '%d.%d.%d' % (pysvn.svn_version[0], pysvn.svn_version[1], pysvn.svn_version[2]) build_time = time.time() build_time_str = time.strftime( '%d-%b-%Y %H:%M', time.localtime( build_time ) ) print 'Info: Create info_before.txt' f = file('tmp\\info_before.txt','w') f.write( '''PySVN %s for Python %s and Subversion %s Barry Scott %s ''' % (pysvn_version_string, python_version_string, svn_version_string, build_time_str) ) f.close() print 'Info: Creating pysvn-branded.iss from pysvn.iss' f = file( 'pysvn.iss', 'r' ) pysvn_iss_text = f.read() f.close() f = file( 'tmp\\pysvn-branded.iss', 'w' ) branding = { 'py_maj': sys.version_info[0], 'py_min': sys.version_info[1], 'pysvn_version_string': pysvn_version_string, } print 'Info:',repr(branding) f.write( pysvn_iss_text % branding ) f.close() print 'Info: Creating msvc71_system_files.iss from pysvn.iss' f = file( 'msvc71_system_files.iss', 'r' ) pysvn_iss_text = f.read() f.close() f = file( 'tmp\\msvc71_system_files.iss', 'w' ) branding = { 'py_maj': sys.version_info[0], 'py_min': sys.version_info[1], 'pysvn_version_string': pysvn_version_string, } print 'Info:',repr(branding) f.write( pysvn_iss_text % branding ) f.close() print 'Info: Create setup_copy.cmd' f = file( 'tmp\\setup_copy.cmd', 'w' ) f.write( 'copy tmp\\Output\\setup.exe tmp\\Output\\py%d%d-pysvn-svn%s-%s.exe\n' % (sys.version_info[0], sys.version_info[1], svn_version_package_string, pysvn_version_string) ) f.close() pysvn-1.7.8/Kit/MacOSX/make_pkg.py000644 000771 000771 00000025762 12052500352 017171 0ustar00barrybarry000000 000000 # # make_pkg.py # import os print( 'Info: setup vesion info' ) import sys sys.path.insert( 0, '../../Source') import pysvn import time package_maker = '/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker' package_maker_kit = os.path.exists( package_maker ) os.system( 'lipo -info %s >lipo-info.tmp' % (sys.executable,) ) lipo_info = open( 'lipo-info.tmp' ).read() os.remove( 'lipo-info.tmp' ) is_x86_64 = 'x86_64' in lipo_info is_i386 = 'i386' in lipo_info if is_x86_64 and is_i386: processor = 'intel' elif is_x86_64: processor = 'x86_64' elif is_i386: processor = 'i386' else: assert False, 'Unknown processor type' python_vendor = os.environ.get( 'BUILDER_VENDOR', 'unknown' ) if processor == 'i386': if hasattr( sys, 'maxsize' ): maxsize = sys.maxsize else: maxsize = sys.maxint if maxsize == (2**31-1): processor = 'i386' else: processor = 'x86_64' pymaj, pymin, pypat, _, _ = sys.version_info python_version_string = '%d.%d.%d' % (pymaj, pymin, pypat) pysvnmaj, pysvnmin, pysvnpat, _ = pysvn.version pysvn_version_string = '%d.%d.%d-%d' % (pysvn.version[0], pysvn.version[1], pysvn.version[2], pysvn.version[3]) pysvn_short_version_string = '%d.%d.%d' % (pysvn.version[0], pysvn.version[1], pysvn.version[2]) svn_version_package_string = '%d%d%d' % (pysvn.svn_version[0], pysvn.svn_version[1], pysvn.svn_version[2]) svn_version_string = '%d.%d.%d' % (pysvn.svn_version[0], pysvn.svn_version[1], pysvn.svn_version[2]) pysvn_so_string = '_pysvn_%d_%d.so' % (pymaj, pymin) pkg_filename = 'py%s%s_%s_pysvn_svn%s-%s-%s' % (pymaj, pymin, python_vendor, svn_version_package_string, pysvn_version_string, processor) print( 'Info: Packageing %s' % pkg_filename ) build_time = time.time() build_time_str = time.strftime( '%d-%b-%Y %H:%M', time.localtime( build_time ) ) year = time.strftime( '%Y', time.localtime( build_time ) ) tmpdir = os.path.join( os.getcwd(), 'tmp' ) if pymaj == 2 and pymin == 4: install_dir = '/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages' elif pymaj == 2 and pymin == 5: install_dir = '/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages' elif pymaj == 2 and pymin == 6: if python_vendor == 'apple_com': install_dir = '/Library/Python/2.6/site-packages' else: install_dir = '/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages' elif pymaj == 2 and pymin == 7: if python_vendor == 'apple_com': install_dir = '/Library/Python/2.7/site-packages' else: install_dir = '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages' elif pymaj == 3 and pymin == 1: install_dir = '/Library/Frameworks/Python.framework/Versions/3.1/lib/python3.1/site-packages' elif pymaj == 3 and pymin == 2: install_dir = '/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages' elif pymaj == 3 and pymin == 3: install_dir = '/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages' else: raise RuntimeError( 'Unsupported version of python' ) if os.path.exists( tmpdir ): print( 'Info: Clean up tmp directory' ) os.system( 'rm -rf tmp' ) print( 'Info: Create directories' ) for kit_dir in [ tmpdir, os.path.join( tmpdir, 'Resources' ), os.path.join( tmpdir, 'Contents' ), os.path.join( tmpdir, 'Contents/pysvn' ), os.path.join( tmpdir, pkg_filename), os.path.join( tmpdir, '%s/Examples' % pkg_filename ), os.path.join( tmpdir, '%s/Examples/Client' % pkg_filename ), os.path.join( tmpdir, '%s/Documentation' % pkg_filename), ]: if not os.path.exists( kit_dir ): os.makedirs( kit_dir ) print( 'Info: Finding dylibs used by pysvn' ) def findDylibs( image, dylib_list, depth=0 ): cmd = 'otool -L "%s" >/tmp/pysvn_otool.tmp' % image #print( 'Debug: cmd %r' % cmd ) os.system( cmd ) # always skip the first line that lists the image being dumped for line in open( '/tmp/pysvn_otool.tmp' ).readlines()[1:]: line = line.strip() libpath = line.split()[0] #print( 'Debug: line %r' % line ) if( libpath.startswith( '/' ) # lines with libs on them and not libpath.startswith( '/usr/lib' ) # ignore libs shipped by Apple and not libpath.startswith( '/System' ) # ignore libs shipped by Apple and not libpath.endswith( '/Python' ) ): # do not need to ignore python if libpath not in dylib_list: #print( 'Info: ',depth,' Need lib',libpath,'for',image ) dylib_list.append( libpath ) findDylibs( libpath, dylib_list, depth+1 ) dylib_list = [] findDylibs( '../../Source/pysvn/%s' % pysvn_so_string, dylib_list ) print( 'Info: Copy files' ) cp_list = [ ('../../Source/pysvn/__init__.py', 'Contents/pysvn'), ('../../Source/pysvn/%s' % pysvn_so_string, 'Contents/pysvn'), ('../../LICENSE.txt', 'Resources/License.txt'), ('../../LICENSE.txt', '%s/License.txt' % pkg_filename ), ('../../Docs/pysvn.html', '%s/Documentation' % pkg_filename ), ('../../Docs/pysvn_prog_ref.html', '%s/Documentation' % pkg_filename ), ('../../Docs/pysvn_prog_ref.js', '%s/Documentation' % pkg_filename ), ('../../Docs/pysvn_prog_guide.html', '%s/Documentation' % pkg_filename ), ('../../Examples/Client/svn_cmd.py', '%s/Examples/Client' % pkg_filename ), ('../../Examples/Client/parse_datetime.py', '%s/Examples/Client' % pkg_filename ), ] for libpath in dylib_list: cp_list.append( (libpath, 'Contents/pysvn') ) for cp_src, cp_dst_dir_fmt in cp_list: cmd = 'cp -f "%s" "tmp/%s"' % (cp_src, cp_dst_dir_fmt % locals()) print( 'Info: %r' % cmd ) os.system( cmd ) print( 'Info: Fix the install paths for the dylib files' ) fixup_path_list = ['tmp/Contents/pysvn/%s' % pysvn_so_string] for libpath in dylib_list: fixup_path_list.append( 'tmp/Contents/pysvn/' + os.path.basename( libpath ) ) for fixup_path in fixup_path_list: for libpath in dylib_list: if libpath != fixup_path: cmd = ( 'install_name_tool' ' -change' ' %s' ' %s/pysvn/%s' ' %s' % (libpath, install_dir, os.path.basename( libpath ), fixup_path) ) #print( 'Debug: cmd %r' % cmd ) os.system( cmd ) if python_vendor == 'apple_com': readme_vendor_name = "Apple's" elif python_vendor == 'python_org': readme_vendor_name = "Python.org's" else: readme_vendor_name = python_vendor print( 'Info: Create tmp/Resources/ReadMe.txt' ) if package_maker_kit: f = open( 'tmp/Resources/ReadMe.txt', 'w' ) else: f = open( 'tmp/%s/ReadMe.txt' % (pkg_filename,), 'w' ) f.write('''

PySVN %(pysvn_version_string)s for Mac OS X, %(readme_vendor_name)s Python %(pymaj)s.%(pymin)s and Subversion %(svn_version_string)s

Copyright Barry A. Scott (c) 2003-%(year)s

Mail barry@barrys-emacs.org

Pysvn home http://pysvn.tigris.org

     Barry Scott

''' % locals() ) f.close() if package_maker_kit: print( 'Info: Create tmp/Info.plist' ) f = open( 'tmp/Info.plist', 'w' ) f.write(''' CFBundleGetInfoString pysvn Extension %(pysvn_version_string)s for Python %(pymaj)s.%(pymin)s CFBundleIdentifier org.tigris.pysvn.extension.py%(pymaj)s.%(pymin)s.%(python_vendor)s CFBundleName pysvn Extension CFBundleShortVersionString %(pysvn_short_version_string)s IFMajorVersion %(pysvnmaj)s IFMinorVersion %(pysvnmin)s IFPkgFlagAllowBackRev IFPkgFlagAuthorizationAction AdminAuthorization IFPkgFlagDefaultLocation %(install_dir)s IFPkgFlagInstallFat IFPkgFlagIsRequired IFPkgFlagRelocatable IFPkgFlagRestartAction NoRestart IFPkgFlagRootVolumeOnly IFPkgFlagUpdateInstalledLanguages IFPkgFormatVersion 0.10000000149011612 ''' % locals() ) f.close() print( 'Info: Create tmp/Description.plist' ) f = open( 'tmp/Description.plist', 'w' ) f.write(''' IFPkgDescriptionDescription PySVN Extension IFPkgDescriptionTitle PySVN Extension ''' ) f.close() print( 'Info: PackageMaker' ) cmd = [ package_maker, '-build', '-p %s' % os.path.abspath( 'tmp/%s/%s.pkg' % (pkg_filename, pkg_filename) ), '-f %s' % os.path.abspath( 'tmp/Contents' ), '-r %s' % os.path.abspath( 'tmp/Resources' ), '-i %s' % os.path.abspath( 'tmp/Info.plist' ), '-d %s' % os.path.abspath( 'tmp/Description.plist' ), ] os.system( ' '.join( cmd ) ) print( 'Info: Make Disk Image' ) os.system( 'hdiutil create -srcfolder tmp/%s tmp/tmp.dmg' % pkg_filename ) os.system( 'hdiutil convert tmp/tmp.dmg -format UDZO -imagekey zlib-level=9 ' '-o tmp/%s.dmg' % pkg_filename ) else: print( 'Info: Create installation script' ) f = open( 'tmp/%s/Install PySVN' % (pkg_filename,), 'w' ) f.write( '''#!/bin/bash if [ "$( id -u )" != "0" ] then clear echo "To install PYSVN required root (administrator) privileges." echo "Enter your password to proceed." exec sudo "$0" fi kit_dir=$( dirname "$0" ) echo "Installing pysvn Extension %(pysvn_version_string)s for Python %(pymaj)s.%(pymin)s" tar xzf "${kit_dir}/%(pkg_filename)s.tar.gz" -C "%(install_dir)s" echo "Installation complete. Press RETURN to exit." read A ''' % locals() ) f.close() os.system( 'chmod +x "tmp/%s/Install PYSVN"' % (pkg_filename,) ) cmd = [ 'tar', 'czf', 'tmp/%s/%s.tar.gz' % (pkg_filename, pkg_filename), '-C' 'tmp/Contents', 'pysvn'] os.system( ' '.join( cmd ) ) print( 'Info: Make Disk Image' ) os.system( 'hdiutil create -srcfolder tmp/%s tmp/tmp.dmg' % pkg_filename ) os.system( 'hdiutil convert tmp/tmp.dmg -format UDZO -imagekey zlib-level=9 ' '-o tmp/%s.dmg' % pkg_filename ) pysvn-1.7.8/Kit/Linux/make_rpm.py000644 000771 000771 00000011522 11132131027 017175 0ustar00barrybarry000000 000000 # # make_rpm.py # import os print 'Info: setup_version_handling.py' import sys sys.path.insert( 0, '../../Source') import pysvn import time pymaj, pymin, pypat, _, _ = sys.version_info python_version_string = '%d.%d.%d' % (pymaj, pymin, pypat) pysvnmaj, pysvnmin, pysvnpat, _ = pysvn.version pysvn_version_string = '%d.%d.%d-%d' % (pysvn.version[0], pysvn.version[1], pysvn.version[2], pysvn.version[3]) pysvn_version_package_release_string = '%d' % pysvn.version[3] pysvn_version_package_string = '%d.%d.%d' % (pysvn.version[0], pysvn.version[1], pysvn.version[2]) svn_version_string = '%d.%d.%d' % (pysvn.svn_version[0], pysvn.svn_version[1], pysvn.svn_version[2]) svn_compact_version_string = '%d%d%d' % (pysvn.svn_version[0], pysvn.svn_version[1], pysvn.svn_version[2]) build_time = time.time() build_time_str = time.strftime( '%d-%b-%Y %H:%M', time.localtime( build_time ) ) tmpdir = os.path.join( os.getcwd(), 'tmp' ) if os.path.exists( tmpdir ): print 'Info: Clean up tmp directory' os.system( 'rm -rf tmp' ) print 'Info: Create directories' for kit_dir in [ tmpdir, os.path.join( tmpdir, 'ROOT' ), os.path.join( tmpdir, 'BUILD' ), os.path.join( tmpdir, 'SPECS' ), os.path.join( tmpdir, 'RPMS' ), os.path.join( tmpdir, 'ROOT/usr' ), os.path.join( tmpdir, 'ROOT/usr/lib' ), os.path.join( tmpdir, 'ROOT/usr/lib/python%(pymaj)d.%(pymin)d' % locals() ), os.path.join( tmpdir, 'ROOT/usr/lib/python%(pymaj)d.%(pymin)d/site-packages' % locals() ), os.path.join( tmpdir, 'ROOT/usr/lib/python%(pymaj)d.%(pymin)d/site-packages/pysvn' % locals() ), os.path.join( tmpdir, 'ROOT/usr/share' ), os.path.join( tmpdir, 'ROOT/usr/share/doc' ), os.path.join( tmpdir, 'ROOT/usr/share/doc/pysvn' ), os.path.join( tmpdir, 'ROOT/usr/share/doc/pysvn/Examples' ), os.path.join( tmpdir, 'ROOT/usr/share/doc/pysvn/Examples/Client' ), ]: if not os.path.exists( kit_dir ): os.makedirs( kit_dir ) print 'Info: Copy files' kit_files_info = [ ('../../Source/pysvn/__init__.py', 'ROOT/usr/lib/python%(pymaj)d.%(pymin)d/site-packages/pysvn', '444'), ('../../Source/pysvn/_pysvn_%(pymaj)d_%(pymin)d.so' % locals(), 'ROOT/usr/lib/python%(pymaj)d.%(pymin)d/site-packages/pysvn', '444'), ('../../LICENSE.txt', 'ROOT/usr/share/doc/pysvn', '444'), ('../../Docs/pysvn.html', 'ROOT/usr/share/doc/pysvn', '444'), ('../../Docs/pysvn_prog_ref.html', 'ROOT/usr/share/doc/pysvn', '444'), ('../../Docs/pysvn_prog_ref.js', 'ROOT/usr/share/doc/pysvn', '444'), ('../../Docs/pysvn_prog_guide.html', 'ROOT/usr/share/doc/pysvn', '444'), ('../../Examples/Client/svn_cmd.py', 'ROOT/usr/share/doc/pysvn/Examples/Client', '555'), ('../../Examples/Client/parse_datetime.py', 'ROOT/usr/share/doc/pysvn/Examples/Client', '444'), ] for cp_src, cp_dst_dir_fmt, perm in kit_files_info: print 'Info: cp %s' % cp_src os.system( 'cp -f %s tmp/%s' % (cp_src, cp_dst_dir_fmt % locals()) ) print 'Info: Create tmp/SPECS/pysvn.spec' f = file('tmp/SPECS/pysvn.spec','w') f.write('''BuildRoot: %(tmpdir)s/ROOT Name: py%(pymaj)d%(pymin)d_pysvn_svn%(svn_compact_version_string)s Version: %(pysvn_version_package_string)s Group: Development/Libraries Release: %(pysvn_version_package_release_string)s Summary: pysvn %(pysvn_version_package_string)s Python extension for Subversion %(svn_version_string)s License: Apache Software License, Version 1.1 - Copyright Barry A. Scott (c) 2003-2009 Packager: Barry A. Scott %%description PySVN %(pysvn_version_string)s for Python %(python_version_string)s and Subversion %(svn_version_string)s Copyright Barry A. Scott (c) 2003-2009 mailto:barry@barrys-emacs.org http://pysvn.tigris.org Barry Scott %%prep %%build %%install %%post /usr/bin/python%(pymaj)d.%(pymin)d -c "import pysvn" /usr/bin/python%(pymaj)d.%(pymin)d -O -c "import pysvn" %%postun rm -f /usr/lib/python%(pymaj)d.%(pymin)d/site-packages/pysvn/__init__.pyc rm -f /usr/lib/python%(pymaj)d.%(pymin)d/site-packages/pysvn/__init__.pyo %%files %%defattr (-,root,root) ''' % locals() ) kit_filename = os.path.join( cp_dst_dir_fmt[len('ROOT'):] % locals(), os.path.basename( cp_src ) ) for cp_src, cp_dst_dir_fmt, perm in kit_files_info: kit_filename = os.path.join( cp_dst_dir_fmt[len('ROOT'):] % locals(), os.path.basename( cp_src ) ) f.write( '%%attr(%s,root,root) %s\n' % (perm, kit_filename) ) f.close() print 'Info: Create rpmrc' os.system('grep ^macrofiles: /usr/lib/rpm/rpmrc |sed -e s!~/.rpmmacros!%(tmpdir)s/rpmmacros! >%(tmpdir)s/rpmrc' % locals() ) print 'Info: Create rpmmacros' f = file( 'tmp/rpmmacros', 'w' ) f.write( '%%_topdir %(tmpdir)s' % locals() ) f.close() print 'Info: rpmbuild' os.system( 'rpmbuild --rcfile=/usr/lib/rpm/rpmrc:%(tmpdir)s/rpmrc -bb %(tmpdir)s/SPECS/pysvn.spec' % locals() ) pysvn-1.7.8/Import/pycxx-6.2.4/000755 000771 000771 00000000000 11724122670 016306 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/build-all.cmd000644 000771 000771 00000000337 11704270053 020640 0ustar00barrybarry000000 000000 setlocal call setup-msvc90 c:\python27.win32\python setup_makefile.py win32 win32.mak nmake -f win32.mak clean all c:\python32.win32\python setup_makefile.py win32 win32.mak nmake -f win32.mak clean all endlocal pysvn-1.7.8/Import/pycxx-6.2.4/build-all.sh000755 000771 000771 00000000620 11704271056 020511 0ustar00barrybarry000000 000000 #!/bin/bash set -e OS=${1:-macosx} for PYTHON in \ python2.4 \ python2.5 \ python2.6 \ python2.7 \ python3.1 \ python3.2 \ ; do if which $PYTHON >/dev/null then ${PYTHON} setup_makefile.py ${OS} tmp-$PYTHON.mak make -f tmp-$PYTHON.mak clean 2>&1 | tee tmp-$PYTHON.log make -f tmp-$PYTHON.mak test 2>&1 | tee -a tmp-$PYTHON.log fi done pysvn-1.7.8/Import/pycxx-6.2.4/COPYRIGHT000644 000771 000771 00000006226 10547732521 017613 0ustar00barrybarry000000 000000 Copyright (c) 1998 - 2007 The Regents of the University of California Produced at the Lawrence Livermore National Laboratory Written by Geoff Furnish, Paul F. Dubois, Barry A. Scott UCRL-CODE-227018 All rights reserved. This file is part of PyCXX. For details, see http://cxx.sourceforge.net. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the disclaimer below. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the disclaimer (as noted below) in the documentation and/or materials provided with the distribution. - Neither the name of the UC/LLNL nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Additional BSD Notice 1. This notice is required to be provided under our contract with the U.S. Department of Energy (DOE). This work was produced at the University of California, Lawrence Livermore National Laboratory under Contract No. W-7405-ENG-48 with the DOE. 2. Neither the United States Government nor the University of California nor any of their employees, makes any warranty, express or implied, or assumes any liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately-owned rights. 3. Also, reference herein to any specific commercial products, process, or services by trade name, trademark, manufacturer or otherwise does not necessarily constitute or imply its endorsement, recommendation, or favoring by the United States Government or the University of California. The views and opinions of authors expressed herein do not necessarily state or reflect those of the United States Government or the University of California, and shall not be used for advertising or product endorsement purposes. pysvn-1.7.8/Import/pycxx-6.2.4/CXX/000755 000771 000771 00000000000 11724122670 016750 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/Demo/000755 000771 000771 00000000000 11724122666 017177 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/Doc/000755 000771 000771 00000000000 11724122670 017013 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/how_to_release_pycxx.txt000644 000771 000771 00000001702 11505666222 023304 0ustar00barrybarry000000 000000 How to release PyCXX -------------------- 0. Update CXX/Version.hxx with the releases version number Update README.html, PyCXX-Release-Notes.txt and SourceForge/index.html with change log info 1. Tag the source using tag_pycxx.py (depends on pysvn). 2. Create the source kit using make_src_kit.py 3. Add new File release on sourceforge. 1. http://sourceforge.net/projects/cxx/ 3. Select File 4. Create New Folder 5. Name the Folder PyCXX V.. e.g. PyCXX V6.1.1 7. Upload the source kit and its PyCXX-Release-Notes-readme.txt 9. Click on the source kit (i) icon and choose Select All platforms 4. Add news about release 1. Click Develop 2. From Develop Menu choose News 3. Add news with release note info - may be need to make it a bigger advert? 4. Click Submit to slashdot and Submit 5. Email CXX mailing lists 6. Update docs on the PyCXX homepage 1. cd SourceForge 2. ./deploy.sh pysvn-1.7.8/Import/pycxx-6.2.4/Lib/000755 000771 000771 00000000000 11724122670 017014 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/make_src_kit.py000644 000771 000771 00000002150 11132160151 021276 0ustar00barrybarry000000 000000 import sys import os import shutil def main( argv ): f = open( 'CXX/Version.hxx' ) major = None minor = None patch = None for line in f: words = line.split() if words[0:2] == ['#define', 'PYCXX_VERSION_MAJOR']: major = words[2] if words[0:2] == ['#define', 'PYCXX_VERSION_MINOR']: minor = words[2] if words[0:2] == ['#define', 'PYCXX_VERSION_PATCH']: patch = words[2] print( 'version: %s, %s, %s' % (major, minor, patch) ) tmp_dir = os.environ.get('TMP','/tmp') kit_name = 'pycxx-%s.%s.%s' % (major, minor, patch) kit_dir = os.path.join( tmp_dir, kit_name ) if os.path.exists( kit_dir ): print( 'Info: Removing tree at %s' % kit_dir ) shutil.rmtree( kit_dir ) os.mkdir( kit_dir ) print( 'Info: svn export %s' % kit_dir ) os.system( 'svn export --force . %s' % kit_dir ) print( 'Info: Creating %s.tar.gz' % kit_dir ) os.chdir( tmp_dir ) os.system( 'tar czf %s.tar.gz %s' % (kit_dir, kit_name) ) return 0 if __name__ == '__main__': sys.exit( main( sys.argv ) ) pysvn-1.7.8/Import/pycxx-6.2.4/obj/000755 000771 000771 00000000000 11724122670 017060 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/README.html000644 000771 000771 00000007111 11523514532 020130 0ustar00barrybarry000000 000000 PyCXX README

PyCXX -- README

Installation using distutils

Windows Installation and Demo

  1. Fetch http://prdownloads.sourceforge.net/cxx/pycxx-6.2.3.tar.gz
  2. Expand the archive into a directory of your choosing C:\ for example. Note: WinZip can expand .tar.gz files.
  3. Install the PyCXX files:
    1. C:> cd \pycxx-6.2.3
    2. C:\pycxx-6.2.3> python setup.py install
  4. Build and run the demo extensions:
    1. C:> cd \pycxx-6.2.3
    2. C:\pycxx-6.2.3> python setup_makefile.py win32 win32.mak 
    3. C:\pycxx-6.2.3> nmake -f win32.mak clean test

Unix Installation and Demo

Note: distutils is not available for Python 1.5.2

  1. Fetch http://prdownloads.sourceforge.net/cxx/pycxx-6.2.3.tar.gz
  2. Login as root. root access is typically needed on Unix systems to install the PyCXX files into the Python directories.
  3. Expand the archive into a directory of your choosing ~\ for example.
  4. Install the PyCXX files:
    1. # cd ~\pycxx-6.2.3
    2. # python setup.py install
  5. Build and run the demo extensions:
    1. # cd ~\pycxx-6.2.3\Demo\Python2
    2. # python setup_makefile.py linux linux.mak
    3. # make -f linux.mak clean test

Revision History

Version 6.2.3 (6-Feb-2011)

Fix memory leak in string encode and decode functions

Fix indirect python loading on windows - Bool_type was missing

Version 6.2.2 (26-Dec-2010)

Fix problem compiling against Python 3.1.3

Version 6.2.1 (3-May-2010)

Fix problems with new style classes

Replace all example makefile and project files with setup_makefile.py script.

Add APIs to make calling python functions easier. See TupleN(), callOnSelf(), self()

Version 6.1.1 (26-Sep-2009)

Supports Python 3 starting at Python 3.1 and Python 2

Code clean up to fix compiler warnings reported by gcc 4.2.1 on Mac OS X when building for Python 3.

Version 6.1.0 (19-Jul-2009)

Support Python 3 and Python 2

pysvn-1.7.8/Import/pycxx-6.2.4/RegressionTests/000755 000771 000771 00000000000 11724122670 021451 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/run_tests.cmd000644 000771 000771 00000000473 11146621572 021030 0ustar00barrybarry000000 000000 setlocal set PY_MAJ=2 if not "%1" == "" set PY_MAJ=%1 set PY_MIN=5 if not "%2" == "" set PY_MIN=%2 set PYTHONPATH=pyds%PY_MAJ%%PY_MIN% c:\python%PY_MAJ%%PY_MIN%\python Demo\test_example.py if exist pyds%PY_MAJ%%PY_MIN%\pycxx_iter.pyd c:\python%PY_MAJ%%PY_MIN%\python Demo\test_pycxx_iter.py endlocal pysvn-1.7.8/Import/pycxx-6.2.4/setup.py000755 000771 000771 00000002135 11367347043 020032 0ustar00barrybarry000000 000000 import os, sys from glob import glob from distutils.command.install import install from distutils.core import setup headers = (glob( os.path.join( "CXX","*.hxx" ) ) +glob( os.path.join( "CXX","*.h" ) )) sources = (glob( os.path.join( "Src", "*.cxx" ) ) +glob( os.path.join( "Src", "*.c" ) )) class my_install (install): def finalize_options (self): if not self.install_data or (len(self.install_data) < 8) : self.install_data = "$base/share/python$py_version_short" install.finalize_options (self) def run (self): self.distribution.data_files = [("CXX", sources)] self.distribution.headers = headers install.run (self) setup (name = "CXX", version = "6.2.0", maintainer = "Barry Scott", maintainer_email = "barry-scott@users.sourceforge.net", description = "Facility for extending Python with C++", url = "http://cxx.sourceforge.net", cmdclass = {'install': my_install}, packages = ['CXX'], package_dir = {'CXX': 'Lib'} ) pysvn-1.7.8/Import/pycxx-6.2.4/setup_makefile.py000644 000771 000771 00000047260 11655276224 021676 0ustar00barrybarry000000 000000 # # Copyright (c) 2010-2011 Barry A. Scott # import os import sys import distutils import distutils.sysconfig import distutils.util _debug = False def debug( msg ): if _debug: sys.stderr.write( 'Debug: %s\n' % (msg,) ) #-------------------------------------------------------------------------------- class Setup: def __init__( self, argv ): args = argv[1:] if len(args) < 2: raise ValueError( 'Usage: setup.py win32|macosx|linux> ' ) self.opt_debug = False self.platform = args[0] del args[0] self.__makefile = open( args[0], 'wt' ) del args[0] while len(args) > 0: if args[0] == '--debug': self.opt_debug = True del args[0] else: raise ValueError( 'Unknown arg %r' % (args[0],) ) self.setupCompile() def makePrint( self, line ): self.__makefile.write( line ) self.__makefile.write( '\n' ) def setupCompile( self ): if self.platform == 'win32': self.c_utils = Win32CompilerMSVC90( self ) self.c_python_extension = Win32CompilerMSVC90( self ) elif self.platform == 'macosx': self.c_utils = MacOsxCompilerGCC( self ) self.c_python_extension = MacOsxCompilerGCC( self ) elif self.platform == 'linux': self.c_utils = LinuxCompilerGCC( self ) self.c_python_extension = LinuxCompilerGCC( self ) else: raise ValueError( 'Unknown platform %r' % (self.platform,) ) self.c_python_extension.setupPythonExtension() self.pycxx_obj_file = [ Source( self.c_python_extension, 'Src/cxxsupport.cxx' ), Source( self.c_python_extension, 'Src/cxx_extensions.cxx' ), Source( self.c_python_extension, 'Src/cxxextensions.c' ), Source( self.c_python_extension, 'Src/IndirectPythonInterface.cxx' ), ] self.simple_obj_files = [ Source( self.c_python_extension, '%(DEMO_DIR)s/simple.cxx' ), ] + self.pycxx_obj_file self.example_obj_files = [ Source( self.c_python_extension, '%(DEMO_DIR)s/example.cxx' ), Source( self.c_python_extension, '%(DEMO_DIR)s/range.cxx' ), Source( self.c_python_extension, '%(DEMO_DIR)s/rangetest.cxx' ), ] + self.pycxx_obj_file self.pycxx_iter_obj_files = [ Source( self.c_python_extension, '%(DEMO_DIR)s/pycxx_iter.cxx' ), ] + self.pycxx_obj_file exe_simple = PythonExtension( self.c_python_extension, 'simple', self.simple_obj_files ) exe_example = PythonExtension( self.c_python_extension, 'example', self.example_obj_files ) exe_pycxx_iter = PythonExtension( self.c_python_extension, 'pycxx_iter', self.pycxx_iter_obj_files ) self.all_exe = [ exe_simple, exe_example, exe_pycxx_iter, ] self.all_test = [ TestPythonExtension( self.c_python_extension, '%(DEMO_DIR)s/test_simple.py', exe_simple ), TestPythonExtension( self.c_python_extension, '%(DEMO_DIR)s/test_example.py', exe_example ), TestPythonExtension( self.c_python_extension, '%(DEMO_DIR)s/test_pycxx_iter.py', exe_pycxx_iter ), ] def generateMakefile( self ): try: self.c_python_extension.generateMakefileHeader() self.makePrint( 'all: %s' % (' '.join( [exe.getTargetFilename() for exe in self.all_exe] )) ) self.makePrint( '' ) for exe in self.all_exe: exe.generateMakefile() for test in self.all_test: test.generateMakefile() self.__makefile.close() return 0 except ValueError: e = sys.exc_info()[1] sys.stderr.write( 'Error: %s\n' % (e,) ) return 1 #-------------------------------------------------------------------------------- class Compiler: def __init__( self, setup ): debug( 'Compiler.__init__()' ) self.setup = setup self.__variables = {} self._addVar( 'DEBUG', 'NDEBUG') def platformFilename( self, filename ): return filename def makePrint( self, line ): self.setup.makePrint( line ) def generateMakefileHeader( self ): raise NotImplementedError( 'generateMakefileHeader' ) def _addFromEnv( self, name ): debug( 'Compiler._addFromEnv( %r )' % (name,) ) self._addVar( name, os.environ[ name ] ) def _addVar( self, name, value ): debug( 'Compiler._addVar( %r, %r )' % (name, value) ) try: if '%' in value: value = value % self.__variables self.__variables[ name ] = value except TypeError: raise ValueError( 'Cannot translate name %r value %r' % (name, value) ) except KeyError: e = sys.exc_info()[1] raise ValueError( 'Cannot translate name %r value %r - %s' % (name, value, e) ) def expand( self, s ): try: return s % self.__variables except (TypeError, KeyError): e = sys.exc_info()[1] print( 'Error: %s' % (e,) ) print( 'String: %s' % (s,) ) print( 'Vairables: %r' % (self.__variables,) ) raise ValueError( 'Cannot translate string (%s)' % (e,) ) class Win32CompilerMSVC90(Compiler): def __init__( self, setup ): Compiler.__init__( self, setup ) self._addVar( 'PYTHONDIR', sys.exec_prefix ) self._addVar( 'PYTHON_LIBNAME', 'python%d%d' % (sys.version_info[0], sys.version_info[1]) ) self._addVar( 'PYTHON_INCLUDE', r'%(PYTHONDIR)s\include' ) self._addVar( 'PYTHON_LIB', r'%(PYTHONDIR)s\libs' ) self._addVar( 'PYTHON', sys.executable ) def platformFilename( self, filename ): return filename.replace( '/', '\\' ) def getPythonExtensionFileExt( self ): return '.pyd' def getProgramExt( self ): return '.exe' def generateMakefileHeader( self ): self.makePrint( '#' ) self.makePrint( '# Bemacs Makefile generated by setup.py' ) self.makePrint( '#' ) self.makePrint( 'CCC=cl /nologo' ) self.makePrint( 'CC=cl /nologo' ) self.makePrint( '' ) self.makePrint( 'LDSHARED=$(CCC) /LD /Zi /MT /EHsc' ) self.makePrint( 'LDEXE=$(CCC) /Zi /MT /EHsc' ) self.makePrint( '' ) def ruleLinkProgram( self, target ): pyd_filename = target.getTargetFilename() pdf_filename = target.getTargetFilename( '.pdf' ) all_objects = [source.getTargetFilename() for source in target.all_sources] rules = [''] rules.append( '' ) rules.append( '%s : %s' % (pyd_filename, ' '.join( all_objects )) ) rules.append( '\t@echo Link %s' % (pyd_filename,) ) rules.append( '\t$(LDEXE) %%(CCCFLAGS)s /Fe%s /Fd%s %s Advapi32.lib' % (pyd_filename, pdf_filename, ' '.join( all_objects )) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleLinkShared( self, target ): pyd_filename = target.getTargetFilename() pdf_filename = target.getTargetFilename( '.pdf' ) all_objects = [source.getTargetFilename() for source in target.all_sources] rules = [''] rules.append( '' ) rules.append( '%s : %s' % (pyd_filename, ' '.join( all_objects )) ) rules.append( '\t@echo Link %s' % (pyd_filename,) ) rules.append( '\t$(LDSHARED) %%(CCCFLAGS)s /Fe%s /Fd%s %s %%(PYTHON_LIB)s\%%(PYTHON_LIBNAME)s.lib' % (pyd_filename, pdf_filename, ' '.join( all_objects )) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleCxx( self, target ): obj_filename = target.getTargetFilename() rules = [] rules.append( '%s: %s %s' % (obj_filename, target.src_filename, ' '.join( target.all_dependencies )) ) rules.append( '\t@echo Compile: %s into %s' % (target.src_filename, target.getTargetFilename()) ) rules.append( '\t$(CCC) /c %%(CCCFLAGS)s /Fo%s /Fd%s %s' % (obj_filename, target.dependent.getTargetFilename( '.pdb' ), target.src_filename) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleC( self, target ): # can reuse the C++ rule self.ruleCxx( target ) def ruleClean( self, filename ): rules = [] rules.append( 'clean::' ) rules.append( '\tif exist %s del %s' % (filename, filename) ) rules.append( '' ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def setupPythonExtension( self ): self._addVar( 'PYTHON', sys.executable ) self._addVar( 'OBJ_DIR', 'obj' ) self._addVar( 'PYTHON_VERSION', '%d.%d' % (sys.version_info[0], sys.version_info[1]) ) self._addVar( 'DEMO_DIR', 'Demo\Python%d' % (sys.version_info[0],) ) self._addVar( 'CCCFLAGS', r'/Zi /MT /EHsc ' r'-I. -ISrc -I%(PYTHON_INCLUDE)s ' r'-D_CRT_NONSTDC_NO_DEPRECATE ' r'-U_DEBUG ' r'-D%(DEBUG)s' ) def ruleTest( self, python_test ): rules = [] rules.append( 'test:: %s %s' % (python_test.getTargetFilename(), python_test.python_extension.getTargetFilename()) ) rules.append( '\tset PYTHONPATH=obj' ) rules.append( '\t%%(PYTHON)s -W default %s' % (python_test.getTargetFilename(),) ) rules.append( '' ) self.makePrint( self.expand( '\n'.join( rules ) ) ) class CompilerGCC(Compiler): def __init__( self, setup ): Compiler.__init__( self, setup ) if self.setup.platform == 'macosx': if sys.version_info[0] == 2: maxsize = sys.maxint else: maxsize = sys.maxsize if maxsize == (2**31-1): arch = 'i386' else: arch = 'x86_64' self._addVar( 'CCC', 'g++ -arch %s' % (arch,) ) self._addVar( 'CC', 'gcc -arch %s' % (arch,) ) else: self._addVar( 'CCC', 'g++' ) self._addVar( 'CC', 'gcc' ) def getPythonExtensionFileExt( self ): return '.so' def getProgramExt( self ): return '' def generateMakefileHeader( self ): self.makePrint( '#' ) self.makePrint( '# Bemacs Makefile generated by setup.py' ) self.makePrint( '#' ) self.makePrint( '' ) def ruleLinkProgram( self, target ): target_filename = target.getTargetFilename() all_objects = [source.getTargetFilename() for source in target.all_sources] rules = [] rules.append( '%s : %s' % (target_filename, ' '.join( all_objects )) ) rules.append( '\t@echo Link %s' % (target_filename,) ) rules.append( '\t%%(LDEXE)s -o %s %%(CCCFLAGS)s %s' % (target_filename, ' '.join( all_objects )) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleLinkShared( self, target ): target_filename = target.getTargetFilename() all_objects = [source.getTargetFilename() for source in target.all_sources] rules = [] rules.append( '%s : %s' % (target_filename, ' '.join( all_objects )) ) rules.append( '\t@echo Link %s' % (target_filename,) ) rules.append( '\t%%(LDSHARED)s -o %s %%(CCCFLAGS)s %s' % (target_filename, ' '.join( all_objects )) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleCxx( self, target ): obj_filename = target.getTargetFilename() rules = [] rules.append( '%s: %s %s' % (obj_filename, target.src_filename, ' '.join( target.all_dependencies )) ) rules.append( '\t@echo Compile: %s into %s' % (target.src_filename, obj_filename) ) rules.append( '\t%%(CCC)s -c %%(CCCFLAGS)s -o%s %s' % (obj_filename, target.src_filename) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleC( self, target ): obj_filename = target.getTargetFilename() rules = [] rules.append( '%s: %s %s' % (obj_filename, target.src_filename, ' '.join( target.all_dependencies )) ) rules.append( '\t@echo Compile: %s into %s' % (target.src_filename, target) ) rules.append( '\t%%(CC)s -c %%(CCCFLAGS)s -o%s %s' % (obj_filename, target.src_filename) ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleClean( self, filename ): rules = [] rules.append( 'clean::' ) rules.append( '\trm -f %s' % (filename,) ) rules.append( '' ) self.makePrint( self.expand( '\n'.join( rules ) ) ) def ruleTest( self, python_test ): rules = [] rules.append( 'test:: %s %s' % (python_test.getTargetFilename(), python_test.python_extension.getTargetFilename()) ) rules.append( '\tPYTHONPATH=obj %%(PYTHON)s -W default %s' % (python_test.getTargetFilename(),) ) rules.append( '' ) self.makePrint( self.expand( '\n'.join( rules ) ) ) class MacOsxCompilerGCC(CompilerGCC): def __init__( self, setup ): CompilerGCC.__init__( self, setup ) def setupPythonExtension( self ): self._addVar( 'PYTHON', sys.executable ) self._addVar( 'OBJ_DIR', 'obj' ) self._addVar( 'PYTHON_VERSION', '%d.%d' % (sys.version_info[0], sys.version_info[1]) ) self._addVar( 'PYTHONDIR', sys.exec_prefix ) self._addVar( 'PYTHON_FRAMEWORK', '%(PYTHONDIR)s/Python' ) self._addVar( 'PYTHON', sys.executable ) self._addVar( 'PYTHON_INCLUDE', '%(PYTHONDIR)s/Headers' ) self._addVar( 'DEMO_DIR', 'Demo/Python%d' % (sys.version_info[0],) ) self._addVar( 'CCCFLAGS', '-g ' '-Wall -fPIC -fexceptions -frtti ' '-I. -ISrc -I%(PYTHON_INCLUDE)s ' '-D%(DEBUG)s' ) self._addVar( 'LDSHARED', '%(CCC)s -bundle -g ' '-framework System ' '%(PYTHON_FRAMEWORK)s ' ) class LinuxCompilerGCC(CompilerGCC): def __init__( self, setup ): CompilerGCC.__init__( self, setup ) def setupPythonExtension( self ): self._addVar( 'PYTHON', sys.executable ) self._addVar( 'OBJ_DIR', 'obj' ) self._addVar( 'DEMO_DIR', 'Demo/Python%d' % (sys.version_info[0],) ) self._addVar( 'PYTHON_VERSION', '%d.%d' % (sys.version_info[0], sys.version_info[1]) ) self._addVar( 'PYTHON_INCLUDE', distutils.sysconfig.get_python_inc() ) self._addVar( 'CCCFLAGS', '-g ' '-Wall -fPIC -fexceptions -frtti ' '-I. -ISrc -I%(PYTHON_INCLUDE)s ' '-D%(DEBUG)s' ) self._addVar( 'LDEXE', '%(CCC)s -g' ) self._addVar( 'LDSHARED', '%(CCC)s -shared -g ' ) #-------------------------------------------------------------------------------- class Target: def __init__( self, compiler, all_sources ): self.compiler = compiler self.__generated = False self.dependent = None self.all_sources = all_sources for source in self.all_sources: source.setDependent( self ) def getTargetFilename( self ): raise NotImplementedError( '%s.getTargetFilename' % self.__class__.__name__ ) def generateMakefile( self ): if self.__generated: return self.__generated = True return self._generateMakefile() def _generateMakefile( self ): raise NotImplementedError( '_generateMakefile' ) def ruleClean( self, ext=None ): if ext is None: target_filename = self.getTargetFilename() else: target_filename = self.getTargetFilename( ext ) self.compiler.ruleClean( target_filename ) def setDependent( self, dependent ): debug( '%r.setDependent( %r )' % (self, dependent,) ) self.dependent = dependent class TestPythonExtension(Target): def __init__( self, compiler, test_source, python_extension ): self.test_source = test_source self.python_extension = python_extension Target.__init__( self, compiler, [] ) def __repr__( self ): return '' % (id(self), self.test_source ) def getTargetFilename( self ): return self.compiler.platformFilename( self.compiler.expand( self.test_source ) ) def _generateMakefile( self ): self.compiler.ruleTest( self ) class PythonExtension(Target): def __init__( self, compiler, output, all_sources ): self.output = output Target.__init__( self, compiler, all_sources ) debug( 'PythonExtension:0x%8.8x.__init__( %r, ... )' % (id(self), output,) ) for source in self.all_sources: source.setDependent( self ) def __repr__( self ): return '' % (id(self), self.output) def getTargetFilename( self, ext=None ): if ext is None: ext = self.compiler.getPythonExtensionFileExt() return self.compiler.platformFilename( self.compiler.expand( '%%(OBJ_DIR)s/%s%s' % (self.output, ext) ) ) def _generateMakefile( self ): debug( 'PythonExtension:0x%8.8x.generateMakefile() for %r' % (id(self), self.output,) ) self.compiler.ruleLinkShared( self ) self.compiler.ruleClean( self.getTargetFilename( '.*' ) ) for source in self.all_sources: source.generateMakefile() class Source(Target): def __init__( self, compiler, src_filename, all_dependencies=None ): self.src_filename = compiler.platformFilename( compiler.expand( src_filename ) ) Target.__init__( self, compiler, [] ) debug( 'Source:0x%8.8x.__init__( %r, %r )' % (id(self), src_filename, all_dependencies) ) self.all_dependencies = all_dependencies if self.all_dependencies is None: self.all_dependencies = [] def __repr__( self ): return '' % (id(self), self.src_filename) def getTargetFilename( self ): #if not os.path.exists( self.src_filename ): # raise ValueError( 'Cannot find source %s' % (self.src_filename,) ) basename = os.path.basename( self.src_filename ) if basename.endswith( '.cpp' ): return self.compiler.platformFilename( self.compiler.expand( r'%%(OBJ_DIR)s/%s.obj' % (basename[:-len('.cpp')],) ) ) if basename.endswith( '.cxx' ): return self.compiler.platformFilename( self.compiler.expand( r'%%(OBJ_DIR)s/%s.obj' % (basename[:-len('.cxx')],) ) ) if basename.endswith( '.c' ): return self.compiler.platformFilename( self.compiler.expand( r'%%(OBJ_DIR)s/%s.obj' % (basename[:-len('.c')],) ) ) raise ValueError( 'unknown source %r' % (self.src_filename,) ) def _generateMakefile( self ): debug( 'Source:0x%8.8x.generateMakefile() for %r' % (id(self), self.src_filename,) ) self.compiler.ruleCxx( self ) self.compiler.ruleClean( self.getTargetFilename() ) #-------------------------------------------------------------------------------- def main( argv ): try: s = Setup( argv ) s.generateMakefile() return 0 except ValueError: e = sys.exc_info()[1] sys.stderr.write( 'Error: %s\n' % (e,) ) return 1 if __name__ == '__main__': sys.exit( main( sys.argv ) ) pysvn-1.7.8/Import/pycxx-6.2.4/SourceForge/000755 000771 000771 00000000000 11724122665 020535 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/Src/000755 000771 000771 00000000000 11724122666 017042 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/tag_pycxx.py000644 000771 000771 00000004134 11432020712 020656 0ustar00barrybarry000000 000000 import pysvn import sys import os def make_tag( from_url, tag_base_url, version ): client = pysvn.Client() client.callback_get_log_message = lambda : (True, 'Tag version '+version) client.callback_get_login = callback_getLogin try: from_files = client.ls( from_url, recurse=False ) print 'Info: Found', from_url except pysvn.ClientError, e: print 'Error: From does not exist',from_url return try: tag_files = client.ls( tag_base_url, recurse=False ) print 'Info: Found', tag_base_url except pysvn.ClientError, e: print 'Error: Tag base does not exist',tag_base_url return cur_versions = [os.path.basename(f['name']) for f in tag_files] if version in cur_versions: print 'Error: Already tagged',version return try: to_url = tag_base_url + '/' + version print 'Info: Copy',repr(from_url), repr(to_url) client.copy( from_url, to_url ) print 'Info: Copy complete' except pysvn.ClientError, e: print 'Error: ', str(e) return def callback_getLogin( realm, username, may_save ): print 'May save:',may_save print 'Realm:',realm if username: print 'Username:',username else: sys.stdout.write( 'Username: ' ) username = sys.stdin.readline().strip() if len(username) == 0: return 0, '', '', False sys.stdout.write( 'Password: ' ) password = sys.stdin.readline().strip() save_password = 'x' while save_password.lower() not in ['y','ye','yes','n', 'no','']: sys.stdout.write( 'Save password? [y/n] ' ) save_password = sys.stdin.readline().strip() return 1, username, password, save_password in ['y','ye','yes'] def main(): if len(sys.argv) != 2: print 'Usage: %s version' % sys.argv[0] return version = sys.argv[1] from_url = 'https://cxx.svn.sourceforge.net/svnroot/cxx/trunk/CXX' tag_base_url = 'https://cxx.svn.sourceforge.net/svnroot/cxx/tags' make_tag( from_url, tag_base_url, version ) if __name__ == '__main__': main() pysvn-1.7.8/Import/pycxx-6.2.4/Src/cxx_extensions.cxx000644 000771 000771 00000004354 11146072165 022651 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #include "CXX/WrapPython.h" #if PY_MAJOR_VERSION == 2 #include "Python2/cxx_extensions.cxx" #else #include "Python3/cxx_extensions.cxx" #endif pysvn-1.7.8/Import/pycxx-6.2.4/Src/cxxextensions.c000644 000771 000771 00000004356 11146072165 022134 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #include "CXX/WrapPython.h" #if PY_MAJOR_VERSION == 2 #include "Src/Python2/cxxextensions.c" #else #include "Src/Python3/cxxextensions.c" #endif pysvn-1.7.8/Import/pycxx-6.2.4/Src/cxxsupport.cxx000644 000771 000771 00000004354 11146072165 022027 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #include "CXX/WrapPython.h" #if PY_MAJOR_VERSION == 2 #include "Src/Python2/cxxsupport.cxx" #else #include "Src/Python3/cxxsupport.cxx" #endif pysvn-1.7.8/Import/pycxx-6.2.4/Src/IndirectPythonInterface.cxx000644 000771 000771 00000061570 11541734710 024357 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #include "CXX/IndirectPythonInterface.hxx" namespace Py { bool _CFunction_Check( PyObject *op ) { return op->ob_type == _CFunction_Type(); } bool _Complex_Check( PyObject *op ) { return op->ob_type == _Complex_Type(); } bool _Dict_Check( PyObject *op ) { return op->ob_type == _Dict_Type(); } bool _Float_Check( PyObject *op ) { return op->ob_type == _Float_Type(); } bool _Function_Check( PyObject *op ) { return op->ob_type == _Function_Type(); } bool _Boolean_Check( PyObject *op ) { return op->ob_type == _Bool_Type(); } bool _List_Check( PyObject *op ) { return op->ob_type == _List_Type(); } bool _Long_Check( PyObject *op ) { return op->ob_type == _Long_Type(); } bool _Method_Check( PyObject *op ) { return op->ob_type == _Method_Type(); } bool _Module_Check( PyObject *op ) { return op->ob_type == _Module_Type(); } bool _Range_Check( PyObject *op ) { return op->ob_type == _Range_Type(); } bool _Slice_Check( PyObject *op ) { return op->ob_type == _Slice_Type(); } bool _TraceBack_Check( PyObject *op ) { return op->ob_type == _TraceBack_Type(); } bool _Tuple_Check( PyObject *op ) { return op->ob_type == _Tuple_Type(); } bool _Type_Check( PyObject *op ) { return op->ob_type == _Type_Type(); } bool _Unicode_Check( PyObject *op ) { return op->ob_type == _Unicode_Type(); } #if PY_MAJOR_VERSION == 2 bool _String_Check( PyObject *op ) { return op->ob_type == _String_Type(); } bool _Int_Check( PyObject *op ) { return op->ob_type == _Int_Type(); } bool _CObject_Check( PyObject *op ) { return op->ob_type == _CObject_Type(); } #endif #if PY_MAJOR_VERSION >= 3 bool _Bytes_Check( PyObject *op ) { return op->ob_type == _Bytes_Type(); } #endif #if defined(PY_WIN32_DELAYLOAD_PYTHON_DLL) #if defined(MS_WINDOWS) #include static HMODULE python_dll; static PyObject *ptr__Exc_ArithmeticError = NULL; static PyObject *ptr__Exc_AssertionError = NULL; static PyObject *ptr__Exc_AttributeError = NULL; static PyObject *ptr__Exc_EnvironmentError = NULL; static PyObject *ptr__Exc_EOFError = NULL; static PyObject *ptr__Exc_Exception = NULL; static PyObject *ptr__Exc_FloatingPointError = NULL; static PyObject *ptr__Exc_ImportError = NULL; static PyObject *ptr__Exc_IndexError = NULL; static PyObject *ptr__Exc_IOError = NULL; static PyObject *ptr__Exc_KeyboardInterrupt = NULL; static PyObject *ptr__Exc_KeyError = NULL; static PyObject *ptr__Exc_LookupError = NULL; static PyObject *ptr__Exc_MemoryError = NULL; static PyObject *ptr__Exc_NameError = NULL; static PyObject *ptr__Exc_NotImplementedError = NULL; static PyObject *ptr__Exc_OSError = NULL; static PyObject *ptr__Exc_OverflowError = NULL; static PyObject *ptr__Exc_RuntimeError = NULL; static PyObject *ptr__Exc_StandardError = NULL; static PyObject *ptr__Exc_SyntaxError = NULL; static PyObject *ptr__Exc_SystemError = NULL; static PyObject *ptr__Exc_SystemExit = NULL; static PyObject *ptr__Exc_TypeError = NULL; static PyObject *ptr__Exc_ValueError = NULL; static PyObject *ptr__Exc_ZeroDivisionError = NULL; #ifdef MS_WINDOWS static PyObject *ptr__Exc_WindowsError = NULL; #endif static PyObject *ptr__Exc_IndentationError = NULL; static PyObject *ptr__Exc_TabError = NULL; static PyObject *ptr__Exc_UnboundLocalError = NULL; static PyObject *ptr__Exc_UnicodeError = NULL; static PyObject *ptr__PyNone = NULL; static PyObject *ptr__PyFalse = NULL; static PyObject *ptr__PyTrue = NULL; static PyTypeObject *ptr__CFunction_Type = NULL; static PyTypeObject *ptr__Complex_Type = NULL; static PyTypeObject *ptr__Dict_Type = NULL; static PyTypeObject *ptr__Float_Type = NULL; static PyTypeObject *ptr__Function_Type = NULL; static PyTypeObject *ptr__Bool_Type = NULL; static PyTypeObject *ptr__List_Type = NULL; static PyTypeObject *ptr__Long_Type = NULL; static PyTypeObject *ptr__Method_Type = NULL; static PyTypeObject *ptr__Module_Type = NULL; static PyTypeObject *ptr__Range_Type = NULL; static PyTypeObject *ptr__Slice_Type = NULL; static PyTypeObject *ptr__TraceBack_Type = NULL; static PyTypeObject *ptr__Tuple_Type = NULL; static PyTypeObject *ptr__Type_Type = NULL; #if PY_MAJOR_VERSION == 2 static PyTypeObject *ptr__Int_Type = NULL; static PyTypeObject *ptr__String_Type = NULL; static PyTypeObject *ptr__CObject_Type = NULL; #endif #if PY_MAJOR_VERSION >= 3 static PyTypeObject *ptr__Bytes_Type = NULL; #endif static int *ptr_Py_DebugFlag = NULL; static int *ptr_Py_InteractiveFlag = NULL; static int *ptr_Py_OptimizeFlag = NULL; static int *ptr_Py_NoSiteFlag = NULL; static int *ptr_Py_VerboseFlag = NULL; static char **ptr__Py_PackageContext = NULL; #ifdef Py_REF_DEBUG int *ptr_Py_RefTotal; #endif //-------------------------------------------------------------------------------- class GetAddressException { public: GetAddressException( const char *_name ) : name( _name ) {} virtual ~GetAddressException() {} const char *name; }; //-------------------------------------------------------------------------------- static PyObject *GetPyObjectPointer_As_PyObjectPointer( const char *name ) { FARPROC addr = GetProcAddress( python_dll, name ); if( addr == NULL ) throw GetAddressException( name ); return *(PyObject **)addr; } static PyObject *GetPyObject_As_PyObjectPointer( const char *name ) { FARPROC addr = GetProcAddress( python_dll, name ); if( addr == NULL ) throw GetAddressException( name ); return (PyObject *)addr; } static PyTypeObject *GetPyTypeObjectPointer_As_PyTypeObjectPointer( const char *name ) { FARPROC addr = GetProcAddress( python_dll, name ); if( addr == NULL ) throw GetAddressException( name ); return *(PyTypeObject **)addr; } static PyTypeObject *GetPyTypeObject_As_PyTypeObjectPointer( const char *name ) { FARPROC addr = GetProcAddress( python_dll, name ); if( addr == NULL ) throw GetAddressException( name ); return (PyTypeObject *)addr; } static int *GetInt_as_IntPointer( const char *name ) { FARPROC addr = GetProcAddress( python_dll, name ); if( addr == NULL ) throw GetAddressException( name ); return (int *)addr; } static char **GetCharPointer_as_CharPointerPointer( const char *name ) { FARPROC addr = GetProcAddress( python_dll, name ); if( addr == NULL ) throw GetAddressException( name ); return (char **)addr; } #ifdef _DEBUG static const char python_dll_name_format[] = "PYTHON%1.1d%1.1d_D.DLL"; #else static const char python_dll_name_format[] = "PYTHON%1.1d%1.1d.DLL"; #endif //-------------------------------------------------------------------------------- bool InitialisePythonIndirectInterface() { char python_dll_name[sizeof(python_dll_name_format)]; _snprintf( python_dll_name, sizeof(python_dll_name_format) / sizeof(char) - 1, python_dll_name_format, PY_MAJOR_VERSION, PY_MINOR_VERSION ); python_dll = LoadLibraryA( python_dll_name ); if( python_dll == NULL ) return false; try { #ifdef Py_REF_DEBUG ptr_Py_RefTotal = GetInt_as_IntPointer( "_Py_RefTotal" ); #endif ptr_Py_DebugFlag = GetInt_as_IntPointer( "Py_DebugFlag" ); ptr_Py_InteractiveFlag = GetInt_as_IntPointer( "Py_InteractiveFlag" ); ptr_Py_OptimizeFlag = GetInt_as_IntPointer( "Py_OptimizeFlag" ); ptr_Py_NoSiteFlag = GetInt_as_IntPointer( "Py_NoSiteFlag" ); ptr_Py_VerboseFlag = GetInt_as_IntPointer( "Py_VerboseFlag" ); ptr__Py_PackageContext = GetCharPointer_as_CharPointerPointer( "_Py_PackageContext" ); ptr__Exc_ArithmeticError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_ArithmeticError" ); ptr__Exc_AssertionError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_AssertionError" ); ptr__Exc_AttributeError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_AttributeError" ); ptr__Exc_EnvironmentError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_EnvironmentError" ); ptr__Exc_EOFError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_EOFError" ); ptr__Exc_Exception = GetPyObjectPointer_As_PyObjectPointer( "PyExc_Exception" ); ptr__Exc_FloatingPointError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_FloatingPointError" ); ptr__Exc_ImportError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_ImportError" ); ptr__Exc_IndexError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_IndexError" ); ptr__Exc_IOError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_IOError" ); ptr__Exc_KeyboardInterrupt = GetPyObjectPointer_As_PyObjectPointer( "PyExc_KeyboardInterrupt" ); ptr__Exc_KeyError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_KeyError" ); ptr__Exc_LookupError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_LookupError" ); ptr__Exc_MemoryError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_MemoryError" ); ptr__Exc_NameError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_NameError" ); ptr__Exc_NotImplementedError= GetPyObjectPointer_As_PyObjectPointer( "PyExc_NotImplementedError" ); ptr__Exc_OSError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_OSError" ); ptr__Exc_OverflowError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_OverflowError" ); ptr__Exc_RuntimeError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_RuntimeError" ); ptr__Exc_StandardError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_StandardError" ); ptr__Exc_SyntaxError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_SyntaxError" ); ptr__Exc_SystemError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_SystemError" ); ptr__Exc_SystemExit = GetPyObjectPointer_As_PyObjectPointer( "PyExc_SystemExit" ); ptr__Exc_TypeError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_TypeError" ); ptr__Exc_ValueError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_ValueError" ); #ifdef MS_WINDOWS ptr__Exc_WindowsError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_WindowsError" ); #endif ptr__Exc_ZeroDivisionError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_ZeroDivisionError" ); ptr__Exc_IndentationError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_IndentationError" ); ptr__Exc_TabError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_TabError" ); ptr__Exc_UnboundLocalError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_UnboundLocalError" ); ptr__Exc_UnicodeError = GetPyObjectPointer_As_PyObjectPointer( "PyExc_UnicodeError" ); ptr__PyNone = GetPyObject_As_PyObjectPointer( "_Py_NoneStruct" ); ptr__PyFalse = GetPyObject_As_PyObjectPointer( "_Py_ZeroStruct" ); ptr__PyTrue = GetPyObject_As_PyObjectPointer( "_Py_TrueStruct" ); ptr__CFunction_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyCFunction_Type" ); ptr__Complex_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyComplex_Type" ); ptr__Dict_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyDict_Type" ); ptr__Float_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyFloat_Type" ); ptr__Function_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyFunction_Type" ); ptr__Bool_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyBool_Type" ); ptr__List_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyList_Type" ); ptr__Long_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyLong_Type" ); ptr__Method_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyMethod_Type" ); ptr__Module_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyModule_Type" ); ptr__Range_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyRange_Type" ); ptr__Slice_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PySlice_Type" ); ptr__TraceBack_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyTraceBack_Type" ); ptr__Tuple_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyTuple_Type" ); ptr__Type_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyType_Type" ); ptr__Unicode_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyUnicode_Type" ); #if PY_MAJOR_VERSION == 2 ptr__String_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyString_Type" ); ptr__Int_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyInt_Type" ); ptr__CObject_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyCObject_Type" ); #endif #if PY_MAJOR_VERSION >= 3 ptr__Bytes_Type = GetPyTypeObject_As_PyTypeObjectPointer( "PyBytes_Type" ); #endif } catch( GetAddressException &e ) { OutputDebugStringA( python_dll_name ); OutputDebugStringA( " does not contain symbol " ); OutputDebugStringA( e.name ); OutputDebugStringA( "\n" ); return false; } return true; } // // Wrap variables as function calls // PyObject *_Exc_ArithmeticError() { return ptr__Exc_ArithmeticError; } PyObject *_Exc_AssertionError() { return ptr__Exc_AssertionError; } PyObject *_Exc_AttributeError() { return ptr__Exc_AttributeError; } PyObject *_Exc_EnvironmentError() { return ptr__Exc_EnvironmentError; } PyObject *_Exc_EOFError() { return ptr__Exc_EOFError; } PyObject *_Exc_Exception() { return ptr__Exc_Exception; } PyObject *_Exc_FloatingPointError() { return ptr__Exc_FloatingPointError; } PyObject *_Exc_ImportError() { return ptr__Exc_ImportError; } PyObject *_Exc_IndexError() { return ptr__Exc_IndexError; } PyObject *_Exc_IOError() { return ptr__Exc_IOError; } PyObject *_Exc_KeyboardInterrupt() { return ptr__Exc_KeyboardInterrupt; } PyObject *_Exc_KeyError() { return ptr__Exc_KeyError; } PyObject *_Exc_LookupError() { return ptr__Exc_LookupError; } PyObject *_Exc_MemoryError() { return ptr__Exc_MemoryError; } PyObject *_Exc_NameError() { return ptr__Exc_NameError; } PyObject *_Exc_NotImplementedError() { return ptr__Exc_NotImplementedError; } PyObject *_Exc_OSError() { return ptr__Exc_OSError; } PyObject *_Exc_OverflowError() { return ptr__Exc_OverflowError; } PyObject *_Exc_RuntimeError() { return ptr__Exc_RuntimeError; } PyObject *_Exc_StandardError() { return ptr__Exc_StandardError; } PyObject *_Exc_SyntaxError() { return ptr__Exc_SyntaxError; } PyObject *_Exc_SystemError() { return ptr__Exc_SystemError; } PyObject *_Exc_SystemExit() { return ptr__Exc_SystemExit; } PyObject *_Exc_TypeError() { return ptr__Exc_TypeError; } PyObject *_Exc_ValueError() { return ptr__Exc_ValueError; } #ifdef MS_WINDOWS PyObject *_Exc_WindowsError() { return ptr__Exc_WindowsError; } #endif PyObject *_Exc_ZeroDivisionError() { return ptr__Exc_ZeroDivisionError; } PyObject *_Exc_IndentationError() { return ptr__Exc_IndentationError; } PyObject *_Exc_TabError() { return ptr__Exc_TabError; } PyObject *_Exc_UnboundLocalError() { return ptr__Exc_UnboundLocalError; } PyObject *_Exc_UnicodeError() { return ptr__Exc_UnicodeError; } // // wrap items in Object.h // PyObject *_None() { return ptr__PyNone; } PyObject *_False() { return ptr__PyFalse; } PyObject *_True() { return ptr__PyTrue; } PyTypeObject *_CFunction_Type() { return ptr__CFunction_Type; } PyTypeObject *_Complex_Type() { return ptr__Complex_Type; } PyTypeObject *_Dict_Type() { return ptr__Dict_Type; } PyTypeObject *_Float_Type() { return ptr__Float_Type; } PyTypeObject *_Function_Type() { return ptr__Function_Type; } PyTypeObject *_Bool_Type() { return ptr__Bool_Type; } PyTypeObject *_List_Type() { return ptr__List_Type; } PyTypeObject *_Long_Type() { return ptr__Long_Type; } PyTypeObject *_Method_Type() { return ptr__Method_Type; } PyTypeObject *_Module_Type() { return ptr__Module_Type; } PyTypeObject *_Range_Type() { return ptr__Range_Type; } PyTypeObject *_Slice_Type() { return ptr__Slice_Type; } PyTypeObject *_TraceBack_Type() { return ptr__TraceBack_Type; } PyTypeObject *_Tuple_Type() { return ptr__Tuple_Type; } PyTypeObject *_Type_Type() { return ptr__Type_Type; } PyTypeObject *_Unicode_Type() { return ptr__Unicode_Type; } #if PY_MAJOR_VERSION == 2 PyTypeObject *_String_Type() { return ptr__String_Type; } PyTypeObject *_Int_Type() { return ptr__Int_Type; } PyTypeObject *_CObject_Type() { return ptr__CObject_Type; } #endif #if PY_MAJOR_VERSION >= 3 PyTypeObject *_Bytes_Type() { return ptr__Bytes_Type; } #endif char *__Py_PackageContext() { return *ptr__Py_PackageContext; } // // wrap the Python Flag variables // int &_Py_DebugFlag() { return *ptr_Py_DebugFlag; } int &_Py_InteractiveFlag() { return *ptr_Py_InteractiveFlag; } int &_Py_OptimizeFlag() { return *ptr_Py_OptimizeFlag; } int &_Py_NoSiteFlag() { return *ptr_Py_NoSiteFlag; } int &_Py_VerboseFlag() { return *ptr_Py_VerboseFlag; } #if 0 #define Py_INCREF(op) ( \ _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA \ ((PyObject*)(op))->ob_refcnt++) #define Py_DECREF(op) \ if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA \ --((PyObject*)(op))->ob_refcnt != 0) \ _Py_CHECK_REFCNT(op) \ else \ _Py_Dealloc((PyObject *)(op)) #endif void _XINCREF( PyObject *op ) { // This function must match the contents of Py_XINCREF(op) if( op == NULL ) return; #ifdef Py_REF_DEBUG (*ptr_Py_RefTotal)++; #endif (op)->ob_refcnt++; } void _XDECREF( PyObject *op ) { // This function must match the contents of Py_XDECREF(op); if( op == NULL ) return; #ifdef Py_REF_DEBUG (*ptr_Py_RefTotal)--; #endif if (--(op)->ob_refcnt == 0) _Py_Dealloc((PyObject *)(op)); } #else #error "Can only delay load under Win32" #endif #else //================================================================================ // // Map onto Macros // //================================================================================ // // Wrap variables as function calls // PyObject *_Exc_ArithmeticError() { return ::PyExc_ArithmeticError; } PyObject *_Exc_AssertionError() { return ::PyExc_AssertionError; } PyObject *_Exc_AttributeError() { return ::PyExc_AttributeError; } PyObject *_Exc_EnvironmentError() { return ::PyExc_EnvironmentError; } PyObject *_Exc_EOFError() { return ::PyExc_EOFError; } PyObject *_Exc_Exception() { return ::PyExc_Exception; } PyObject *_Exc_FloatingPointError() { return ::PyExc_FloatingPointError; } PyObject *_Exc_ImportError() { return ::PyExc_ImportError; } PyObject *_Exc_IndexError() { return ::PyExc_IndexError; } PyObject *_Exc_IOError() { return ::PyExc_IOError; } PyObject *_Exc_KeyboardInterrupt() { return ::PyExc_KeyboardInterrupt; } PyObject *_Exc_KeyError() { return ::PyExc_KeyError; } PyObject *_Exc_LookupError() { return ::PyExc_LookupError; } PyObject *_Exc_MemoryError() { return ::PyExc_MemoryError; } PyObject *_Exc_NameError() { return ::PyExc_NameError; } PyObject *_Exc_NotImplementedError() { return ::PyExc_NotImplementedError; } PyObject *_Exc_OSError() { return ::PyExc_OSError; } PyObject *_Exc_OverflowError() { return ::PyExc_OverflowError; } PyObject *_Exc_RuntimeError() { return ::PyExc_RuntimeError; } PyObject *_Exc_SyntaxError() { return ::PyExc_SyntaxError; } PyObject *_Exc_SystemError() { return ::PyExc_SystemError; } PyObject *_Exc_SystemExit() { return ::PyExc_SystemExit; } PyObject *_Exc_TypeError() { return ::PyExc_TypeError; } PyObject *_Exc_ValueError() { return ::PyExc_ValueError; } PyObject *_Exc_ZeroDivisionError() { return ::PyExc_ZeroDivisionError; } PyObject *_Exc_IndentationError() { return ::PyExc_IndentationError; } PyObject *_Exc_TabError() { return ::PyExc_TabError; } PyObject *_Exc_UnboundLocalError() { return ::PyExc_UnboundLocalError; } PyObject *_Exc_UnicodeError() { return ::PyExc_UnicodeError; } #ifdef MS_WINDOWS PyObject *_Exc_WindowsError() { return ::PyExc_WindowsError; } #endif // // wrap items in Object.h // PyObject *_None() { return &::_Py_NoneStruct; } PyObject *_False() { return Py_False; } PyObject *_True() { return Py_True; } PyTypeObject *_CFunction_Type() { return &PyCFunction_Type; } PyTypeObject *_Complex_Type() { return &PyComplex_Type; } PyTypeObject *_Dict_Type() { return &PyDict_Type; } PyTypeObject *_Float_Type() { return &PyFloat_Type; } PyTypeObject *_Function_Type() { return &PyFunction_Type; } PyTypeObject *_Bool_Type() { return &PyBool_Type; } PyTypeObject *_List_Type() { return &PyList_Type; } PyTypeObject *_Long_Type() { return &PyLong_Type; } PyTypeObject *_Method_Type() { return &PyMethod_Type; } PyTypeObject *_Module_Type() { return &PyModule_Type; } PyTypeObject *_Range_Type() { return &PyRange_Type; } PyTypeObject *_Slice_Type() { return &PySlice_Type; } PyTypeObject *_TraceBack_Type() { return &PyTraceBack_Type; } PyTypeObject *_Tuple_Type() { return &PyTuple_Type; } PyTypeObject *_Type_Type() { return &PyType_Type; } PyTypeObject *_Unicode_Type() { return &PyUnicode_Type; } #if PY_MAJOR_VERSION == 2 PyTypeObject *_String_Type() { return &PyString_Type; } PyTypeObject *_Int_Type() { return &PyInt_Type; } PyTypeObject *_CObject_Type() { return &PyCObject_Type; } #endif #if PY_MAJOR_VERSION >= 3 PyTypeObject *_Bytes_Type() { return &PyBytes_Type; } #endif // // wrap flags // int &_Py_DebugFlag() { return Py_DebugFlag; } int &_Py_InteractiveFlag() { return Py_InteractiveFlag; } int &_Py_OptimizeFlag() { return Py_OptimizeFlag; } int &_Py_NoSiteFlag() { return Py_NoSiteFlag; } int &_Py_VerboseFlag() { return Py_VerboseFlag; } char *__Py_PackageContext() { return _Py_PackageContext; } // // Needed to keep the abstactions for delayload interface // void _XINCREF( PyObject *op ) { Py_XINCREF( op ); } void _XDECREF( PyObject *op ) { Py_XDECREF( op ); } #endif } pysvn-1.7.8/Import/pycxx-6.2.4/Src/Python2/000755 000771 000771 00000000000 11724122666 020405 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/Src/Python3/000755 000771 000771 00000000000 11724122666 020406 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/Src/Python3/cxx_extensions.cxx000644 000771 000771 00000140226 11722441226 024212 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #include "CXX/Extensions.hxx" #include "CXX/Exception.hxx" #include #ifdef PYCXX_DEBUG // // Functions useful when debugging PyCXX // void bpt( void ) { } void printRefCount( PyObject *obj ) { std::cout << "RefCount of 0x" << std::hex << reinterpret_cast< unsigned int >( obj ) << std::dec << " is " << Py_REFCNT( obj ) << std::endl; } #endif namespace Py { void Object::validate() { // release pointer if not the right type if( !accepts( p ) ) { #if defined( _CPPRTTI ) || defined( __GNUG__ ) std::string s( "PyCXX: Error creating object of type " ); s += (typeid( *this )).name(); if( p != NULL ) { String from_repr = repr(); s += " from "; s += from_repr.as_std_string(); } else { s += " from (nil)"; } #endif release(); if( PyErr_Occurred() ) { // Error message already set throw Exception(); } // Better error message if RTTI available #if defined( _CPPRTTI ) || defined( __GNUG__ ) throw TypeError( s ); #else throw TypeError( "PyCXX: type error." ); #endif } } //================================================================================ // // Implementation of MethodTable // //================================================================================ PyMethodDef MethodTable::method( const char *method_name, PyCFunction f, int flags, const char *doc ) { PyMethodDef m; m.ml_name = const_cast( method_name ); m.ml_meth = f; m.ml_flags = flags; m.ml_doc = const_cast( doc ); return m; } MethodTable::MethodTable() { t.push_back( method( 0, 0, 0, 0 ) ); mt = NULL; } MethodTable::~MethodTable() { delete [] mt; } void MethodTable::add( const char *method_name, PyCFunction f, const char *doc, int flag ) { if( !mt ) { t.insert( t.end()-1, method( method_name, f, flag, doc ) ); } else { throw RuntimeError( "Too late to add a module method!" ); } } PyMethodDef *MethodTable::table() { if( !mt ) { Py_ssize_t t1size = t.size(); mt = new PyMethodDef[ t1size ]; int j = 0; for( std::vector::iterator i = t.begin(); i != t.end(); i++ ) { mt[ j++ ] = *i; } } return mt; } //================================================================================ // // Implementation of ExtensionModule // //================================================================================ ExtensionModuleBase::ExtensionModuleBase( const char *name ) : m_module_name( name ) , m_full_module_name( __Py_PackageContext() != NULL ? std::string( __Py_PackageContext() ) : m_module_name ) , m_method_table() //m_module_def , m_module( NULL ) {} ExtensionModuleBase::~ExtensionModuleBase() {} const std::string &ExtensionModuleBase::name() const { return m_module_name; } const std::string &ExtensionModuleBase::fullName() const { return m_full_module_name; } class ExtensionModuleBasePtr : public PythonExtension { public: ExtensionModuleBasePtr( ExtensionModuleBase *_module ) : module( _module ) {} virtual ~ExtensionModuleBasePtr() {} ExtensionModuleBase *module; }; void ExtensionModuleBase::initialize( const char *module_doc ) { memset( &m_module_def, 0, sizeof( m_module_def ) ); m_module_def.m_name = const_cast( m_module_name.c_str() ); m_module_def.m_doc = const_cast( module_doc ); m_module_def.m_methods = m_method_table.table(); // where does module_ptr get passed in? m_module = PyModule_Create( &m_module_def ); } Py::Module ExtensionModuleBase::module( void ) const { return Module( m_module ); } Py::Dict ExtensionModuleBase::moduleDictionary( void ) const { return module().getDict(); } //================================================================================ // // Implementation of PythonType // //================================================================================ extern "C" { static void standard_dealloc( PyObject *p ); // // All the following functions redirect the call from Python // onto the matching virtual function in PythonExtensionBase // static int print_handler( PyObject *, FILE *, int ); static PyObject *getattr_handler( PyObject *, char * ); static int setattr_handler( PyObject *, char *, PyObject * ); static PyObject *getattro_handler( PyObject *, PyObject * ); static int setattro_handler( PyObject *, PyObject *, PyObject * ); static PyObject *rich_compare_handler( PyObject *, PyObject *, int ); static PyObject *repr_handler( PyObject * ); static PyObject *str_handler( PyObject * ); static Py_hash_t hash_handler( PyObject * ); static PyObject *call_handler( PyObject *, PyObject *, PyObject * ); static PyObject *iter_handler( PyObject * ); static PyObject *iternext_handler( PyObject * ); // Sequence methods static Py_ssize_t sequence_length_handler( PyObject * ); static PyObject *sequence_concat_handler( PyObject *,PyObject * ); static PyObject *sequence_repeat_handler( PyObject *, Py_ssize_t ); static PyObject *sequence_item_handler( PyObject *, Py_ssize_t ); static int sequence_ass_item_handler( PyObject *, Py_ssize_t, PyObject * ); // Mapping static Py_ssize_t mapping_length_handler( PyObject * ); static PyObject *mapping_subscript_handler( PyObject *, PyObject * ); static int mapping_ass_subscript_handler( PyObject *, PyObject *, PyObject * ); // Numeric methods static PyObject *number_negative_handler( PyObject * ); static PyObject *number_positive_handler( PyObject * ); static PyObject *number_absolute_handler( PyObject * ); static PyObject *number_invert_handler( PyObject * ); static PyObject *number_int_handler( PyObject * ); static PyObject *number_float_handler( PyObject * ); static PyObject *number_add_handler( PyObject *, PyObject * ); static PyObject *number_subtract_handler( PyObject *, PyObject * ); static PyObject *number_multiply_handler( PyObject *, PyObject * ); static PyObject *number_remainder_handler( PyObject *, PyObject * ); static PyObject *number_divmod_handler( PyObject *, PyObject * ); static PyObject *number_lshift_handler( PyObject *, PyObject * ); static PyObject *number_rshift_handler( PyObject *, PyObject * ); static PyObject *number_and_handler( PyObject *, PyObject * ); static PyObject *number_xor_handler( PyObject *, PyObject * ); static PyObject *number_or_handler( PyObject *, PyObject * ); static PyObject *number_power_handler( PyObject *, PyObject *, PyObject * ); // Buffer // QQQ } extern "C" void standard_dealloc( PyObject *p ) { PyMem_DEL( p ); } bool PythonType::readyType() { return PyType_Ready( table ) >= 0; } PythonType &PythonType::supportSequenceType() { if( !sequence_table ) { sequence_table = new PySequenceMethods; memset( sequence_table, 0, sizeof( PySequenceMethods ) ); // ensure new fields are 0 table->tp_as_sequence = sequence_table; sequence_table->sq_length = sequence_length_handler; sequence_table->sq_concat = sequence_concat_handler; sequence_table->sq_repeat = sequence_repeat_handler; sequence_table->sq_item = sequence_item_handler; sequence_table->sq_ass_item = sequence_ass_item_handler; // BAS setup seperately? // QQQ sq_inplace_concat // QQQ sq_inplace_repeat } return *this; } PythonType &PythonType::supportMappingType() { if( !mapping_table ) { mapping_table = new PyMappingMethods; memset( mapping_table, 0, sizeof( PyMappingMethods ) ); // ensure new fields are 0 table->tp_as_mapping = mapping_table; mapping_table->mp_length = mapping_length_handler; mapping_table->mp_subscript = mapping_subscript_handler; mapping_table->mp_ass_subscript = mapping_ass_subscript_handler; // BAS setup seperately? } return *this; } PythonType &PythonType::supportNumberType() { if( !number_table ) { number_table = new PyNumberMethods; memset( number_table, 0, sizeof( PyNumberMethods ) ); // ensure new fields are 0 table->tp_as_number = number_table; number_table->nb_add = number_add_handler; number_table->nb_subtract = number_subtract_handler; number_table->nb_multiply = number_multiply_handler; number_table->nb_remainder = number_remainder_handler; number_table->nb_divmod = number_divmod_handler; number_table->nb_power = number_power_handler; number_table->nb_negative = number_negative_handler; number_table->nb_positive = number_positive_handler; number_table->nb_absolute = number_absolute_handler; number_table->nb_invert = number_invert_handler; number_table->nb_lshift = number_lshift_handler; number_table->nb_rshift = number_rshift_handler; number_table->nb_and = number_and_handler; number_table->nb_xor = number_xor_handler; number_table->nb_or = number_or_handler; number_table->nb_int = number_int_handler; number_table->nb_float = number_float_handler; // QQQ lots of new methods to add } return *this; } PythonType &PythonType::supportBufferType() { if( !buffer_table ) { buffer_table = new PyBufferProcs; memset( buffer_table, 0, sizeof( PyBufferProcs ) ); // ensure new fields are 0 table->tp_as_buffer = buffer_table; // QQQ bf_getbuffer // QQQ bf_releasebuffer } return *this; } // if you define one sequence method you must define // all of them except the assigns PythonType::PythonType( size_t basic_size, int itemsize, const char *default_name ) : table( new PyTypeObject ) , sequence_table( NULL ) , mapping_table( NULL ) , number_table( NULL ) , buffer_table( NULL ) { // PyTypeObject is defined in /Include/object.h memset( table, 0, sizeof( PyTypeObject ) ); // ensure new fields are 0 *reinterpret_cast( table ) = py_object_initializer; reinterpret_cast( table )->ob_type = _Type_Type(); // QQQ table->ob_size = 0; table->tp_name = const_cast( default_name ); table->tp_basicsize = basic_size; table->tp_itemsize = itemsize; // Methods to implement standard operations table->tp_dealloc = (destructor)standard_dealloc; table->tp_print = 0; table->tp_getattr = 0; table->tp_setattr = 0; table->tp_repr = 0; // Method suites for standard classes table->tp_as_number = 0; table->tp_as_sequence = 0; table->tp_as_mapping = 0; // More standard operations (here for binary compatibility) table->tp_hash = 0; table->tp_call = 0; table->tp_str = 0; table->tp_getattro = 0; table->tp_setattro = 0; // Functions to access object as input/output buffer table->tp_as_buffer = 0; // Flags to define presence of optional/expanded features table->tp_flags = Py_TPFLAGS_DEFAULT; // Documentation string table->tp_doc = 0; table->tp_traverse = 0; // delete references to contained objects table->tp_clear = 0; // Assigned meaning in release 2.1 // rich comparisons table->tp_richcompare = 0; // weak reference enabler table->tp_weaklistoffset = 0; // Iterators table->tp_iter = 0; table->tp_iternext = 0; // Attribute descriptor and subclassing stuff table->tp_methods = 0; table->tp_members = 0; table->tp_getset = 0; table->tp_base = 0; table->tp_dict = 0; table->tp_descr_get = 0; table->tp_descr_set = 0; table->tp_dictoffset = 0; table->tp_init = 0; table->tp_alloc = 0; table->tp_new = 0; table->tp_free = 0; // Low-level free-memory routine table->tp_is_gc = 0; // For PyObject_IS_GC table->tp_bases = 0; table->tp_mro = 0; // method resolution order table->tp_cache = 0; table->tp_subclasses = 0; table->tp_weaklist = 0; table->tp_del = 0; // Type attribute cache version tag. Added in version 2.6 table->tp_version_tag = 0; #ifdef COUNT_ALLOCS table->tp_alloc = 0; table->tp_free = 0; table->tp_maxalloc = 0; table->tp_orev = 0; table->tp_next = 0; #endif } PythonType::~PythonType() { delete table; delete sequence_table; delete mapping_table; delete number_table; delete buffer_table; } PyTypeObject *PythonType::type_object() const { return table; } PythonType &PythonType::name( const char *nam ) { table->tp_name = const_cast( nam ); return *this; } const char *PythonType::getName() const { return table->tp_name; } PythonType &PythonType::doc( const char *d ) { table->tp_doc = const_cast( d ); return *this; } const char *PythonType::getDoc() const { return table->tp_doc; } PythonType &PythonType::set_tp_dealloc( void (*tp_dealloc)( PyObject *self ) ) { table->tp_dealloc = tp_dealloc; return *this; } PythonType &PythonType::set_tp_init( int (*tp_init)( PyObject *self, PyObject *args, PyObject *kwds ) ) { table->tp_init = tp_init; return *this; } PythonType &PythonType::set_tp_new( PyObject *(*tp_new)( PyTypeObject *subtype, PyObject *args, PyObject *kwds ) ) { table->tp_new = tp_new; return *this; } PythonType &PythonType::set_methods( PyMethodDef *methods ) { table->tp_methods = methods; return *this; } PythonType &PythonType::supportClass() { table->tp_flags |= Py_TPFLAGS_BASETYPE; return *this; } #ifdef PYCXX_PYTHON_2TO3 PythonType &PythonType::supportPrint() { table->tp_print = print_handler; return *this; } #endif PythonType &PythonType::supportGetattr() { table->tp_getattr = getattr_handler; return *this; } PythonType &PythonType::supportSetattr() { table->tp_setattr = setattr_handler; return *this; } PythonType &PythonType::supportGetattro() { table->tp_getattro = getattro_handler; return *this; } PythonType &PythonType::supportSetattro() { table->tp_setattro = setattro_handler; return *this; } #ifdef PYCXX_PYTHON_2TO3 PythonType &PythonType::supportCompare( void ) { return *this; } #endif PythonType &PythonType::supportRichCompare() { table->tp_richcompare = rich_compare_handler; return *this; } PythonType &PythonType::supportRepr() { table->tp_repr = repr_handler; return *this; } PythonType &PythonType::supportStr() { table->tp_str = str_handler; return *this; } PythonType &PythonType::supportHash() { table->tp_hash = hash_handler; return *this; } PythonType &PythonType::supportCall() { table->tp_call = call_handler; return *this; } PythonType &PythonType::supportIter() { table->tp_iter = iter_handler; table->tp_iternext = iternext_handler; return *this; } //-------------------------------------------------------------------------------- // // Handlers // //-------------------------------------------------------------------------------- PythonExtensionBase *getPythonExtensionBase( PyObject *self ) { if( self->ob_type->tp_flags&Py_TPFLAGS_BASETYPE ) { PythonClassInstance *instance = reinterpret_cast( self ); return instance->m_pycxx_object; } else { return static_cast( self ); } } #ifdef PYCXX_PYTHON_2TO3 extern "C" int print_handler( PyObject *self, FILE *fp, int flags ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->print( fp, flags ); } catch( Py::Exception & ) { return -1; // indicate error } } #endif extern "C" PyObject *getattr_handler( PyObject *self, char *name ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->getattr( name ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" int setattr_handler( PyObject *self, char *name, PyObject *value ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->setattr( name, Py::Object( value ) ); } catch( Py::Exception & ) { return -1; // indicate error } } extern "C" PyObject *getattro_handler( PyObject *self, PyObject *name ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->getattro( Py::String( name ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" int setattro_handler( PyObject *self, PyObject *name, PyObject *value ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->setattro( Py::String( name ), Py::Object( value ) ); } catch( Py::Exception & ) { return -1; // indicate error } } extern "C" PyObject *rich_compare_handler( PyObject *self, PyObject *other, int op ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->rich_compare( Py::Object( other ), op ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *repr_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->repr() ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *str_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->str() ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" Py_hash_t hash_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->hash(); } catch( Py::Exception & ) { return -1; // indicate error } } extern "C" PyObject *call_handler( PyObject *self, PyObject *args, PyObject *kw ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); if( kw != NULL ) return new_reference_to( p->call( Py::Object( args ), Py::Object( kw ) ) ); else return new_reference_to( p->call( Py::Object( args ), Py::Object() ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *iter_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->iter() ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *iternext_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->iternext(); // might be a NULL ptr on end of iteration } catch( Py::Exception & ) { return NULL; // indicate error } } // Sequence methods extern "C" Py_ssize_t sequence_length_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->sequence_length(); } catch( Py::Exception & ) { return -1; // indicate error } } extern "C" PyObject *sequence_concat_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->sequence_concat( Py::Object( other ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *sequence_repeat_handler( PyObject *self, Py_ssize_t count ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->sequence_repeat( count ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *sequence_item_handler( PyObject *self, Py_ssize_t index ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->sequence_item( index ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" int sequence_ass_item_handler( PyObject *self, Py_ssize_t index, PyObject *value ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->sequence_ass_item( index, Py::Object( value ) ); } catch( Py::Exception & ) { return -1; // indicate error } } // Mapping extern "C" Py_ssize_t mapping_length_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->mapping_length(); } catch( Py::Exception & ) { return -1; // indicate error } } extern "C" PyObject *mapping_subscript_handler( PyObject *self, PyObject *key ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->mapping_subscript( Py::Object( key ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" int mapping_ass_subscript_handler( PyObject *self, PyObject *key, PyObject *value ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->mapping_ass_subscript( Py::Object( key ), Py::Object( value ) ); } catch( Py::Exception & ) { return -1; // indicate error } } // Number extern "C" PyObject *number_negative_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_negative() ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_positive_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_positive() ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_absolute_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_absolute() ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_invert_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_invert() ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_int_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_int() ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_float_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_float() ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_add_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_add( Py::Object( other ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_subtract_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_subtract( Py::Object( other ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_multiply_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_multiply( Py::Object( other ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_remainder_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_remainder( Py::Object( other ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_divmod_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_divmod( Py::Object( other ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_lshift_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_lshift( Py::Object( other ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_rshift_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_rshift( Py::Object( other ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_and_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_and( Py::Object( other ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_xor_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_xor( Py::Object( other ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_or_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_or( Py::Object( other ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } extern "C" PyObject *number_power_handler( PyObject *self, PyObject *x1, PyObject *x2 ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_power( Py::Object( x1 ), Py::Object( x2 ) ) ); } catch( Py::Exception & ) { return NULL; // indicate error } } // Buffer //================================================================================ // // Implementation of PythonExtensionBase // //================================================================================ #define missing_method( method ) \ throw RuntimeError( "Extension object missing implement of " #method ); PythonExtensionBase::PythonExtensionBase() { ob_refcnt = 0; } PythonExtensionBase::~PythonExtensionBase() { assert( ob_refcnt == 0 ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name ) { Py::TupleN args; return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1 ) { Py::TupleN args( arg1 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2 ) { Py::TupleN args( arg1, arg2 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3 ) { Py::TupleN args( arg1, arg2, arg3 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3, const Py::Object &arg4 ) { Py::TupleN args( arg1, arg2, arg3, arg4 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3, const Py::Object &arg4, const Py::Object &arg5 ) { Py::TupleN args( arg1, arg2, arg3, arg4, arg5 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3, const Py::Object &arg4, const Py::Object &arg5, const Py::Object &arg6 ) { Py::TupleN args( arg1, arg2, arg3, arg4, arg5, arg6 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3, const Py::Object &arg4, const Py::Object &arg5, const Py::Object &arg6, const Py::Object &arg7 ) { Py::TupleN args( arg1, arg2, arg3, arg4, arg5, arg6, arg7 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3, const Py::Object &arg4, const Py::Object &arg5, const Py::Object &arg6, const Py::Object &arg7, const Py::Object &arg8 ) { Py::TupleN args( arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3, const Py::Object &arg4, const Py::Object &arg5, const Py::Object &arg6, const Py::Object &arg7, const Py::Object &arg8, const Py::Object &arg9 ) { Py::TupleN args( arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9 ); return self().callMemberFunction( fn_name, args ); } void PythonExtensionBase::reinit( Tuple &args, Dict &kwds ) { throw RuntimeError( "Must not call __init__ twice on this class" ); } Py::Object PythonExtensionBase::genericGetAttro( const Py::String &name ) { return asObject( PyObject_GenericGetAttr( selfPtr(), name.ptr() ) ); } int PythonExtensionBase::genericSetAttro( const Py::String &name, const Py::Object &value ) { return PyObject_GenericSetAttr( selfPtr(), name.ptr(), value.ptr() ); } #ifdef PYCXX_PYTHON_2TO3 int PythonExtensionBase::print( FILE *, int ) { missing_method( print ); return -1; } #endif Py::Object PythonExtensionBase::getattr( const char * ) { missing_method( getattr ); return Py::None(); } int PythonExtensionBase::setattr( const char *, const Py::Object & ) { missing_method( setattr ); return -1; } Py::Object PythonExtensionBase::getattro( const Py::String &name ) { return asObject( PyObject_GenericGetAttr( selfPtr(), name.ptr() ) ); } int PythonExtensionBase::setattro( const Py::String &name, const Py::Object &value ) { return PyObject_GenericSetAttr( selfPtr(), name.ptr(), value.ptr() ); } int PythonExtensionBase::compare( const Py::Object & ) { missing_method( compare ); return -1; } Py::Object PythonExtensionBase::rich_compare( const Py::Object &, int ) { missing_method( rich_compare ); return Py::None(); } Py::Object PythonExtensionBase::repr() { missing_method( repr ); return Py::None(); } Py::Object PythonExtensionBase::str() { missing_method( str ); return Py::None(); } long PythonExtensionBase::hash() { missing_method( hash ); return -1; } Py::Object PythonExtensionBase::call( const Py::Object &, const Py::Object & ) { missing_method( call ); return Py::None(); } Py::Object PythonExtensionBase::iter() { missing_method( iter ); return Py::None(); } PyObject *PythonExtensionBase::iternext() { missing_method( iternext ); return NULL; } // Sequence methods int PythonExtensionBase::sequence_length() { missing_method( sequence_length ); return -1; } Py::Object PythonExtensionBase::sequence_concat( const Py::Object & ) { missing_method( sequence_concat ); return Py::None(); } Py::Object PythonExtensionBase::sequence_repeat( Py_ssize_t ) { missing_method( sequence_repeat ); return Py::None(); } Py::Object PythonExtensionBase::sequence_item( Py_ssize_t ) { missing_method( sequence_item ); return Py::None(); } int PythonExtensionBase::sequence_ass_item( Py_ssize_t, const Py::Object & ) { missing_method( sequence_ass_item ); return -1; } // Mapping int PythonExtensionBase::mapping_length() { missing_method( mapping_length ); return -1; } Py::Object PythonExtensionBase::mapping_subscript( const Py::Object & ) { missing_method( mapping_subscript ); return Py::None(); } int PythonExtensionBase::mapping_ass_subscript( const Py::Object &, const Py::Object & ) { missing_method( mapping_ass_subscript ); return -1; } Py::Object PythonExtensionBase::number_negative() { missing_method( number_negative ); return Py::None(); } Py::Object PythonExtensionBase::number_positive() { missing_method( number_positive ); return Py::None(); } Py::Object PythonExtensionBase::number_absolute() { missing_method( number_absolute ); return Py::None(); } Py::Object PythonExtensionBase::number_invert() { missing_method( number_invert ); return Py::None(); } Py::Object PythonExtensionBase::number_int() { missing_method( number_int ); return Py::None(); } Py::Object PythonExtensionBase::number_float() { missing_method( number_float ); return Py::None(); } Py::Object PythonExtensionBase::number_long() { missing_method( number_long ); return Py::None(); } Py::Object PythonExtensionBase::number_add( const Py::Object & ) { missing_method( number_add ); return Py::None(); } Py::Object PythonExtensionBase::number_subtract( const Py::Object & ) { missing_method( number_subtract ); return Py::None(); } Py::Object PythonExtensionBase::number_multiply( const Py::Object & ) { missing_method( number_multiply ); return Py::None(); } Py::Object PythonExtensionBase::number_remainder( const Py::Object & ) { missing_method( number_remainder ); return Py::None(); } Py::Object PythonExtensionBase::number_divmod( const Py::Object & ) { missing_method( number_divmod ); return Py::None(); } Py::Object PythonExtensionBase::number_lshift( const Py::Object & ) { missing_method( number_lshift ); return Py::None(); } Py::Object PythonExtensionBase::number_rshift( const Py::Object & ) { missing_method( number_rshift ); return Py::None(); } Py::Object PythonExtensionBase::number_and( const Py::Object & ) { missing_method( number_and ); return Py::None(); } Py::Object PythonExtensionBase::number_xor( const Py::Object & ) { missing_method( number_xor ); return Py::None(); } Py::Object PythonExtensionBase::number_or( const Py::Object & ) { missing_method( number_or ); return Py::None(); } Py::Object PythonExtensionBase::number_power( const Py::Object &, const Py::Object & ) { missing_method( number_power ); return Py::None(); } // Buffer // QQQ //-------------------------------------------------------------------------------- // // Method call handlers for // PythonExtensionBase // ExtensionModuleBase // //-------------------------------------------------------------------------------- // Note: Python calls noargs as varargs buts args==NULL extern "C" PyObject *method_noargs_call_handler( PyObject *_self_and_name_tuple, PyObject * ) { try { Tuple self_and_name_tuple( _self_and_name_tuple ); PyObject *self_in_cobject = self_and_name_tuple[0].ptr(); void *self_as_void = PyCapsule_GetPointer( self_in_cobject, NULL ); if( self_as_void == NULL ) return NULL; ExtensionModuleBase *self = static_cast( self_as_void ); Object result( self->invoke_method_noargs( PyCapsule_GetPointer( self_and_name_tuple[1].ptr(), NULL ) ) ); return new_reference_to( result.ptr() ); } catch( Exception & ) { return 0; } } extern "C" PyObject *method_varargs_call_handler( PyObject *_self_and_name_tuple, PyObject *_args ) { try { Tuple self_and_name_tuple( _self_and_name_tuple ); PyObject *self_in_cobject = self_and_name_tuple[0].ptr(); void *self_as_void = PyCapsule_GetPointer( self_in_cobject, NULL ); if( self_as_void == NULL ) return NULL; ExtensionModuleBase *self = static_cast( self_as_void ); Tuple args( _args ); Object result ( self->invoke_method_varargs ( PyCapsule_GetPointer( self_and_name_tuple[1].ptr(), NULL ), args ) ); return new_reference_to( result.ptr() ); } catch( Exception & ) { return 0; } } extern "C" PyObject *method_keyword_call_handler( PyObject *_self_and_name_tuple, PyObject *_args, PyObject *_keywords ) { try { Tuple self_and_name_tuple( _self_and_name_tuple ); PyObject *self_in_cobject = self_and_name_tuple[0].ptr(); void *self_as_void = PyCapsule_GetPointer( self_in_cobject, NULL ); if( self_as_void == NULL ) return NULL; ExtensionModuleBase *self = static_cast( self_as_void ); Tuple args( _args ); if( _keywords == NULL ) { Dict keywords; // pass an empty dict Object result ( self->invoke_method_keyword ( PyCapsule_GetPointer( self_and_name_tuple[1].ptr(), NULL ), args, keywords ) ); return new_reference_to( result.ptr() ); } else { Dict keywords( _keywords ); // make dict Object result ( self->invoke_method_keyword ( PyCapsule_GetPointer( self_and_name_tuple[1].ptr(), NULL ), args, keywords ) ); return new_reference_to( result.ptr() ); } } catch( Exception & ) { return 0; } } //-------------------------------------------------------------------------------- // // ExtensionExceptionType // //-------------------------------------------------------------------------------- ExtensionExceptionType::ExtensionExceptionType() : Py::Object() { } void ExtensionExceptionType::init( ExtensionModuleBase &module, const std::string& name ) { std::string module_name( module.fullName() ); module_name += "."; module_name += name; set( PyErr_NewException( const_cast( module_name.c_str() ), NULL, NULL ), true ); } void ExtensionExceptionType::init( ExtensionModuleBase &module, const std::string& name, ExtensionExceptionType &parent ) { std::string module_name( module.fullName() ); module_name += "."; module_name += name; set( PyErr_NewException( const_cast( module_name.c_str() ), parent.ptr(), NULL ), true ); } ExtensionExceptionType::~ExtensionExceptionType() { } Exception::Exception( ExtensionExceptionType &exception, const std::string& reason ) { PyErr_SetString( exception.ptr(), reason.c_str() ); } Exception::Exception( ExtensionExceptionType &exception, Object &reason ) { PyErr_SetObject( exception.ptr(), reason.ptr() ); } Exception::Exception( PyObject *exception, Object &reason ) { PyErr_SetObject( exception, reason.ptr() ); } #if 1 //------------------------------------------------------------ // compare operators bool operator!=( const Long &a, const Long &b ) { return a.as_long() != b.as_long(); } bool operator!=( const Long &a, int b ) { return a.as_long() != b; } bool operator!=( const Long &a, long b ) { return a.as_long() != b; } bool operator!=( int a, const Long &b ) { return a != b.as_long(); } bool operator!=( long a, const Long &b ) { return a != b.as_long(); } //------------------------------ bool operator==( const Long &a, const Long &b ) { return a.as_long() == b.as_long(); } bool operator==( const Long &a, int b ) { return a.as_long() == b; } bool operator==( const Long &a, long b ) { return a.as_long() == b; } bool operator==( int a, const Long &b ) { return a == b.as_long(); } bool operator==( long a, const Long &b ) { return a == b.as_long(); } //------------------------------ bool operator>( const Long &a, const Long &b ) { return a.as_long() > b.as_long(); } bool operator>( const Long &a, int b ) { return a.as_long() > b; } bool operator>( const Long &a, long b ) { return a.as_long() > b; } bool operator>( int a, const Long &b ) { return a > b.as_long(); } bool operator>( long a, const Long &b ) { return a > b.as_long(); } //------------------------------ bool operator>=( const Long &a, const Long &b ) { return a.as_long() >= b.as_long(); } bool operator>=( const Long &a, int b ) { return a.as_long() >= b; } bool operator>=( const Long &a, long b ) { return a.as_long() >= b; } bool operator>=( int a, const Long &b ) { return a >= b.as_long(); } bool operator>=( long a, const Long &b ) { return a >= b.as_long(); } //------------------------------ bool operator<( const Long &a, const Long &b ) { return a.as_long() < b.as_long(); } bool operator<( const Long &a, int b ) { return a.as_long() < b; } bool operator<( const Long &a, long b ) { return a.as_long() < b; } bool operator<( int a, const Long &b ) { return a < b.as_long(); } bool operator<( long a, const Long &b ) { return a < b.as_long(); } //------------------------------ bool operator<=( const Long &a, const Long &b ) { return a.as_long() <= b.as_long(); } bool operator<=( int a, const Long &b ) { return a <= b.as_long(); } bool operator<=( long a, const Long &b ) { return a <= b.as_long(); } bool operator<=( const Long &a, int b ) { return a.as_long() <= b; } bool operator<=( const Long &a, long b ) { return a.as_long() <= b; } #ifdef HAVE_LONG_LONG //------------------------------ bool operator!=( const Long &a, PY_LONG_LONG b ) { return a.as_long_long() != b; } bool operator!=( PY_LONG_LONG a, const Long &b ) { return a != b.as_long_long(); } //------------------------------ bool operator==( const Long &a, PY_LONG_LONG b ) { return a.as_long_long() == b; } bool operator==( PY_LONG_LONG a, const Long &b ) { return a == b.as_long_long(); } //------------------------------ bool operator>( const Long &a, PY_LONG_LONG b ) { return a.as_long_long() > b; } bool operator>( PY_LONG_LONG a, const Long &b ) { return a > b.as_long_long(); } //------------------------------ bool operator>=( const Long &a, PY_LONG_LONG b ) { return a.as_long_long() >= b; } bool operator>=( PY_LONG_LONG a, const Long &b ) { return a >= b.as_long_long(); } //------------------------------ bool operator<( const Long &a, PY_LONG_LONG b ) { return a.as_long_long() < b; } bool operator<( PY_LONG_LONG a, const Long &b ) { return a < b.as_long_long(); } //------------------------------ bool operator<=( const Long &a, PY_LONG_LONG b ) { return a.as_long_long() <= b; } bool operator<=( PY_LONG_LONG a, const Long &b ) { return a <= b.as_long_long(); } #endif #endif //------------------------------------------------------------ // compare operators bool operator!=( const Float &a, const Float &b ) { return a.as_double() != b.as_double(); } bool operator!=( const Float &a, double b ) { return a.as_double() != b; } bool operator!=( double a, const Float &b ) { return a != b.as_double(); } //------------------------------ bool operator==( const Float &a, const Float &b ) { return a.as_double() == b.as_double(); } bool operator==( const Float &a, double b ) { return a.as_double() == b; } bool operator==( double a, const Float &b ) { return a == b.as_double(); } //------------------------------ bool operator>( const Float &a, const Float &b ) { return a.as_double() > b.as_double(); } bool operator>( const Float &a, double b ) { return a.as_double() > b; } bool operator>( double a, const Float &b ) { return a > b.as_double(); } //------------------------------ bool operator>=( const Float &a, const Float &b ) { return a.as_double() >= b.as_double(); } bool operator>=( const Float &a, double b ) { return a.as_double() >= b; } bool operator>=( double a, const Float &b ) { return a >= b.as_double(); } //------------------------------ bool operator<( const Float &a, const Float &b ) { return a.as_double() < b.as_double(); } bool operator<( const Float &a, double b ) { return a.as_double() < b; } bool operator<( double a, const Float &b ) { return a < b.as_double(); } //------------------------------ bool operator<=( const Float &a, const Float &b ) { return a.as_double() <= b.as_double(); } bool operator<=( double a, const Float &b ) { return a <= b.as_double(); } bool operator<=( const Float &a, double b ) { return a.as_double() <= b; } } // end of namespace Py pysvn-1.7.8/Import/pycxx-6.2.4/Src/Python3/cxxextensions.c000644 000771 000771 00000004473 11146616710 023500 0ustar00barrybarry000000 000000 /*---------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //---------------------------------------------------------------------------*/ #include "CXX/WrapPython.h" #ifdef __cplusplus extern "C" { #endif PyObject py_object_initializer = { _PyObject_EXTRA_INIT 1, NULL // type must be init'ed by user }; #ifdef __cplusplus } #endif pysvn-1.7.8/Import/pycxx-6.2.4/Src/Python3/cxxsupport.cxx000644 000771 000771 00000014362 11146616710 023373 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #include "CXX/Objects.hxx" namespace Py { Py_UNICODE unicode_null_string[1] = { 0 }; Type Object::type() const { return Type( PyObject_Type( p ), true ); } String Object::str() const { return String( PyObject_Str( p ), true ); } String Object::repr() const { return String( PyObject_Repr( p ), true ); } std::string Object::as_string() const { return static_cast( str() ); } List Object::dir() const { return List( PyObject_Dir( p ), true ); } bool Object::isType( const Type &t ) const { return type().ptr() == t.ptr(); } Char::operator String() const { return String( ptr() ); } String Bytes::decode( const char *encoding, const char *error ) { return String( PyUnicode_FromEncodedObject( ptr(), encoding, error ), true ); } // Object compares bool operator==( const Object &o1, const Object &o2 ) { int k = PyObject_RichCompareBool( *o1, *o2, Py_EQ ); if( PyErr_Occurred() ) throw Exception(); return k != 0; } bool operator!=( const Object &o1, const Object &o2 ) { int k = PyObject_RichCompareBool( *o1, *o2, Py_NE ); if( PyErr_Occurred() ) throw Exception(); return k != 0; } bool operator>=( const Object &o1, const Object &o2 ) { int k = PyObject_RichCompareBool( *o1, *o2, Py_GE ); if( PyErr_Occurred() ) throw Exception(); return k != 0; } bool operator<=( const Object &o1, const Object &o2 ) { int k = PyObject_RichCompareBool( *o1, *o2, Py_LE ); if( PyErr_Occurred() ) throw Exception(); return k != 0; } bool operator<( const Object &o1, const Object &o2 ) { int k = PyObject_RichCompareBool( *o1, *o2, Py_LT ); if( PyErr_Occurred() ) throw Exception(); return k != 0; } bool operator>( const Object &o1, const Object &o2 ) { int k = PyObject_RichCompareBool( *o1, *o2, Py_GT ); if( PyErr_Occurred() ) throw Exception(); return k != 0; } // iterator compares bool operator==( const Sequence::iterator &left, const Sequence::iterator &right ) { return left.eql( right ); } bool operator!=( const Sequence::iterator &left, const Sequence::iterator &right ) { return left.neq( right ); } bool operator<( const Sequence::iterator &left, const Sequence::iterator &right ) { return left.lss( right ); } bool operator>( const Sequence::iterator &left, const Sequence::iterator &right ) { return left.gtr( right ); } bool operator<=( const Sequence::iterator &left, const Sequence::iterator &right ) { return left.leq( right ); } bool operator>=( const Sequence::iterator &left, const Sequence::iterator &right ) { return left.geq( right ); } // const_iterator compares bool operator==( const Sequence::const_iterator &left, const Sequence::const_iterator &right ) { return left.eql( right ); } bool operator!=( const Sequence::const_iterator &left, const Sequence::const_iterator &right ) { return left.neq( right ); } bool operator<( const Sequence::const_iterator &left, const Sequence::const_iterator &right ) { return left.lss( right ); } bool operator>( const Sequence::const_iterator &left, const Sequence::const_iterator &right ) { return left.gtr( right ); } bool operator<=( const Sequence::const_iterator &left, const Sequence::const_iterator &right ) { return left.leq( right ); } bool operator>=( const Sequence::const_iterator &left, const Sequence::const_iterator &right ) { return left.geq( right ); } // For mappings: bool operator==( const Mapping::iterator &left, const Mapping::iterator &right ) { return left.eql( right ); } bool operator!=( const Mapping::iterator &left, const Mapping::iterator &right ) { return left.neq( right ); } // now for const_iterator bool operator==( const Mapping::const_iterator &left, const Mapping::const_iterator &right ) { return left.eql( right ); } bool operator!=( const Mapping::const_iterator &left, const Mapping::const_iterator &right ) { return left.neq( right ); } // TMM: 31May'01 - Added the #ifndef so I can exclude iostreams. #ifndef CXX_NO_IOSTREAMS // output std::ostream &operator<<( std::ostream &os, const Object &ob ) { return( os << static_cast( ob.str() ) ); } #endif } // Py pysvn-1.7.8/Import/pycxx-6.2.4/Src/Python2/cxx_extensions.cxx000644 000771 000771 00000141027 11722441226 024211 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #include "CXX/Extensions.hxx" #include "CXX/Exception.hxx" #include #ifdef PYCXX_DEBUG // // Functions useful when debugging PyCXX // void bpt( void ) { } void printRefCount( PyObject *obj ) { std::cout << "RefCount of 0x" << std::hex << reinterpret_cast< unsigned int >( obj ) << std::dec << " is " << Py_REFCNT( obj ) << std::endl; } #endif namespace Py { #ifdef PYCXX_PYTHON_2TO3 std::string String::as_std_string( const char *encoding, const char *error ) const { if( isUnicode() ) { Bytes encoded( encode( encoding, error ) ); return encoded.as_std_string(); } else { return std::string( PyString_AsString( ptr() ), static_cast( PyString_Size( ptr() ) ) ); } } Bytes String::encode( const char *encoding, const char *error ) const { if( isUnicode() ) { return Bytes( PyUnicode_AsEncodedString( ptr(), encoding, error ) ); } else { return Bytes( PyString_AsEncodedObject( ptr(), encoding, error ) ); } } #else std::string String::as_std_string( const char *encoding, const char *error ) const { if( isUnicode() ) { String encoded( encode( encoding, error ) ); return encoded.as_std_string(); } else { return std::string( PyString_AsString( ptr() ), static_cast( PyString_Size( ptr() ) ) ); } } #endif void Object::validate() { // release pointer if not the right type if( !accepts( p ) ) { #if defined( _CPPRTTI ) || defined( __GNUG__ ) std::string s( "PyCXX: Error creating object of type " ); s += (typeid( *this )).name(); if( p != NULL ) { String from_repr = repr(); s += " from "; s += from_repr.as_std_string( "utf-8" ); } else { s += " from (nil)"; } #endif release(); if( PyErr_Occurred() ) { // Error message already set throw Exception(); } // Better error message if RTTI available #if defined( _CPPRTTI ) || defined( __GNUG__ ) throw TypeError( s ); #else throw TypeError( "PyCXX: type error." ); #endif } } //================================================================================ // // Implementation of MethodTable // //================================================================================ PyMethodDef MethodTable::method( const char *method_name, PyCFunction f, int flags, const char *doc ) { PyMethodDef m; m.ml_name = const_cast( method_name ); m.ml_meth = f; m.ml_flags = flags; m.ml_doc = const_cast( doc ); return m; } MethodTable::MethodTable() { t.push_back( method( 0, 0, 0, 0 ) ); mt = NULL; } MethodTable::~MethodTable() { delete [] mt; } void MethodTable::add( const char *method_name, PyCFunction f, const char *doc, int flag ) { if( !mt ) { t.insert( t.end()-1, method( method_name, f, flag, doc ) ); } else { throw RuntimeError( "Too late to add a module method!" ); } } PyMethodDef *MethodTable::table() { if( !mt ) { Py_ssize_t t1size = t.size(); mt = new PyMethodDef[ t1size ]; int j = 0; for( std::vector::iterator i = t.begin(); i != t.end(); i++ ) { mt[ j++ ] = *i; } } return mt; } //================================================================================ // // Implementation of ExtensionModule // //================================================================================ ExtensionModuleBase::ExtensionModuleBase( const char *name ) : m_module_name( name ) , m_full_module_name( __Py_PackageContext() != NULL ? std::string( __Py_PackageContext() ) : m_module_name ) , m_method_table() {} ExtensionModuleBase::~ExtensionModuleBase() {} const std::string &ExtensionModuleBase::name() const { return m_module_name; } const std::string &ExtensionModuleBase::fullName() const { return m_full_module_name; } class ExtensionModuleBasePtr : public PythonExtension { public: ExtensionModuleBasePtr( ExtensionModuleBase *_module ) : module( _module ) {} virtual ~ExtensionModuleBasePtr() {} ExtensionModuleBase *module; }; void ExtensionModuleBase::initialize( const char *module_doc ) { PyObject *module_ptr = new ExtensionModuleBasePtr( this ); Py_InitModule4 ( const_cast( m_module_name.c_str() ), // name m_method_table.table(), // methods const_cast( module_doc ), // docs module_ptr, // pass to functions as "self" PYTHON_API_VERSION // API version ); } Py::Module ExtensionModuleBase::module( void ) const { return Module( m_full_module_name ); } Py::Dict ExtensionModuleBase::moduleDictionary( void ) const { return module().getDict(); } //================================================================================ // // Implementation of PythonType // //================================================================================ extern "C" { static void standard_dealloc( PyObject *p ); // // All the following functions redirect the call from Python // onto the matching virtual function in PythonExtensionBase // #if defined( PYCXX_PYTHON_2TO3 ) static int print_handler( PyObject *, FILE *, int ); #endif static PyObject *getattr_handler( PyObject *, char * ); static int setattr_handler( PyObject *, char *, PyObject * ); static PyObject *getattro_handler( PyObject *, PyObject * ); static int setattro_handler( PyObject *, PyObject *, PyObject * ); static int compare_handler( PyObject *, PyObject * ); static PyObject *rich_compare_handler( PyObject *, PyObject *, int ); static PyObject *repr_handler( PyObject * ); static PyObject *str_handler( PyObject * ); static long hash_handler( PyObject * ); static PyObject *call_handler( PyObject *, PyObject *, PyObject * ); static PyObject *iter_handler( PyObject * ); static PyObject *iternext_handler( PyObject * ); // Sequence methods static Py_ssize_t sequence_length_handler( PyObject * ); static PyObject *sequence_concat_handler( PyObject *,PyObject * ); static PyObject *sequence_repeat_handler( PyObject *, Py_ssize_t ); static PyObject *sequence_item_handler( PyObject *, Py_ssize_t ); static PyObject *sequence_slice_handler( PyObject *, Py_ssize_t, Py_ssize_t ); static int sequence_ass_item_handler( PyObject *, Py_ssize_t, PyObject * ); static int sequence_ass_slice_handler( PyObject *, Py_ssize_t, Py_ssize_t, PyObject * ); // Mapping static Py_ssize_t mapping_length_handler( PyObject * ); static PyObject *mapping_subscript_handler( PyObject *, PyObject * ); static int mapping_ass_subscript_handler( PyObject *, PyObject *, PyObject * ); // Numeric methods static int number_nonzero_handler( PyObject * ); static PyObject *number_negative_handler( PyObject * ); static PyObject *number_positive_handler( PyObject * ); static PyObject *number_absolute_handler( PyObject * ); static PyObject *number_invert_handler( PyObject * ); static PyObject *number_int_handler( PyObject * ); static PyObject *number_float_handler( PyObject * ); static PyObject *number_long_handler( PyObject * ); static PyObject *number_oct_handler( PyObject * ); static PyObject *number_hex_handler( PyObject * ); static PyObject *number_add_handler( PyObject *, PyObject * ); static PyObject *number_subtract_handler( PyObject *, PyObject * ); static PyObject *number_multiply_handler( PyObject *, PyObject * ); static PyObject *number_divide_handler( PyObject *, PyObject * ); static PyObject *number_remainder_handler( PyObject *, PyObject * ); static PyObject *number_divmod_handler( PyObject *, PyObject * ); static PyObject *number_lshift_handler( PyObject *, PyObject * ); static PyObject *number_rshift_handler( PyObject *, PyObject * ); static PyObject *number_and_handler( PyObject *, PyObject * ); static PyObject *number_xor_handler( PyObject *, PyObject * ); static PyObject *number_or_handler( PyObject *, PyObject * ); static PyObject *number_power_handler( PyObject *, PyObject *, PyObject * ); // Buffer static Py_ssize_t buffer_getreadbuffer_handler( PyObject *, Py_ssize_t, void ** ); static Py_ssize_t buffer_getwritebuffer_handler( PyObject *, Py_ssize_t, void ** ); static Py_ssize_t buffer_getsegcount_handler( PyObject *, Py_ssize_t * ); } extern "C" void standard_dealloc( PyObject *p ) { PyMem_DEL( p ); } bool PythonType::readyType() { return PyType_Ready( table ) >= 0; } PythonType &PythonType::supportSequenceType() { if( !sequence_table ) { sequence_table = new PySequenceMethods; memset( sequence_table, 0, sizeof( PySequenceMethods ) ); // ensure new fields are 0 table->tp_as_sequence = sequence_table; sequence_table->sq_length = sequence_length_handler; sequence_table->sq_concat = sequence_concat_handler; sequence_table->sq_repeat = sequence_repeat_handler; sequence_table->sq_item = sequence_item_handler; sequence_table->sq_slice = sequence_slice_handler; sequence_table->sq_ass_item = sequence_ass_item_handler; // BAS setup seperately? sequence_table->sq_ass_slice = sequence_ass_slice_handler; // BAS setup seperately? } return *this; } PythonType &PythonType::supportMappingType() { if( !mapping_table ) { mapping_table = new PyMappingMethods; memset( mapping_table, 0, sizeof( PyMappingMethods ) ); // ensure new fields are 0 table->tp_as_mapping = mapping_table; mapping_table->mp_length = mapping_length_handler; mapping_table->mp_subscript = mapping_subscript_handler; mapping_table->mp_ass_subscript = mapping_ass_subscript_handler; // BAS setup seperately? } return *this; } PythonType &PythonType::supportNumberType() { if( !number_table ) { number_table = new PyNumberMethods; memset( number_table, 0, sizeof( PyNumberMethods ) ); // ensure new fields are 0 table->tp_as_number = number_table; number_table->nb_add = number_add_handler; number_table->nb_subtract = number_subtract_handler; number_table->nb_multiply = number_multiply_handler; number_table->nb_divide = number_divide_handler; number_table->nb_remainder = number_remainder_handler; number_table->nb_divmod = number_divmod_handler; number_table->nb_power = number_power_handler; number_table->nb_negative = number_negative_handler; number_table->nb_positive = number_positive_handler; number_table->nb_absolute = number_absolute_handler; number_table->nb_nonzero = number_nonzero_handler; number_table->nb_invert = number_invert_handler; number_table->nb_lshift = number_lshift_handler; number_table->nb_rshift = number_rshift_handler; number_table->nb_and = number_and_handler; number_table->nb_xor = number_xor_handler; number_table->nb_or = number_or_handler; number_table->nb_coerce = 0; number_table->nb_int = number_int_handler; number_table->nb_long = number_long_handler; number_table->nb_float = number_float_handler; number_table->nb_oct = number_oct_handler; number_table->nb_hex = number_hex_handler; } return *this; } PythonType &PythonType::supportBufferType() { if( !buffer_table ) { buffer_table = new PyBufferProcs; memset( buffer_table, 0, sizeof( PyBufferProcs ) ); // ensure new fields are 0 table->tp_as_buffer = buffer_table; buffer_table->bf_getreadbuffer = buffer_getreadbuffer_handler; buffer_table->bf_getwritebuffer = buffer_getwritebuffer_handler; buffer_table->bf_getsegcount = buffer_getsegcount_handler; } return *this; } // if you define one sequence method you must define // all of them except the assigns PythonType::PythonType( size_t basic_size, int itemsize, const char *default_name ) : table( new PyTypeObject ) , sequence_table( NULL ) , mapping_table( NULL ) , number_table( NULL ) , buffer_table( NULL ) { // PyTypeObject is defined in /Include/object.h memset( table, 0, sizeof( PyTypeObject ) ); // ensure new fields are 0 *reinterpret_cast( table ) = py_object_initializer; table->ob_type = _Type_Type(); table->ob_size = 0; table->tp_name = const_cast( default_name ); table->tp_basicsize = basic_size; table->tp_itemsize = itemsize; // Methods to implement standard operations table->tp_dealloc = (destructor)standard_dealloc; table->tp_print = 0; table->tp_getattr = 0; table->tp_setattr = 0; table->tp_compare = 0; table->tp_repr = 0; // Method suites for standard classes table->tp_as_number = 0; table->tp_as_sequence = 0; table->tp_as_mapping = 0; // More standard operations (here for binary compatibility) table->tp_hash = 0; table->tp_call = 0; table->tp_str = 0; table->tp_getattro = 0; table->tp_setattro = 0; // Functions to access object as input/output buffer table->tp_as_buffer = 0; // Flags to define presence of optional/expanded features table->tp_flags = Py_TPFLAGS_DEFAULT; // Documentation string table->tp_doc = 0; #if PY_MAJOR_VERSION > 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 0) table->tp_traverse = 0L; // delete references to contained objects table->tp_clear = 0L; #else table->tp_xxx5 = 0L; table->tp_xxx6 = 0L; #endif #if PY_MAJOR_VERSION > 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 1) // first defined in 2.1 table->tp_richcompare = 0L; // weak reference enabler table->tp_weaklistoffset = 0L; #else table->tp_xxx7 = 0L; table->tp_xxx8 = 0L; #endif #if PY_MAJOR_VERSION > 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 2) // first defined in 2.3 // Iterators table->tp_iter = 0L; table->tp_iternext = 0L; #endif #ifdef COUNT_ALLOCS table->tp_alloc = 0; table->tp_free = 0; table->tp_maxalloc = 0; table->tp_next = 0; #endif } PythonType::~PythonType() { delete table; delete sequence_table; delete mapping_table; delete number_table; delete buffer_table; } PyTypeObject *PythonType::type_object() const { return table; } PythonType &PythonType::name( const char *nam ) { table->tp_name = const_cast( nam ); return *this; } const char *PythonType::getName() const { return table->tp_name; } PythonType &PythonType::doc( const char *d ) { table->tp_doc = const_cast( d ); return *this; } const char *PythonType::getDoc() const { return table->tp_doc; } PythonType &PythonType::set_tp_dealloc( void (*tp_dealloc)( PyObject *self ) ) { table->tp_dealloc = tp_dealloc; return *this; } PythonType &PythonType::set_tp_init( int (*tp_init)( PyObject *self, PyObject *args, PyObject *kwds ) ) { table->tp_init = tp_init; return *this; } PythonType &PythonType::set_tp_new( PyObject *(*tp_new)( PyTypeObject *subtype, PyObject *args, PyObject *kwds ) ) { table->tp_new = tp_new; return *this; } PythonType &PythonType::set_methods( PyMethodDef *methods ) { table->tp_methods = methods; return *this; } PythonType &PythonType::supportClass() { table->tp_flags |= Py_TPFLAGS_BASETYPE; return *this; } PythonType &PythonType::dealloc( void( *f )( PyObject * )) { table->tp_dealloc = f; return *this; } #if defined( PYCXX_PYTHON_2TO3 ) PythonType &PythonType::supportPrint() { table->tp_print = print_handler; return *this; } #endif PythonType &PythonType::supportGetattr() { table->tp_getattr = getattr_handler; return *this; } PythonType &PythonType::supportSetattr() { table->tp_setattr = setattr_handler; return *this; } PythonType &PythonType::supportGetattro() { table->tp_getattro = getattro_handler; return *this; } PythonType &PythonType::supportSetattro() { table->tp_setattro = setattro_handler; return *this; } #if defined( PYCXX_PYTHON_2TO3 ) PythonType &PythonType::supportCompare() { table->tp_compare = compare_handler; return *this; } #endif #if PY_MAJOR_VERSION > 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 1) PythonType &PythonType::supportRichCompare() { table->tp_richcompare = rich_compare_handler; return *this; } #endif PythonType &PythonType::supportRepr() { table->tp_repr = repr_handler; return *this; } PythonType &PythonType::supportStr() { table->tp_str = str_handler; return *this; } PythonType &PythonType::supportHash() { table->tp_hash = hash_handler; return *this; } PythonType &PythonType::supportCall() { table->tp_call = call_handler; return *this; } PythonType &PythonType::supportIter() { table->tp_iter = iter_handler; table->tp_iternext = iternext_handler; return *this; } //-------------------------------------------------------------------------------- // // Handlers // //-------------------------------------------------------------------------------- PythonExtensionBase *getPythonExtensionBase( PyObject *self ) { if( self->ob_type->tp_flags&Py_TPFLAGS_BASETYPE ) { PythonClassInstance *instance = reinterpret_cast( self ); return instance->m_pycxx_object; } else { return static_cast( self ); } } #if defined( PYCXX_PYTHON_2TO3 ) extern "C" int print_handler( PyObject *self, FILE *fp, int flags ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->print( fp, flags ); } catch( Py::Exception &) { return -1; // indicate error } } #endif extern "C" PyObject *getattr_handler( PyObject *self, char *name ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->getattr( name ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" int setattr_handler( PyObject *self, char *name, PyObject *value ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->setattr( name, Py::Object( value ) ); } catch( Py::Exception &) { return -1; // indicate error } } extern "C" PyObject *getattro_handler( PyObject *self, PyObject *name ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->getattro( Py::String( name ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" int setattro_handler( PyObject *self, PyObject *name, PyObject *value ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->setattro( Py::String( name ), Py::Object( value ) ); } catch( Py::Exception &) { return -1; // indicate error } } extern "C" int compare_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->compare( Py::Object( other ) ); } catch( Py::Exception &) { return -1; // indicate error } } #if PY_MAJOR_VERSION > 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 1) extern "C" PyObject *rich_compare_handler( PyObject *self, PyObject *other, int op ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->rich_compare( Py::Object( other ), op ) ); } catch( Py::Exception &) { return NULL; // indicate error } } #endif extern "C" PyObject *repr_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->repr() ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *str_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->str() ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" long hash_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->hash(); } catch( Py::Exception &) { return -1; // indicate error } } extern "C" PyObject *call_handler( PyObject *self, PyObject *args, PyObject *kw ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); if( kw != NULL ) return new_reference_to( p->call( Py::Object( args ), Py::Object( kw ) ) ); else return new_reference_to( p->call( Py::Object( args ), Py::Object() ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *iter_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->iter() ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *iternext_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->iternext(); // might be a NULL ptr on end of iteration } catch( Py::Exception &) { return NULL; // indicate error } } // Sequence methods extern "C" Py_ssize_t sequence_length_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->sequence_length(); } catch( Py::Exception &) { return -1; // indicate error } } extern "C" PyObject *sequence_concat_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->sequence_concat( Py::Object( other ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *sequence_repeat_handler( PyObject *self, Py_ssize_t count ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->sequence_repeat( count ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *sequence_item_handler( PyObject *self, Py_ssize_t index ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->sequence_item( index ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *sequence_slice_handler( PyObject *self, Py_ssize_t first, Py_ssize_t last ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->sequence_slice( first, last ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" int sequence_ass_item_handler( PyObject *self, Py_ssize_t index, PyObject *value ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->sequence_ass_item( index, Py::Object( value ) ); } catch( Py::Exception &) { return -1; // indicate error } } extern "C" int sequence_ass_slice_handler( PyObject *self, Py_ssize_t first, Py_ssize_t last, PyObject *value ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->sequence_ass_slice( first, last, Py::Object( value ) ); } catch( Py::Exception &) { return -1; // indicate error } } // Mapping extern "C" Py_ssize_t mapping_length_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->mapping_length(); } catch( Py::Exception &) { return -1; // indicate error } } extern "C" PyObject *mapping_subscript_handler( PyObject *self, PyObject *key ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->mapping_subscript( Py::Object( key ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" int mapping_ass_subscript_handler( PyObject *self, PyObject *key, PyObject *value ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->mapping_ass_subscript( Py::Object( key ), Py::Object( value ) ); } catch( Py::Exception &) { return -1; // indicate error } } // Number extern "C" int number_nonzero_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->number_nonzero(); } catch( Py::Exception &) { return -1; // indicate error } } extern "C" PyObject *number_negative_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_negative() ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_positive_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_positive() ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_absolute_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_absolute() ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_invert_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_invert() ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_int_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_int() ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_float_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_float() ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_long_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_long() ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_oct_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_oct() ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_hex_handler( PyObject *self ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_hex() ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_add_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_add( Py::Object( other ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_subtract_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_subtract( Py::Object( other ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_multiply_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_multiply( Py::Object( other ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_divide_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_divide( Py::Object( other ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_remainder_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_remainder( Py::Object( other ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_divmod_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_divmod( Py::Object( other ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_lshift_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_lshift( Py::Object( other ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_rshift_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_rshift( Py::Object( other ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_and_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_and( Py::Object( other ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_xor_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_xor( Py::Object( other ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_or_handler( PyObject *self, PyObject *other ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_or( Py::Object( other ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } extern "C" PyObject *number_power_handler( PyObject *self, PyObject *x1, PyObject *x2 ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return new_reference_to( p->number_power( Py::Object( x1 ), Py::Object( x2 ) ) ); } catch( Py::Exception &) { return NULL; // indicate error } } // Buffer extern "C" Py_ssize_t buffer_getreadbuffer_handler( PyObject *self, Py_ssize_t index, void **pp ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->buffer_getreadbuffer( index, pp ); } catch( Py::Exception &) { return -1; // indicate error } } extern "C" Py_ssize_t buffer_getwritebuffer_handler( PyObject *self, Py_ssize_t index, void **pp ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->buffer_getwritebuffer( index, pp ); } catch( Py::Exception &) { return -1; // indicate error } } extern "C" Py_ssize_t buffer_getsegcount_handler( PyObject *self, Py_ssize_t *count ) { try { PythonExtensionBase *p = getPythonExtensionBase( self ); return p->buffer_getsegcount( count ); } catch( Py::Exception &) { return -1; // indicate error } } //================================================================================ // // Implementation of PythonExtensionBase // //================================================================================ #define missing_method( method ) \ throw RuntimeError( "Extension object missing implement of " #method ); PythonExtensionBase::PythonExtensionBase() { ob_refcnt = 0; } PythonExtensionBase::~PythonExtensionBase() { assert( ob_refcnt == 0 ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name ) { Py::TupleN args; return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1 ) { Py::TupleN args( arg1 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2 ) { Py::TupleN args( arg1, arg2 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3 ) { Py::TupleN args( arg1, arg2, arg3 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3, const Py::Object &arg4 ) { Py::TupleN args( arg1, arg2, arg3, arg4 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3, const Py::Object &arg4, const Py::Object &arg5 ) { Py::TupleN args( arg1, arg2, arg3, arg4, arg5 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3, const Py::Object &arg4, const Py::Object &arg5, const Py::Object &arg6 ) { Py::TupleN args( arg1, arg2, arg3, arg4, arg5, arg6 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3, const Py::Object &arg4, const Py::Object &arg5, const Py::Object &arg6, const Py::Object &arg7 ) { Py::TupleN args( arg1, arg2, arg3, arg4, arg5, arg6, arg7 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3, const Py::Object &arg4, const Py::Object &arg5, const Py::Object &arg6, const Py::Object &arg7, const Py::Object &arg8 ) { Py::TupleN args( arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 ); return self().callMemberFunction( fn_name, args ); } Py::Object PythonExtensionBase::callOnSelf( const std::string &fn_name, const Py::Object &arg1, const Py::Object &arg2, const Py::Object &arg3, const Py::Object &arg4, const Py::Object &arg5, const Py::Object &arg6, const Py::Object &arg7, const Py::Object &arg8, const Py::Object &arg9 ) { Py::TupleN args( arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9 ); return self().callMemberFunction( fn_name, args ); } void PythonExtensionBase::reinit( Tuple &args, Dict &kwds ) { throw RuntimeError( "Must not call __init__ twice on this class" ); } Py::Object PythonExtensionBase::genericGetAttro( const Py::String &name ) { return asObject( PyObject_GenericGetAttr( selfPtr(), name.ptr() ) ); } int PythonExtensionBase::genericSetAttro( const Py::String &name, const Py::Object &value ) { return PyObject_GenericSetAttr( selfPtr(), name.ptr(), value.ptr() ); } int PythonExtensionBase::print( FILE *, int ) { missing_method( print ); return -1; } Py::Object PythonExtensionBase::getattr( const char * ) { missing_method( getattr ); return Py::None(); } int PythonExtensionBase::setattr( const char *, const Py::Object &) { missing_method( setattr ); return -1; } Py::Object PythonExtensionBase::getattro( const Py::String &name ) { return genericGetAttro( name ); } int PythonExtensionBase::setattro( const Py::String &name, const Py::Object &value ) { return genericSetAttro( name, value ); } int PythonExtensionBase::compare( const Py::Object &) { missing_method( compare ); return -1; } #if PY_MAJOR_VERSION > 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 1) Py::Object PythonExtensionBase::rich_compare( const Py::Object &, int op ) { missing_method( rich_compare ); return Py::None(); } #endif Py::Object PythonExtensionBase::repr() { missing_method( repr ); return Py::None(); } Py::Object PythonExtensionBase::str() { missing_method( str ); return Py::None(); } long PythonExtensionBase::hash() { missing_method( hash ); return -1; } Py::Object PythonExtensionBase::call( const Py::Object &, const Py::Object &) { missing_method( call ); return Py::None(); } Py::Object PythonExtensionBase::iter() { missing_method( iter ); return Py::None(); } PyObject *PythonExtensionBase::iternext() { missing_method( iternext ); return NULL; } // Sequence methods int PythonExtensionBase::sequence_length() { missing_method( sequence_length ); return -1; } Py::Object PythonExtensionBase::sequence_concat( const Py::Object &) { missing_method( sequence_concat ); return Py::None(); } Py::Object PythonExtensionBase::sequence_repeat( Py_ssize_t ) { missing_method( sequence_repeat ); return Py::None(); } Py::Object PythonExtensionBase::sequence_item( Py_ssize_t ) { missing_method( sequence_item ); return Py::None(); } Py::Object PythonExtensionBase::sequence_slice( Py_ssize_t, Py_ssize_t ) { missing_method( sequence_slice ); return Py::None(); } int PythonExtensionBase::sequence_ass_item( Py_ssize_t, const Py::Object &) { missing_method( sequence_ass_item ); return -1; } int PythonExtensionBase::sequence_ass_slice( Py_ssize_t, Py_ssize_t, const Py::Object &) { missing_method( sequence_ass_slice ); return -1; } // Mapping int PythonExtensionBase::mapping_length() { missing_method( mapping_length ); return -1; } Py::Object PythonExtensionBase::mapping_subscript( const Py::Object &) { missing_method( mapping_subscript ); return Py::None(); } int PythonExtensionBase::mapping_ass_subscript( const Py::Object &, const Py::Object &) { missing_method( mapping_ass_subscript ); return -1; } // Number int PythonExtensionBase::number_nonzero() { missing_method( number_nonzero ); return -1; } Py::Object PythonExtensionBase::number_negative() { missing_method( number_negative ); return Py::None(); } Py::Object PythonExtensionBase::number_positive() { missing_method( number_positive ); return Py::None(); } Py::Object PythonExtensionBase::number_absolute() { missing_method( number_absolute ); return Py::None(); } Py::Object PythonExtensionBase::number_invert() { missing_method( number_invert ); return Py::None(); } Py::Object PythonExtensionBase::number_int() { missing_method( number_int ); return Py::None(); } Py::Object PythonExtensionBase::number_float() { missing_method( number_float ); return Py::None(); } Py::Object PythonExtensionBase::number_long() { missing_method( number_long ); return Py::None(); } Py::Object PythonExtensionBase::number_oct() { missing_method( number_oct ); return Py::None(); } Py::Object PythonExtensionBase::number_hex() { missing_method( number_hex ); return Py::None(); } Py::Object PythonExtensionBase::number_add( const Py::Object &) { missing_method( number_add ); return Py::None(); } Py::Object PythonExtensionBase::number_subtract( const Py::Object &) { missing_method( number_subtract ); return Py::None(); } Py::Object PythonExtensionBase::number_multiply( const Py::Object &) { missing_method( number_multiply ); return Py::None(); } Py::Object PythonExtensionBase::number_divide( const Py::Object &) { missing_method( number_divide ); return Py::None(); } Py::Object PythonExtensionBase::number_remainder( const Py::Object &) { missing_method( number_remainder ); return Py::None(); } Py::Object PythonExtensionBase::number_divmod( const Py::Object &) { missing_method( number_divmod ); return Py::None(); } Py::Object PythonExtensionBase::number_lshift( const Py::Object &) { missing_method( number_lshift ); return Py::None(); } Py::Object PythonExtensionBase::number_rshift( const Py::Object &) { missing_method( number_rshift ); return Py::None(); } Py::Object PythonExtensionBase::number_and( const Py::Object &) { missing_method( number_and ); return Py::None(); } Py::Object PythonExtensionBase::number_xor( const Py::Object &) { missing_method( number_xor ); return Py::None(); } Py::Object PythonExtensionBase::number_or( const Py::Object &) { missing_method( number_or ); return Py::None(); } Py::Object PythonExtensionBase::number_power( const Py::Object &, const Py::Object &) { missing_method( number_power ); return Py::None(); } // Buffer Py_ssize_t PythonExtensionBase::buffer_getreadbuffer( Py_ssize_t, void** ) { missing_method( buffer_getreadbuffer ); return -1; } Py_ssize_t PythonExtensionBase::buffer_getwritebuffer( Py_ssize_t, void** ) { missing_method( buffer_getwritebuffer ); return -1; } Py_ssize_t PythonExtensionBase::buffer_getsegcount( Py_ssize_t* ) { missing_method( buffer_getsegcount ); return -1; } //-------------------------------------------------------------------------------- // // Method call handlers for // PythonExtensionBase // ExtensionModuleBase // //-------------------------------------------------------------------------------- extern "C" PyObject *method_keyword_call_handler( PyObject *_self_and_name_tuple, PyObject *_args, PyObject *_keywords ) { try { Tuple self_and_name_tuple( _self_and_name_tuple ); PyObject *self_in_cobject = self_and_name_tuple[0].ptr(); void *self_as_void = PyCObject_AsVoidPtr( self_in_cobject ); if( self_as_void == NULL ) return NULL; ExtensionModuleBase *self = static_cast( self_as_void ); Tuple args( _args ); if( _keywords == NULL ) { Dict keywords; // pass an empty dict Object result ( self->invoke_method_keyword ( PyCObject_AsVoidPtr( self_and_name_tuple[1].ptr() ), args, keywords ) ); return new_reference_to( result.ptr() ); } else { Dict keywords( _keywords ); // make dict Object result ( self->invoke_method_keyword ( PyCObject_AsVoidPtr( self_and_name_tuple[1].ptr() ), args, keywords ) ); return new_reference_to( result.ptr() ); } } catch( Exception & ) { return 0; } } extern "C" PyObject *method_varargs_call_handler( PyObject *_self_and_name_tuple, PyObject *_args ) { try { Tuple self_and_name_tuple( _self_and_name_tuple ); PyObject *self_in_cobject = self_and_name_tuple[0].ptr(); void *self_as_void = PyCObject_AsVoidPtr( self_in_cobject ); if( self_as_void == NULL ) return NULL; ExtensionModuleBase *self = static_cast( self_as_void ); Tuple args( _args ); Object result ( self->invoke_method_varargs ( PyCObject_AsVoidPtr( self_and_name_tuple[1].ptr() ), args ) ); return new_reference_to( result.ptr() ); } catch( Exception & ) { return 0; } } extern "C" void do_not_dealloc( void * ) {} //-------------------------------------------------------------------------------- // // ExtensionExceptionType // //-------------------------------------------------------------------------------- ExtensionExceptionType::ExtensionExceptionType() : Py::Object() { } void ExtensionExceptionType::init( ExtensionModuleBase &module, const std::string& name ) { std::string module_name( module.fullName() ); module_name += "."; module_name += name; set( PyErr_NewException( const_cast( module_name.c_str() ), NULL, NULL ), true ); } void ExtensionExceptionType::init( ExtensionModuleBase &module, const std::string& name, ExtensionExceptionType &parent) { std::string module_name( module.fullName() ); module_name += "."; module_name += name; set( PyErr_NewException( const_cast( module_name.c_str() ), parent.ptr(), NULL ), true ); } ExtensionExceptionType::~ExtensionExceptionType() { } Exception::Exception( ExtensionExceptionType &exception, const std::string& reason ) { PyErr_SetString( exception.ptr(), reason.c_str() ); } Exception::Exception( ExtensionExceptionType &exception, Object &reason ) { PyErr_SetObject( exception.ptr(), reason.ptr() ); } Exception::Exception( PyObject *exception, Object &reason ) { PyErr_SetObject( exception, reason.ptr() ); } } // end of namespace Py pysvn-1.7.8/Import/pycxx-6.2.4/Src/Python2/cxxextensions.c000644 000771 000771 00000004371 11146616710 023474 0ustar00barrybarry000000 000000 /*---------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //---------------------------------------------------------------------------*/ #include "CXX/WrapPython.h" #ifdef __cplusplus extern "C" { #endif PyObject py_object_initializer = {PyObject_HEAD_INIT(0)}; #ifdef __cplusplus } #endif pysvn-1.7.8/Import/pycxx-6.2.4/Src/Python2/cxxsupport.cxx000644 000771 000771 00000012122 11146616710 023362 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #include "CXX/Objects.hxx" namespace Py { Py_UNICODE unicode_null_string[1] = { 0 }; Type Object::type () const { return Type (PyObject_Type (p), true); } String Object::str () const { return String (PyObject_Str (p), true); } String Object::repr () const { return String (PyObject_Repr (p), true); } std::string Object::as_string() const { return static_cast(str()); } List Object::dir () const { return List (PyObject_Dir (p), true); } bool Object::isType (const Type& t) const { return type ().ptr() == t.ptr(); } Char::operator String() const { return String(ptr()); } // TMM: non-member operaters for iterators - see above // I've also made a bug fix in respect to the cxx code // (dereffed the left.seq and right.seq comparison) bool operator==(const Sequence::iterator& left, const Sequence::iterator& right) { return left.eql( right ); } bool operator!=(const Sequence::iterator& left, const Sequence::iterator& right) { return left.neq( right ); } bool operator< (const Sequence::iterator& left, const Sequence::iterator& right) { return left.lss( right ); } bool operator> (const Sequence::iterator& left, const Sequence::iterator& right) { return left.gtr( right ); } bool operator<=(const Sequence::iterator& left, const Sequence::iterator& right) { return left.leq( right ); } bool operator>=(const Sequence::iterator& left, const Sequence::iterator& right) { return left.geq( right ); } // now for const_iterator bool operator==(const Sequence::const_iterator& left, const Sequence::const_iterator& right) { return left.eql( right ); } bool operator!=(const Sequence::const_iterator& left, const Sequence::const_iterator& right) { return left.neq( right ); } bool operator< (const Sequence::const_iterator& left, const Sequence::const_iterator& right) { return left.lss( right ); } bool operator> (const Sequence::const_iterator& left, const Sequence::const_iterator& right) { return left.gtr( right ); } bool operator<=(const Sequence::const_iterator& left, const Sequence::const_iterator& right) { return left.leq( right ); } bool operator>=(const Sequence::const_iterator& left, const Sequence::const_iterator& right) { return left.geq( right ); } // For mappings: bool operator==(const Mapping::iterator& left, const Mapping::iterator& right) { return left.eql( right ); } bool operator!=(const Mapping::iterator& left, const Mapping::iterator& right) { return left.neq( right ); } // now for const_iterator bool operator==(const Mapping::const_iterator& left, const Mapping::const_iterator& right) { return left.eql( right ); } bool operator!=(const Mapping::const_iterator& left, const Mapping::const_iterator& right) { return left.neq( right ); } // TMM: 31May'01 - Added the #ifndef so I can exclude iostreams. #ifndef CXX_NO_IOSTREAMS // output std::ostream& operator<< (std::ostream& os, const Object& ob) { return (os << static_cast(ob.str())); } #endif } // Py pysvn-1.7.8/Import/pycxx-6.2.4/SourceForge/deploy.sh000755 000771 000771 00000000774 11230647177 022402 0ustar00barrybarry000000 000000 #!/bin/sh scp index.html barry-scott,cxx@web.sourceforge.net:/home/groups/c/cx/cxx/htdocs/ scp ../README.html barry-scott,cxx@web.sourceforge.net:/home/groups/c/cx/cxx/htdocs/ scp ../Doc/Python2/PyCXX.html barry-scott,cxx@web.sourceforge.net:/home/groups/c/cx/cxx/htdocs/PyCXX-Python2.html scp ../Doc/Python3/style.css barry-scott,cxx@web.sourceforge.net:/home/groups/c/cx/cxx/htdocs/style.css scp ../Doc/Python3/PyCXX.html barry-scott,cxx@web.sourceforge.net:/home/groups/c/cx/cxx/htdocs/PyCXX-Python3.html pysvn-1.7.8/Import/pycxx-6.2.4/SourceForge/index.html000755 000771 000771 00000013623 11523514532 022535 0ustar00barrybarry000000 000000 PyCXX: Write Python Extensions in C++
PyCXX: Write Python Extensions in C++

Barry Scott, barry@barrys-emacs.org

The CXX Project Page at SourceForge Home gives you access to the releases, the Subversion repository, and more.

PyCXX is designed to make it easier to extend Python with C++

CXX/Objects is a set of C++ facilities to make it easier to write Python extensions. The chief way in which PyCXX makes it easier to write Python extensions is that it greatly increases the probability that your program will not make a reference-counting error and will not have to continually check error returns from the Python C API. CXX/Objects integrates Python with C++ in these ways:

  • C++ exception handling is relied on to detect errors and clean up. In a complicated function this is often a tremendous problem when writing in C. With PyCXX, we let the compiler keep track of what objects need to be dereferenced when an error occurs.
  • The Standard Template Library (STL) and its many algorithms plug and play with Python containers such as lists and tuples.
  • The optional CXX/Extensions facility allows you to replace the clumsy C tables with objects and method calls that define your modules and extension objects.

PyCXX documentation is split into Python 3 and Python 2 versions. The Python 3 documentation is the most accurate.

Latest PyCXX README file.


Version 6.2.3 (6-Feb-2011)

Fix memory leak in string encode and decode functions

Fix indirect python loading on windows - Bool_type was missing


Version 6.2.2 (26-Dec-2010)

Fix problem compiling against Python 3.1.3


Version 6.2.1 (15-Aug-2010)

Add support for NotImplementedError

Remove String() and Byte() c'tors that are not allowed by ISO C++ and where ambigous


Version 6.2.0 (9-May-2010)

Fix problems with new style classes.

Replace all example makefile and project files with setup_makefile.py script.

Add APIs to make calling python functions easier. See TupleN(), callOnSelf(), self()


Version 6.1.1 (26-Sep-2009)

Supports Python 3 starting at Python 3.1 and Python 2

Code clean up to fix compiler warnings reported by gcc 4.2.1 on Mac OS X when building for Python 3.


Version 6.1.0 (19-Jul-2009)

Supports Python 3 and Python 2

This release replaces 5.5.0 and 6.0.0

Speed of method calling has been improved.


Version 6.0.0 (31-Jan-2009)

Supports Python 3 only


Version 5.5.0 (31-Jan-2009)

Supports Python 2 only


Version 5.4.2 (11-Oct-2008)

Add support for rich compare.

Add the simplest code for a module with a single function and a single class (Demo/simple.cxx)

Fix long standing bugs with Dict::iterator


Version 5.4.1 (28-Jun-2008)

Add Boolean type from Vivian De Smedt.

Patch from Dmitry Kostjuchenko to which improves PyCXX method's calling speed/performance by almost 2 times.

More PY_LONG_LONG support.

No longer allow creation of Py::Int from PY_LONG_LONG as long long cannot fit. Use Py::Long.

Py:Dict can now be constructed from a Py::Object.


Version 5.4.0 (20-Jan-2007)

PyCXX has a new BSD license to make it open source compatible. Many thanks to Sebastian Sauer for bring this matter to our attention and to Paul Dubios for working with the LLNL people to get the license changed.

Fix compilation issues with GCC 4.1 found on FC6.

Fix compilation issues caused by problems in IRIX header files.

Add PY_LONG_LONG support from patch contributed by Dmitry Kostjuchenko.

Version 5.3.6 (21-Oct-2006)

Add support for Python 2.5

Add support for PY_LONG_LONG to Py::Int()

Version 5.3.5 (2-Oct-2005)

More changes to keep GCC 4.0 happy - no warning should be report

Version 5.3.4 (29-Aug-2005)

Add interator support - thanks to Helmut Jarausch - see pycxx_iter demo

Allow an extension to be part of a python package

Allow creation of Exception hierachies

Fix problem compiling with GCC 2.9X

Fix uninitialise memory problem

Work around compile problems with the example and GCC 4.0.

Version 5.3.3 and 5.3.2

No details recorded

PyCXX V5.3.1

Added fixes to support problems reported against GCC4 builds and .NET 2003 builds

Download PyCXX 5.3.1 from SourceForge.

PyCXX V5.3.0

I've added Unicode string support to PyCXX and fixed a number of reported bugs.

See the README and documentation for details.

Download PyCXX 5.3.0 from SourceForge.

-- BArry Scott, October 2004


PyCXX V5.2.0

After a long gap I have updated PyCXX (the name I prefer for CXX) to fix a number of bugs and add a small number of features.

I'm using the development of pysvn to drive the need for fixes and features in PyCXX.

-- Barry Scott, November 2003

pysvn-1.7.8/Import/pycxx-6.2.4/RegressionTests/mem-leak.py000644 000771 000771 00000001161 11523511652 023511 0ustar00barrybarry000000 000000 import simple import time import sys import os def report( title ): print( title ) os.system( 'ps uww -p %d' % (os.getpid(),) ) report( 'Start:' ) if sys.argv[1] == 'encode': for x in range( 1000000 ): y = '%6d-Hello-%6d' % (x, x) else: for x in range( 1000000 ): y = ('%6d-Hello-%6d' % (x, x)).encode( 'utf-8' ) report( 'InitDone:' ) if sys.argv[1] == 'encode': for x in range( 1000000 ): y = simple.encode_test( '%6d-Hello-%6d' % (x, x) ) else: for x in range( 1000000 ): y = simple.decode_test( ('%6d-Hello-%6d' % (x, x)).encode( 'utf-8' ) ) report( 'Done:' ) pysvn-1.7.8/Import/pycxx-6.2.4/Lib/__init__.py000644 000771 000771 00000004405 10547727605 021143 0ustar00barrybarry000000 000000 #----------------------------------------------------------------------------- # # Copyright (c) 1998 - 2007, The Regents of the University of California # Produced at the Lawrence Livermore National Laboratory # All rights reserved. # # This file is part of PyCXX. For details,see http:#cxx.sourceforge.net/. The # full copyright notice is contained in the file COPYRIGHT located at the root # of the PyCXX distribution. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # - Redistributions of source code must retain the above copyright notice, # this list of conditions and the disclaimer below. # - Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the disclaimer (as noted below) in the # documentation and/or materials provided with the distribution. # - Neither the name of the UC/LLNL nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF # CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. # #----------------------------------------------------------------------------- print """CXX is installed. The support files you need are in the PYTHON/etc/CXX directory. The include files are in the distutils include path already. Just refer to them as "CXX/CXX_Objects.h", etc. """ pysvn-1.7.8/Import/pycxx-6.2.4/Doc/Python2/000755 000771 000771 00000000000 11724122670 020356 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/Doc/Python3/000755 000771 000771 00000000000 11724122670 020357 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/Doc/Python3/make_contents.py000644 000771 000771 00000002434 11310763376 023573 0ustar00barrybarry000000 000000 all_lines = open( 'PyCXX.html' ).readlines() all_contents = [] for line in all_lines: if( line.startswith( '

' ) nested = False indent = '' cls = 'contents_h1' for line in all_contents: tag = line[0:len('

')] contents = line[len('

PyCXX: Writing Python Extensions in C++

Writing Python Extensions in C++ with PyCXX

Contents

Acknowledgments

Thank you to Geoffrey Furnish for patiently teaching me the finer points of C++ and its template facility, and his critique of PyCXX in particular. With version 4 I welcome Barry Scott as co-author. -- Paul Dubois

Paul is no longer contributing to PyCXX. Thanks for all your great work on PyCXX Paul. -- Barry Scott.

Overview

PyCXX is designed to make it easier to extend Python with C++

Use PyCXX Version 5 with Python 2 and PyCXX Version 6 with Python 3.

PyCXX is a set of C++ facilities to make it easier to write Python extensions. The chief way in which PyCXX makes it easier to write Python extensions is that it greatly increases the probability that your program will not make a reference-counting error and will not have to continually check error returns from the Python C API. PyCXX integrates Python with C++ in these ways:

  • C++ exception handling is relied on to detect errors and clean up. In a complicated function this is often a tremendous problem when writing in C. With PyCXX, we let the compiler keep track of what objects need to be dereferenced when an error occurs.
  • The Standard Template Library (STL) and its many algorithms plug and play with Python containers such as lists and tuples.
  • The optional CXX/Extensions.hxx facility allows you to replace the clumsy C tables with objects and method calls that define your modules and extension objects.

Download and Installation

Download PyCXX from http://sourceforge.net/projects/cxx/.

The distribution layout is:

DirectoryDescription
.Makefile for Unix and Windows, Release documentation
./CXXHeader files
./SrcSource files
./DocDocumentation
./DemoTesting and Demonstartion files

To use PyCXX you use its include files and add its source routines to your module.

Installation:

  • Install the PyCXX files into a directory of your choice. For example:
    Windows: C:\PyCXX
    Unix: /usr/local/PyCXX
  • Tell your compiler where the PyCXX header files are:
    Windows: cl /I=C:\PyCXX ...
    Unix: g++ -I/usr/local/PyCXX ...
  • Include PyCXX headers files in your code using the CXX prefix:
    #include "CXX/Objects.hxx"

The header file CXX/config.h may need to be adjusted for the compiler you use. As of this writing, only a fairly obscure reference to part of the standard library needs this adjustment. Unlike prior releases, PyCXX now assumes namespace support and a standard C++ library.

Example code

The Demo directory of the distribution contains examples of how to use many of the facilities in PyCXX.

In the top level folder of the PyCXX distributions are a number of makefiles that can be used to build and run the example code.

For example on Linux example_linux_py30.mak will build and run the example code.

make -f example_linux_py30.mak clean test
SourceDescription
Demo/test_simple.py, Demo/simple.cxxThe simplest code needed to create a module and classes in C++.
Demo/test_example.py, Demo/example.cxxThe original PyCXX example code. It is now the main test suite for PyCXX.
Demo/range.hxx, Demo/range.cxxImpliments the range object use by example.cxx.

PyCXX - Supporting Python 2 and Python 3

It is possible to have common code that can be compiled to work with Python 2 or Python 3.

Use PyCXX V5.5 with PYCXX_PYTHON_2TO3 defined to support Python 2.

Use PyCXX V6.0 with PYCXX_PYTHON_2TO3 defined to support Python 3.

The changes from Python 2 to Python 3 that require code changes are:

  • string is unicode only in Python 3 - Py::String API changed to match python 3 usage
  • byte is for byte date in Python 3 - Py::Bytes added to PyCXX
  • int has been removed - Py::Int has been removed from PyCXX

This means that you will need to:

  • Replace Py::Nothing with Py::None - required
  • Replace Py::Int with Py::Long - recommended
  • Replace Py::LongLong with Py::Long -recommended
  • Replace as_std_string() with as_std_string( "encoding" ) or as_std_string( NULL ) - required
  • Replace Py::String that holds non unicode data with Py::Bytes - required

Because the Py::String and Py::Byte implementations in PyCXX V5.5 allow abuses of the API it is best to test your code against PyCXX V6.0 to ensure correct API use then test against PyCXX V5.5.

Use of namespaces

All PyCXX assets are in namespace "Py". You need to include the Py:: prefix when referring to them, or include the statement:

using namespace Py;

Wrapper for standard objects: <CXX/Objects.hxx>

Header file CXX/Objects.hxx requires adding file Src/cxxsupport.cxx to your module sources. CXX/Objects.hxx provides a set of wrapper classes that allow you access to most of the Python C API using a C++ notation that closely resembles Python. For example, this Python:

d = {}
d[ "a" ] = 1
d[ "b" ] = 2
alist = d.keys()
print alist

Can be written in C++:

Py::Dict d;
Py::List alist;
d[ "a" ] = Py::Long( 1 );
d[ "b" ] = Py::Long( 2 );
alist = d.keys();
std::cout << alist << std::endl;

You can optionally use the CXX/Extensions.hxx facility described later to define Python extension modules and extension objects.

We avoid programming with Python object pointers

The essential idea is that we avoid, as much as possible, programming with pointers to Python objects, that is, variables of type PyObject *. Instead, we use instances of a family of C++ classes that represent the usual Python objects. This family is easily extendible to include new kinds of Python objects.

For example, consider the case in which we wish to write a method, taking a single integer argument, that will create a Python dict and insert into it that the integer plus one under the key value. In C we might do that as follows:

static PyObject *mymodule_addvalue( PyObject *self, PyObject *args )
{
    PyObject *d;
    PyObject *f;
    int k;
    PyArgs_ParseTuple( args, "i", &k );
    d = PyDict_New();
    if( !d )
        return NULL;

    f = PyInt_NEW( k+1 );
    if( !f )
    {
        Py_DECREF( d ); /* have to get rid of d first */
        return NULL;
    }
    if( PyDict_SetItemString( d, "value", f ) == -1 )
    {
        Py_DECREF( f );
        Py_DECREF( d );
        return NULL;
    }

    return d;
}

If you have written a significant Python extension, this tedium looks all too familiar. The vast bulk of the coding is error checking and cleanup. Now compare the same thing written in C++ using CXX/Objects.hxx. The things with Python-like names ( Long, Dict, Tuple ) are from CXX/Objects.hxx.

static PyObject *mymodule_addvalue( PyObject *self, PyObject *pargs )
{ 
    try
    {
        Tuple args( pargs ); 
        args.verify_length( 1 ); 

        Dict d; 
        Long k = args[0]; 
        d["value"] = k + 1;

        return new_reference_to( d ); 
    } 
    catch( const PyException & )
    { 
        return NULL;
    }
}

If there are not the right number of arguments or the argument is not an integer, an exception is thrown. In this case we choose to catch it and convert it into a Python exception. The C++ exception handling mechanism takes care all the cleanup.

Note that the creation of the Long k got the first argument and verified that it is an Long.

Just to peek ahead, if you wrote this method in an ExtensionModule-derived module of your own, it would be a method and it could be written even more simply:

Object addvalue( Object & self, const Tuple & args )
{
    args.verify_length( 1 );
    Dict d;
    Long k = args[0];
    d["value"] = k + 1;
    return d;
}

The basic concept is to wrap Python pointers

The basic concept of CXX/Objects.hxx is to create a wrapper around each PyObject * so that the reference counting can be done automatically, thus eliminating the most frequent source of errors. In addition, we can then add methods and operators so that Python objects can be manipulated in C++ much like you would in Python.

Each Object contains a PyObject * to which it owns a reference. When an Object is destroyed, it releases its ownership on the pointer. Since C++ calls the destructors on objects that are about to go out of scope, we are guaranteed that we will keep the reference counts right even if we unexpectedly leave a routine with an exception.

As a matter of philosophy, CXX/Objects.hxx prevents the creation of instances of its classes unless the instance will be a valid instance of its class. When an attempt is made to create an object that will not be valid, an exception is thrown.

Class Object represents the most general kind of Python object. The rest of the classes that represent Python objects inherit from it.

Object
Type
Float
Long
Complex
Char
Sequence -> SeqBase<T>
    String
    Tuple
    List
Mapping -> MapBase<T>
    Dict
Callable
Module

There are several constructors for each of these classes. For example, you can create an Long from an integer as in

Long s( 3 )

However, you can also create an instance of one of these classes using any PyObject * or another Object. If the corresponding Python object does not actually have the type desired, an exception is thrown. This is accomplished as follows. Class Object defines a virtual function accepts:

virtual bool accepts( PyObject *p )

The base class version of accepts returns true for any pointer p except 0. This means we can create an Object using any PyObject *, or from any other Object. However, if we attempt to create an Long from a PyObject *, the overridding version of accepts in class Long will only accept pointers that correspond to Python ints. Therefore if we have a Tuple t and we wish to get the first element and be sure it is an Long, we do

Long first_element = t[0]

This will not only accomplish the goal of extracting the first element of the Tuple t, but it will ensure that the result is an Long. If not, an exception is thrown. The exception mechanism is discussed later.

global methods

global methods
Returns Name( signature ) Comment
ObjectasObject( PyObject *p )Convert an owned Python pointer into a PyCXX Object
PyObject *Null()return (PyObject *)NULL
PyObject *new_reference_to( PyObject *p )Increment the reference count of p
PyObject *new_reference_to( const Object &g )Increment the reference count of g
ObjectNone()Return the Python None opject
ObjectTrue()Return the Python True opject
ObjectFalse()Return the Python False opject

Comparisons

PyCXX implements a full set of comparison operators (==, !=, >=, >, < <=) for the PyCXX objects.

BetweenAnd
ObjectObject
LongLong
Longlong
Longint
LongPY_LONG_LONG
FloatFloat
Floatdouble
SeqBasea<T>::iteratorSeqBase<T>::iterator
SeqBase<T>::const_iteratorSeqBase<T>::const_iterator
Sequence::iteratorSequence::iterator
Sequence::const_iteratorSequence::const_iterator
MapBase<T>::iteratorMapBase<T>::iterator
MapBase<T>::const_iteratorMapBase<T>::const_iterator
Mapping::iteratorMapping::iterator
Mapping::const_iteratorMapping::const_iterator

Class Object

Class Object serves as the base class for the other classes. Its default constructor constructs a Py_None, the unique object of Python type None. The interface to Object consists of a large number of methods corresponding to the operations that are defined for every Python object. In each case, the methods throw an exception if anything goes wrong.

There is no method corresponding to PyObject_SetItem with an arbitrary Python object as a key. Instead, create an instance of a more specific child of Object and use the appropriate facilities.

The comparison operators use the Python comparison function to compare values. The method is is available to test for absolute identity.

A conversion to standard library string type std::string is supplied using method as_string. Stream output of PyCXX Object instances uses this conversion, which in turn uses the Python object's str() representation.

All the numeric operators are defined on all possible combinations of Object, long, and double. These use the corresponding Python operators, and should the operation fail for some reason, an exception is thrown.

Dealing with pointers returned by the Python C API

Often, PyObject * pointers are acquired from some function, particularly functions in the Python C API. If you wish to make an object from the pointer returned by such a function, you need to know if the function returns you an owned or unowned reference. Unowned references are unusual but there are some cases where unowned references are returned.

Usually, Object and its children acquire a new reference when constructed from a PyObject *. This is usually not the right behavior if the reference comes from one of the Python C API calls.

If p is an owned reference, you can add the boolean true as an extra argument in the creation routine, Object( p, true ), or use the function asObject( p ) which returns an Object created using the owned reference. For example, the routine PyString_FromString returns an owned reference to a Python string object. You could write:

Object w = asObject( PyString_FromString( "my string" ) );

or using the constructor,

Object w( PyString_FromString( "my string" ), true );

In fact, you would never do this, since PyCXX has a class String and you can just say:

String w( "my string" );

Indeed, since most of the Python C API is similarly embodied in Object and its descendents, you probably will not use asObject all that often.

Class Object
Returns Name( signature ) Comment
Basic Methods
explicit Object( PyObject *pyob=Py_None, bool owned=false ) Construct from pointer.
explicit Object( const Object &ob ) Copycons; acquires an owned reference.
Object & operator=( const Object &rhs ) Acquires an owned reference.
Object & operator=( PyObject *rhsp ) Acquires an owned reference.
virtual ~Object() Releases the reference.
void increment_reference_count() Explicitly increment the count
void decrement_reference_count() Explicitly decrement count but not to zero
PyObject* operator*() const Lends the pointer
PyObject* ptr() const Lends the pointer
virtual bool accepts( PyObject *pyob ) const Would assignment of pyob to this object succeed?
std::string as_string() const str() representation
Python API Interface
int reference_count() const reference count
Type type() const associated type object
String str() const str() representation
String repr() const repr() representation
bool hasAttr( const std::string &s ) const hasattr( this, s )
Object getAttr( const std::string &s ) const getattr( this, s )
Object getItem( const Object &key ) const getitem( this, key )
long hashValue() const hash( this )
void setAttr( const std::string &s,
const Object &value )
this.s = value
void delAttr( const std::string &s ) del this.s
void delItem( const Object &key ) del this[key]
bool isCallable() const does this have callable behavior?
bool isList() const is this a Python list?
bool isMapping() const does this have mapping behaviors?
bool isNumeric() const does this have numeric behaviors?
bool isSequence() const does this have sequence behaviors?
bool isTrue() const is this true in the Python sense?
bool isType( const Type &t ) const is type( this ) == t?
bool isTuple() const is this a Python tuple?
bool isString() const is this a Python string?
bool isUnicode() const is this a Python Unicode string?
bool isDict() const is this a Python dictionary?
Comparison Operators
bool is( PyObject *pother ) const test for identity
bool is( const Object &other ) const test for identity
bool operator==( const Object &o2 ) const Comparisons use Python rich compare
bool operator!=( const Object &o2 ) const Comparisons use Python rich compare
bool operator>=( const Object &o2 ) const Comparisons use Python rich compare
bool operator<=( const Object &o2 ) const Comparisons use Python rich compare
bool operator<( const Object &o2 ) const Comparisons use Python rich compare
bool operator>( const Object &o2 ) const Comparisons use Python rich compare

The Basic Types

Corresponding to each of the basic Python types is a class that inherits from Object. Here are the interfaces for those types. Each of them inherits from Object and therefore has all of the inherited methods listed for Object. Where a virtual function is overridden in a class, the name is underlined.

Class Type

Class Type corresponds to Python type objects. There is no default constructor.

class Type
Returns Name and Signature Comments
explicit Type( PyObject *pyob, bool owned = false ) Constructor
explicit Type( const Object &ob ) Constructor
explicit Type( const Type &t ) Copycons
Type& operator=( const Object &rhs ) Assignment
Type& operator=( PyObject *rhsp ) Assignment
virtual bool accepts( PyObject *pyob ) const Uses PyType_Check

Class Long

Class Long, derived publically from Object, corresponds to Python type long. In Python, a long is an integer type of unlimited size. Implicit conversions to both double and long are provided, although the latter may of course fail if the number is actually too big. All constructors are explicit. The default constructor produces a Python long zero.

class Long
Returns Name and Signature Comments
explicit Long( PyObject *pyob, bool owned = false ) Constructor
explicit Long( const Long &ob ) Constructor
explicit Long( long v = 0L ) Construct from long
explicit Long( int v ) Contruct from int
explicit Long( const Object &ob ) Copycons
Long & operator=( const Object &rhs ) Assignment
Long & operator=( PyObject *rhsp ) Assignment
virtual bool accepts( PyObject *pyob ) const Based on PyLong_Check
double operator double() const Implicit conversion to double
long operator long() const Implicit conversion to long
Long & operator=( int v ) Assign from int
Long & operator=( long v ) Assign from long

Class Float

Class Float corresponds to Python floats, which in turn correspond to C double. The default constructor produces the Python float 0.0.

class Float
Returns Name and Signature Comments
explicit Float( PyObject *pyob, bool owned = false ) Constructor
Float( const Float &f )   Construct from float
explicit Float( double v=0.0 ) Construct from double
explicit Float( const Object &ob ) Copycons
Float& operator=( const Object &rhs ) Assignment
Float& operator=( PyObject *rhsp ) Assignment
virtual bool accepts( PyObject *pyob ) const Based on PyFloat_Check
double operator double() const Implicit conversion to double
Float & operator=( double v ) Assign from double
Float & operator=( int v ) Assign from int
Float & operator=( long v ) Assign from long
Float & operator=( const Long &iob ) Assign from Long

Sequences

PyCXX implements a quite sophisticated wrapper class for Python sequences. While every effort has been made to disguise the sophistication, it may pop up in the form of obscure compiler error messages, so in this documentation we will first detail normal usage and then discuss what is under the hood.

The basic idea is that we would like the subscript operator [] to work properly, and to be able to use STL-style iterators and STL algorithms across the elements of the sequence.

Sequences are implemented in terms of a templated base class, SeqBase<T>. The parameter T is the answer to the question, sequence of what? For Lists, for example, T is Object, because the most specific thing we know about an element of a List is simply that it is an Object.( Class List is defined below; it is a descendent of Object that holds a pointer to a Python list ). For strings, T is Char, which is a wrapper in turn of Python strings whose length is one.

For convenience, the word Sequence is a typedef of SeqBase<Object>.

General sequences

Suppose you are writing an extension module method that expects the first argument to be any kind of Python sequence, and you wish to return the length of that sequence. You might write:

static PyObject*
my_module_seqlen( PyObject *self, PyObject *args ) {
try
    {
    Tuple t( args );       // set up a Tuple pointing to the arguments.
    if( t.length() != 1 ) 
         throw PyException( "Incorrect number of arguments to seqlen." );
    Sequence s = t[0];   // get argument and be sure it is a sequence
    return new_reference_to( Long( s.length() ) );
    }
catch( const PyException  &)
    {
    return Py_Null;
    }
}

As we will explain later, the try/catch structure converts any errors, such as the first argument not being a sequence, into a Python exception.

Subscripting

When a sequence is subscripted, the value returned is a special kind of object which serves as a proxy object. The general idea of proxy objects is discussed in Scott Meyers' book, "More Effective C++". Proxy objects are necessary because when one subscripts a sequence it is not clear whether the value is to be used or the location assigned to. Our proxy object is even more complicated than normal because a sequence reference such as s[i] is not a direct reference to the i'th object of s.

In normal use, you are not supposed to notice this magic going on behind your back. You write:

Object t;
Sequence s;
s[2] = t + s[1]

and here is what happens: s[1] returns a proxy object. Since there is no addition operator in Object that takes a proxy as an argument, the compiler decides to invoke an automatic conversion of the proxy to an Object, which returns the desired component of s. The addition takes place, and then there is an assignment operator in the proxy class created by the s[2], and that assignment operator stuffs the result into the 2 component of s.

It is possible to fool this mechanism and end up with a compiler failing to admit that a s[i] is an Object. If that happens, you can work around it by writing Object( s[i] ), which makes the desired implicit conversion, explicit.

Iterators

Each sequence class provides the following interface. The class seqref<T> is the proxy class. We omit the details of the iterator, const_iterator, and seqref<T> here. See CXX/Objects.hxx if necessary. The purpose of most of this interface is to satisfy requirements of the STL.

The SeqBase<T> Interface

SeqBase<T> inherits from Object.

class SeqBase>T<
Type Name
typedef int size_type
typedef seqref<T> reference
typedef T const_reference
typedef seqref<T>* pointer
typedef int difference_type
virtual size_type max_size() const
virtual size_type capacity() const;
virtual void swap( SeqBase<T> &c );
virtual size_type size() const;
explicit SeqBase<T>();
explicit SeqBase<T>( PyObject *pyob, bool owned = false );
explicit SeqBase<T>( const Object &ob );
SeqBase<T> & operator=( const Object &rhs );
SeqBase<T> & operator=( PyObject *rhsp );
virtual bool accepts( PyObject *pyob ) const;
size_type length() const ;
const T operator[]( size_type index ) const;
seqref<T> operator[]( size_type index );
virtual T getItem( size_type i ) const;
virtual void setItem( size_type i, const T &ob );
SeqBase<T> repeat( int count ) const;
SeqBase<T> concat( const SeqBase<T> &other ) const ;
const T front() const;
seqref<T> front();
const T back() const;
seqref<T> back();
void verify_length( size_type required_size );
void verify_length( size_type min_size, size_type max_size );
class iterator;
iterator begin();
iterator end();
class const_iterator;
const_iterator begin() const;
const_iterator end() const;

Any heir of class Object that has a sequence behavior should inherit from class SeqBase<T>, where T is specified as the type of object that represents the individual elements of the sequence. The requirements on T are that it has a constructor that takes a PyObject *as an argument, that it has a default constructor, a copy constructor, and an assignment operator. In short, any properly defined heir of Object will work.

Classes Char and String

Python strings are unusual in that they are immutable sequences of characters. However, there is no character type per se; rather, when subscripted strings return a string of length one. To simulate this, we define two classes Char and String. The Char class represents a Python string object of length one. The String class represents a Python string, and its elements make up a sequence of Char's.

The user interface for Char is limited. Unlike String, for example, it is not a sequence.

The Char interface

Char inherits from Object. Char holds a single Unicode character.

unicodestring is a typedef for std::basic_string<Py_UNICODE>

class Char
Type Name
explicit Char( PyObject *pyob, bool owned = false )
Char( const Object &ob )
Char( int v )
Char( Py_UNICODE v )
Char( const unicodestring &v )
Char & operator=( const Object &o )
Char & operator=( PyObject *p )
Char & operator=( int v )
Char & operator=( Py_UNICODE v )
Char & operator=( unicodestring &v )
operator String() const

The String Interface

String inherits from SeqBase<Char>. String holds a sequence of Unicode characters.

The following is taken from Pythons's unicode.h.

Many of these APIs take two arguments encoding and errors. These parameters encoding and errors have the same semantics as the ones of the builtin unicode() API.

Setting encoding to NULL causes the default encoding to be used.

Error handling is set by errors which may also be set to NULL meaning to use the default handling defined for the codec. Default error handling for all builtin codecs is "strict" (ValueErrors are raised).

The codecs all use a similar interface. Only deviation from the generic ones are documented.

class String
Type Name
explicit String( PyObject *pyob, bool owned = false )
String( const Object &ob )
String()
String( const char *latin1 )
String( const char *latin1, Py_ssize_t size )
String( const std::string &latin1 )
String( const std::string &v, const char *encoding, const char *error=NULL )
String( const char *s, const char *encoding, const char *error=NULL )
String( const char *s, Py_ssize_t len, const char *encoding, const char *error=NULL )
String & operator=( const Object &o )
String & operator=( PyObject *p )
String & operator=( const unicodestring &v )
size_type size() const
size_type capacity() const
unicodestring as_unicodestring() const
std::string operator std::string() const
String encode( const char *encoding, const char *error="strict" )
std::string as_std_string( const char *encoding=NULL, const char *error="strict" ) const

Classes Byte and Bytes

Bytes corresponds to the Python type byte.

The Byte interface

Byte inherits from Object. Byte holds a single 8-bit byte of data.

class Byte
Type Name
explicit Byte( PyObject *pyob, bool owned = false )
Byte( const Object &ob )
Byte( const std::string &v )
Byte( char v )
Byte & operator=( const Object &o )
Byte & operator=( PyObject *p )
Byte & operator=( const std::string &v )
Byte & operator=( char v )
operator Bytes() const

The Bytes Interface

Bytes inherits from SeqBase<Byte>. Bytes holds a sequence of 8-bit data.

class Bytes
Type Name
explicit Bytes( PyObject *pyob, bool owned = false )
Bytes( const Object &ob )
Bytes()
Bytes( const char *v )
Bytes( const char *v, Py_ssize_t size )
Bytes( const std::string &v )
Bytes( const std::string &v, Py_ssize_t size )
Bytes( const char *v )
Bytes( const char *v, Py_ssize_t size )
Bytes & operator=( const Object &o )
Bytes & operator=( PyObject *p )
Bytes & operator=( const std::string &v )
size_type size() const
size_type capacity() const
String decode( const char *encoding, const char *error="strict" )
std::string operator std::string() const
Bytes encode( const char *encoding, const char *error="strict" )
std::string as_std_string() const

Class Tuple

Class Tuple represents Python tuples. A Tuple is a Sequence. There are two kinds of constructors: one takes a PyObject *as usual, the other takes an integer number as an argument and returns a Tuple of that length, each component initialized to Py_None. The default constructor produces an empty Tuple.

Tuples are not immutable, but attempts to assign to their components will fail if the reference count is not 1. That is, it is safe to set the elements of a Tuple you have just made, but not thereafter.

Example: create a Tuple containing( 1, 2, 4 )

Tuple t( 3 );
t[0] = Long( 1 );
t[1] = Long( 2 );
t[2] = Long( 4 );

Example: create a Tuple from a list:

Dict d
...
Tuple t( d.keys() )

Tuple inherits from Sequence.. Special run-time checks prevent modification if the reference count is greater than one.

class Tuple
Type Name Comment
virtual void setItem( int offset, const Object &ob ) setItem is overriden to handle tuples properly.
explicit Tuple( PyObject *pyob, bool owned = false )
Tuple( const Object &ob )
explicit Tuple( int size = 0 ) Create a tuple of the given size. Items initialize to Py_None. Default is an empty tuple.
explicit Tuple( const Sequence &s ) Create a tuple from any sequence.
Tuple& operator=( const Object &rhs )
Tuple& operator=( PyObject *rhsp )
Tuple getSlice( int i, int j ) const Equivalent to python's t[i:j]

Class TupleN

Class TupleN is an easy way to make a Tuple of N items.

Example: create a Tuple containing( 1, 2, 4 )

TupleN t3( Long( 1 ), Long( 2 ), Long( 3 ) );

Example: create a Tuple containing( "Hello", "World" )

TupleN t2( String( "Hello" ), String( "Hello" ) );
class TupleN
Type Name Comment
  TupleN() Tuple of 0 elements
  TupleN( const Object &ob1 ) Tuple of 1 element
  TupleN( const Object &ob1, const Object &ob2 ) Tuple of 2 elements
  TupleN( const Object &ob1, const Object &ob2, const Object &ob3 ) Tuple of 3 elements
  TupleN( const Object &ob1, const Object &ob2, const Object &ob3,
        const Object &ob4 )
Tuple of 4 elements
  TupleN( const Object &ob1, const Object &ob2, const Object &ob3,
        const Object &ob4, const Object &ob5 )
Tuple of 5 elements
  TupleN( const Object &ob1, const Object &ob2, const Object &ob3,
        const Object &ob4, const Object &ob5, const Object &ob6 )
Tuple of 6 elements
  TupleN( const Object &ob1, const Object &ob2, const Object &ob3,
        const Object &ob4, const Object &ob5, const Object &ob6,
        const Object &ob7 )
Tuple of 7 elements
  TupleN( const Object &ob1, const Object &ob2, const Object &ob3,
        const Object &ob4, const Object &ob5, const Object &ob6,
        const Object &ob7, const Object &ob8 )
Tuple of 8 elements
  TupleN( const Object &ob1, const Object &ob2, const Object &ob3,
        const Object &ob4, const Object &ob5, const Object &ob6,
        const Object &ob7, const Object &ob8, const Object &ob9 )
Tuple of 9 elements

Class List

Class List represents a Python list, and the methods available faithfully reproduce the Python API for lists. A List is a Sequence.

List inherits from Sequence.

class List
Type Name Comment
explicit List( PyObject *pyob, bool owned = false )
List( const Object &ob )
List( int size = 0 ) Create a list of the given size. Items initialized to Py_None. Default is an empty list.
List( const Sequence &s ) Create a list from any sequence.
List& operator=( const Object &rhs )
List& operator=( PyObject *rhsp )
List getSlice( int i, int j ) const
void setSlice( int i, int j, const Object &v )
void append( const Object &ob )
void insert( int i, const Object &ob )
void sort() Sorts the list in place, using Python's member function. You can also use the STL sort function on any List instance.
void reverse() Reverses the list in place, using Python's member function.

Mappings

A class MapBase<T> is used as the base class for Python objects with a mapping behavior. The key behavior of this class is the ability to set and use items by subscripting with strings. A proxy class mapref<T> is defined to produce the correct behavior for both use and assignment.

For convenience, Mapping is a typedef for MapBase<Object>.

The MapBase<T> interface

MapBase<T> inherits from Object. T should be chosen to reflect the kind of element returned by the mapping.

class MapBase<T>
Type Name Comment
T operator[]( const std::string &key ) const
mapref<T> operator[]( const std::string &key )
int length() const Number of entries.
int hasKey( const std::string &s ) const Is m[s] defined?
T getItem( const std::string &s ) const m[s]
virtual void setItem( const std::string &s, const Object &ob ) m[s] = ob
void delItem( const std::string &s ) del m[s]
void delItem( const Object &s )
List keys() const A list of the keys.
List values() const A list of the values.
List items() const Each item is a key-value pair.

Class Dict

Class Dict represents Python dictionarys. A Dict is a Mapping. Assignment to subscripts can be used to set the components.

Dict d
d["Paul Dubois"] = "( 925 )-422-5426"

Dict inherits from MapBase<Object>.

class Dict
Type Name Comment
explicit Dict( PyObject *pyob, bool owned = false )
Dict( const Dict &ob )
Dict() Creates an empty dictionary
Dict& operator=( const Object &rhs )
Dict& operator=( PyObject *rhsp )

Clsss Callable.

Class Callable provides an interface to those Python objects that support a call method. Class Module holds a pointer to a module. If you want to create an extension module, however, see the extension facility. There is a large set of numeric operators.

class Callable
TypeNameComment
explicitCallable( PyObject *pyob, bool owned = false )
Callable &operator=( const Object &rhs )
Callable &operator=( PyObject *rhsp )
Objectapply( const Tuple &args ) constCall the object with the given positional arguments
Objectapply( const Tuple &args, const Dict &kwd ) constCall the object with the given positional and keyword arguments
Objectapply( PyObject *pargs = 0 ) const Call the object with args as the arguments. Checks that pargs is a tuple.

Interface to class Module

class Module
Type Name Comment
explicit Module( PyObject *pyob, bool owned = false )
explicit Module( const std::string name ) Construct from name of module; does the import if needed.
Module( const Module &ob ) Copy constructor
Module& operator=( const Object &rhs ) Assignment
Module& operator=( PyObject *rhsp ) Assignment

Numeric interface

Unary operators for plus and minus, and binary operators +, -, *, /, and % are defined for pairs of objects and for objects with scalar integers or doubles( in either order ). Functions abs( ob ) and coerce( o1, o2 ) are also defined.

The signature for coerce is:

inline std::pair<Object,Object> coerce( const Object &a, const Object &b )

Unlike the C API function, this simply returns the pair after coercion.

Stream I/O

Any object can be printed using stream I/O, using std::ostream &operator<< ( std::ostream &os, const Object &ob ). The object's str() representation is converted to a standard string which is passed to std::ostream &operator<< ( std::ostream &os, const std::string &).

Exceptions

The Python exception facility and the C++ exception facility can be merged via the use of try/catch blocks in the bodies of extension objects and module functions.

Class Exception and its children

A set of classes is provided. Each is derived from class Exception, and represents a particular sort of Python exception, such as IndexError, RuntimeError, ValueError. Each of them( other than Exception ) has a constructor which takes an explanatory string as an argument, and is used in a throw statement such as:

throw IndexError( "Index too large in MyObject access." );

If in using a routine from the Python API, you discover that it has returned a NULL indicating an error, then Python has already set the error message. In that case you merely throw Exception.

List of Exceptions

The exception hierarchy mirrors the Python exception hierarchy. The concrete exception classes are shown here.

List of Exceptions
Type Interface for class Exception
explicit Exception()
Exception( const std::string &reason )
Exception( PyObject *exception, const std::string &reason )
void clear()
Constructors for other children of class Exception
TypeError( const std::string &reason )
IndexError( const std::string &reason )
AttributeError( const std::string &reason )
NameError( const std::string &reason )
RuntimeError( const std::string &reason )
SystemError( const std::string &reason )
KeyError( const std::string &reason )
ValueError( const std::string &reason )
OverflowError( const std::string &reason )
ZeroDivisionError( const std::string &reason )
MemoryError( const std::string &reason )
SystemExit( const std::string &reason )

Using Exceptions in extension methods

The exception facility allows you to integrate the C++ and Python exception mechanisms. To do this, you must use the style described below when writing module methods in the old C style.

Note: If using the ExtensionModule or PythonExtension mechanisms described below, the method handlers include exception handling so that you only need to use exceptions explicitly in unusual cases.

Catching Exceptions from the Python API or PyCXX.

When writing an extension module method, you can use the following boilerplate. Any exceptions caused by the Python API or PyCXX itself will be converted into a Python exception. Note that Exception is the most general of the exceptions listed above, and therefore this one catch clause will serve to catch all of them. You may wish to catch other exceptions, not in the Exception family, in the same way. If so, you need to make sure you set the error in Python before returning.

static PyObject *
some_module_method( PyObject *self, PyObject *args )
{
    Tuple a( args ); // we know args is a Tuple
    try
    {
        ...calculate something from a...
        return ...something, usually of the form new_reference_to( some Object );
    }
    catch( const Exception  &)
    {
        //Exception caught, passing it on to Python
        return None();
    }
}

How to clear an Exception

If you anticipate that an Exception may be thrown and wish to recover from it, change the catch phrase to set a reference to an Exception, and use the method clear() from class Exception to clear it.:

catch( Exception &e )
{
    e.clear();
    ...now decide what to do about it...
}

Extension Facilities

CXX/Extensions.hxx provides facilities for:

  • Creating a Python extension module
  • Creating new Python extension types

These facilities use CXX/Objects.hxx and its support file cxxsupport.cxx.

If you use CXX/Extensions.hxx you must also include source files cxxextensions.c and cxx_extensions.cxx

Creating an Python extension module

The usual method of creating a Python extension module is to declare and initialize its method table in C. This requires knowledge of the correct form for the table and the order in which entries are to be made into it, and requires casts to get everything to compile without warning. The PyCXX header file CXX/Extensions.h offers a simpler method. Here is a sample usage, in which a module named "example" is created. Note that two details are necessary:

  • The initialization function must be declared to have external C linkage and to have the expected name. This is a requirement imposed by Python
  • The ExtensionModule object must have a storage class that survives the call to the initialization function. This is most easily accomplished by using a static local inside the initialization function, as in initexample below.

To create an extension module, you inherit from class ExtensionModule templated on yourself: In the constructor, you make calls to register methods of this class with Python as extension module methods. In this example, two methods are added( this is a simplified form of the example in Demo/example.cxx ):

class example_module : public ExtensionModule<example_module>
{
public:
    example_module()
    : ExtensionModule<example_module>( "example" )
    {
        add_varargs_method( "sum", &example_module::ex_sum, "sum( arglist ) = sum of arguments" );
        add_varargs_method( "test", &example_module::ex_test, "test( arglist ) runs a test suite" );

        initialize( "documentation for the example module" );
    }

    virtual ~example_module() {}

private:
    Object ex_sum( const Tuple &a ) { ... }
    Object ex_test( const Tuple &a ) { ... }
};

To initialize the extension, you just instantiate one static instance( static so it does not destroy itself! ):

void initexample()
{
    static example_module* example = new example_module;
}

The methods can be written to take Tuples as arguments and return Objects. If exceptions occur they are trapped for you and a Python exception is generated. So, for example, the implementation of ex_sum might be:

Object ex_sum( const Tuple &a )
{
    Float f( 0.0 );
    for( int i = 0; i < a.length(); i++ )
    {
        Float g( a[i] );
        f = f + g;
    }
    return f;
}

class ExtensionModule contains methods to return itself as a Module object, or to return its dictionary.

class ExtensionModule
Type Name Comment
explicit ExtensionModule( char* name ) Create an extension module named "name"
virtual ~ExtensionModule() Destructor
Dict moduleDictionary() const Returns the module dictionary; module must be initialized.
Module module() const This module as a Module.
void add_varargs_method( char *name, method_varargs_function_t method, char *documentation="" ) Add a method to the module.
void add_keyword_method( char *name, method_keyword_function_t method, char *documentation="" Add a method that takes keywords
void initialize()( protected, call from constructor ) Initialize the module once all methods have been added.

The signatures above are:

typedef Object( T::*method_varargs_function_t )( const Tuple &args );
typedef Object( T::*method_keyword_function_t )( const Tuple &args, const Dict &kws
 );

That is, the methods take a Tuple or a Tuple and a Dict, and return an Object. The example below has an &in front of the name of the method; we found one compiler that needed this.

Creating a Python extension type

One of the great things about Python is the way you can create your own object types and have Python welcome them as first-class citizens. Unfortunately, part of the way you have to do this is not great. Key to the process is the creation of a Python "type object". All instances of this type must share a reference to this one unique type object. The type object itself has a multitude of "slots" into which the addresses of functions can be added in order to give the object the desired behavior.

Creating extension objects is of course harder since you must specify how the object behaves and give it methods. This is shown in some detail in the example range.h and range.cxx, with the test routine rangetest.cxx, in directory Demo. If you have never created a Python extension before, you should read the Extension manual first and be very familiar with Python's "special class methods". Then what follows will make more sense.

The basic idea is to inherit from PythonExtension templated on your self

class MyObject: public PythonExtension<MyObject> {...}

As a consequence:

  • MyObject is a child of PyObject, so that a MyObject* is-a PyObject*.
  • A static method check( PyObject * ) is created in class MyObject. This function returns a boolean, testing whether or not the argument is in fact a pointer to an instance of MyObject.
  • The user can connect methods of MyObject to Python so that they are methods on MyObject objects. Each such method has the signature:
    Object method_name( const Tuple &args ).
  • The user can override virtual methods of PythonExtension in order to set behaviors.
  • A method is created to handle the deletion of an instance if and when its reference count goes to zero. This method ensures the calling of the class destructor ~MyObject(), if any, and releases the memory( see below ).
  • Both automatic and heap-based instances of MyObject can be created.

Sample usage of PythonExtension

Here is a brief overview. You create a class that inherits from PythonExtension templated upon itself. You override various methods from PythonExtension to implement behaviors, such as getattr, sequence_item, etc. You can also add methods to the object that are usable from Python using a similar scheme as for module methods above.

One of the consequences of inheriting from PythonExtension is that you are inheriting from PyObject itself. So your class is-a PyObject and instances of it can be passed to the Python C API. Note: this example uses the namespace feature of PyCXX.

Hint: You can avoid needing to specify the Py:: prefix if you include the C++ statement using Py; at the top of your files.

class range: public Py::PythonExtension<range>
{
public:
    ... constructors, data, etc.
    ... methods not callable from Python
    // initializer, see below
    static void init_type();
    // override functions from PythonExtension
    virtual Py::Object repr();
    virtual Py::Object getattr( const char *name );

    virtual int sequence_length();
    virtual Py::Object sequence_item( int i );
    virtual Py::Object sequence_concat( const Py::Object &j );
    virtual Py::Object sequence_slice( int i, int j );

    // define python methods of this object
    Py::Object amethod( const Py::Tuple &args );
    Py::Object value( const Py::Tuple &args );
    Py::Object assign( const Py::Tuple &args ); 
};

To initialize the type we provide a static method that we can call from some module's initializer. We set the name, doc string, and indicate which behaviors range objects support. Then we adds the methods.

void range::init_type()
{
    behaviors().name( "range" );
    behaviors().doc( "range objects: start, stop, step" );
    behaviors().supportRepr();
    behaviors().supportGetattr();
    behaviors().supportSequenceType();

    add_varargs_method( "amethod", &range::amethod, "demonstrate how to document amethod" );
    add_varargs_method( "assign", &range::assign );
    add_varargs_method( "value", &range::value );
}

Do not forget to add the call range::init_type() to some module's init function. You will want a method in some module that can create range objects, too.

Your extension class T inherits PythonExtension<T>.

class PythonExtension<T>
Type Name Comment
virtual ~PythonExtension<T>() Destructor
PyTypeObject* type_object() const Returns the object type object.
int check( PyObject *p ) Is p a T?
Protected
void add_varargs_method( char *name, method_keyword_function_t method, char *documentation="" Add a method that takes arguments
void add_keyword_method( char *name, method_keyword_function_t method, char *documentation="" Add a method that takes keywords
static PythonType& behaviors() The type object
void initialize()( protected, call from constructor ) Initialize the module once all methods have been added.

As before the signatures for the methods are Object mymethod( const Tuple &args ) and Object mykeywordmethod( const Tuple &args, const Dict &keys ). In this case, the methods must be methods of T.

To set the behaviors of the object you override some or all of these methods from PythonExtension<T>:

virtual int print( FILE *, int );
virtual Object getattr( const char * );
virtual int setattr( const char *, const Object &);
virtual Object getattro( const Object &);
virtual int setattro( const Object &, const Object &);
virtual int compare( const Object &);
virtual Object repr();
virtual Object str();
virtual long hash();
virtual Object call( const Object &, const Object &);

// Sequence methods
virtual int sequence_length();
virtual Object sequence_concat( const Object &);
virtual Object sequence_repeat( int );
virtual Object sequence_item( int );
virtual Object sequence_slice( int, int );
virtual int sequence_ass_item( int, const Object &);
virtual int sequence_ass_slice( int, int, const Object &);

// Mapping
virtual int mapping_length();
virtual Object mapping_subscript( const Object &);
virtual int mapping_ass_subscript( const Object &, const Object &);

// Number
virtual int number_nonzero();
virtual Object number_negative();
virtual Object number_positive();
virtual Object number_absolute();
virtual Object number_invert();
virtual Object number_int();
virtual Object number_float();
virtual Object number_long();
virtual Object number_oct();
virtual Object number_hex();
virtual Object number_add( const Object &);
virtual Object number_subtract( const Object &);
virtual Object number_multiply( const Object &);
virtual Object number_divide( const Object &);
virtual Object number_remainder( const Object &);
virtual Object number_divmod( const Object &);
virtual Object number_lshift( const Object &);
virtual Object number_rshift( const Object &);
virtual Object number_and( const Object &);
virtual Object number_xor( const Object &);
virtual Object number_or( const Object &);
virtual Object number_power( const Object &, const Object &);

// Buffer
virtual int buffer_getreadbuffer( int, void** );
virtual int buffer_getwritebuffer( int, void** );
virtual int buffer_getsegcount( int* );

Note that dealloc is not one of the functions you can override. That is what your destructor is for. As noted below, dealloc behavior is provided for you by PythonExtension.

Type initialization

To initialize your type, supply a static public member function that can be called from the extension module. In that function, obtain the PythonType object by calling behaviors() and apply appropriate "support" methods from PythonType to turn on the support for that behavior or set of behaviors.

void supportPrint( void );
void supportGetattr( void );
void supportSetattr( void );
void supportGetattro( void );
void supportSetattro( void );
void supportCompare( void );
void supportRepr( void );
void supportStr( void );
void supportHash( void );
void supportCall( void );

void supportSequenceType( void );
void supportMappingType( void );
void supportNumberType( void );
void supportBufferType( void );

Then call add_varargs_method or add_keyword_method to add any methods desired to the object.

Notes on memory management and extension objects

Normal Python objects exist only on the heap. That is unfortunate, as object creation and destruction can be relatively expensive. Class PythonExtension allows creation of both local and heap-based objects.

If an extension object is created using operator new, as in:

range* my_r_ref = new range( 1, 20, 3 )

then the entity my_r_ref can be thought of as "owning" the reference created in the new object. Thus, the object will never have a reference count of zero. If the creator wishes to delete this object, they should either make sure the reference count is 1 and then do delete my_r_ref, or decrement the reference with Py_DECREF( my_r_ref ).

Should my_r_ref give up ownership by being used in an Object constructor, all will still be well. When the Object goes out of scope its destructor will be called, and that will decrement the reference count, which in turn will trigger the special dealloc routine that calls the destructor and deletes the pointer.

If the object is created with automatic scope, as in:

range my_r( 1, 20, 3 )

then my_r can be thought of as owning the reference, and when my_r goes out of scope the object will be destroyed. Of course, care must be taken not to have kept any permanent reference to this object. Fortunately, in the case of an exception, the C++ exception facility will call the destructor of my_r. Naturally, care must be taken not to end up with a dangling reference, but such objects can be created and destroyed more efficiently than heap-based PyObjects.

pysvn-1.7.8/Import/pycxx-6.2.4/Doc/Python3/style.css000644 000771 000771 00000003616 11146616710 022240 0ustar00barrybarry000000 000000 /* Copyright (c) 2008 Barry A. Scott */ h1, h2, h3, h4 { color: #000099; background-color: #aaaaff; } h2 { position: relative; left: 20px margin-right: 40px; } li.contents_h1 a, li.contents_h1 a:link, li.contents_h1 a:visited, li.contents_h1 a:active { font-size: x-large; font-style: bold; } li.contents_h2 a, li.contents_h2 a:link, li.contents_h2 a:visited, li.contents_h2 a:active { font-size: large; font-style: none; } body { background-color: #ffffff; width: 95%; } p { position: relative; left: 20px; width: 45em; margin-right: 40px; } pre { color: #0000cc; background-color: #eeeeee; position: relative; left: 40px; margin-right: 80px; border-style: solid; border-color: black; border-width: thin; } kbd { color: #990000; } p cite, ol cite, ul cite { font-family: monospace; font-style: normal; font-size: normal; } li { width: 43em; } li var, pre var, p var, kbd var { color: #009900; font-style: italic; } li samp, pre samp, p samp, kbd samp { color: #009900; font-weight: bold; } li p { position: relative; left: 0; } caption { font-size: x-large; font-style: bold; } table { position: relative; left: 20px; margin-right: 40px; border: solid #888888 1px; background-color: #eeeeee; } table th { border: solid #888888 1px; background-color: #88dd88; color: black; text-align: left; } table td { border: solid #888888 1px; } table td.code { border: solid #888888 1px; font-family: monospace; font-style: normal; font-size: normal; } p.param { background-color: #eeeeee; border-top: lightskyblue solid 4; } p.center { text-align: center; } pysvn-1.7.8/Import/pycxx-6.2.4/Doc/Python2/PyCXX.html000644 000771 000771 00000202467 11146616710 022233 0ustar00barrybarry000000 000000 Writing Python Extensions in C++ with PyCXX

Writing Python Extensions in C++

Barry Scott
Reading, Berkshire, England
barry@barrys-emacs.org

Paul F. Dubois, dubois1@llnl.gov
Lawrence Livermore National Laboratory
Livermore, California, U.S.A.

Acknowledgment

Thank you to Geoffrey Furnish for patiently teaching me the finer points of C++ and its template facility, and his critique of PyCXX in particular. With version 4 I welcome Barry Scott as co-author. -- Paul Dubois

Paul is no longer contributing to PyCXX. Thanks for all your great work on PyCXX Paul. -- Barry Scott.

Overview

PyCXX is designed to make it easier to extend Python with C++

PyCXX is a set of C++ facilities to make it easier to write Python extensions. The chief way in which PyCXX makes it easier to write Python extensions is that it greatly increases the probability that your program will not make a reference-counting error and will not have to continually check error returns from the Python C API. PyCXX integrates Python with C++ in these ways:

  • C++ exception handling is relied on to detect errors and clean up. In a complicated function this is often a tremendous problem when writing in C. With PyCXX, we let the compiler keep track of what objects need to be dereferenced when an error occurs.
  • The Standard Template Library (STL) and its many algorithms plug and play with Python containers such as lists and tuples.
  • The optional CXX_Extensions facility allows you to replace the clumsy C tables with objects and method calls that define your modules and extension objects.

Download and Installation

Download PyCXX from http://sourceforge.net/projects/cxx/.

The distribution layout is:

DirectoryDescription
.Makefile for Unix and Windows, Release documentation
./CXXHeader files
./SrcSource files
./DocDocumentation
./DemoTesting and Demonstartion files

To use PyCXX you use its include files and add its source routines to your module.

Installation:

  • Install the PyCXX files into a directory of your choice. For example:
    Windows: C:\PyCXX
    Unix: /usr/local/PyCXX
  • Tell your compiler where the PyCXX header files are:
    Windows: cl /I=C:\PyCXX ...
    Unix: g++ -I/usr/local/PyCXX ...
  • Include PyCXX headers files in your code using the CXX prefix:
    #include "CXX/Object.hxx"

The header file CXX/config.h may need to be adjusted for the compiler you use. As of this writing, only a fairly obscure reference to part of the standard library needs this adjustment. Unlike prior releases, PyCXX now assumes namespace support and a standard C++ library.

PyCXX - Supporting Python 2 and Python 3

It is possible to have common code that can be compiled to work with Python 2 or Python 3.

Use PyCXX V5.5 with PYCXX_PYTHON_2TO3 defined to support Python 2.

Use PyCXX V6.0 with PYCXX_PYTHON_2TO3 defined to support Python 3.

The changes from Python 2 to Python 3 that require code changes are:

  • string is unicode only in Python 3 - Py::String API changed to match python 3 usage
  • byte is for byte date in Python 3 - Py::Bytes added to PyCXX
  • int has been removed - Py::Int has been removed from PyCXX

This means that you will need to:

  • Replace Py::Nothing with Py::None - required
  • Replace Py::Int with Py::Long - recommended
  • Replace Py::LongLong with Py::Long -recommended
  • Replace as_std_string() with as_std_string( "encoding" ) or as_std_string( NULL ) - required
  • Replace Py::String that holds non unicode data with Py::Bytes - required

Because the Py::String and Py::Byte implementations in PyCXX V5.5 allow abuses of the API it is best to test your code against PyCXX V6.0 to ensure correct API use then test against PyCXX V5.5.

Use of namespaces

All PyCXX assets are in namespace "Py". You need to include the Py:: prefix when referring to them, or include the statement:

using namespace Py;

Wrappers for standard objects: CXX/Objects.hxx

Header file CXX/Objects.hxx requires adding file Src/cxxsupport.cxx to your module sources. CXX_Objects provides a set of wrapper classes that allow you access to most of the Python C API using a C++ notation that closely resembles Python. For example, this Python:

d = {}
d["a"] = 1
d["b"] = 2
alist = d.keys()
print alist

Can be written in C++:

Dict d;
List alist;
d["a"] = Int(1);
d["b"] = Int(2);
alist = d.keys();
std::cout << alist << std::endl;

You can optionally use the CXX/Extensions.hxx facility described later to define Python extension modules and extension objects.

We avoid programming with Python object pointers

The essential idea is that we avoid, as much as possible, programming with pointers to Python objects, that is, variables of type PyObject*. Instead, we use instances of a family of C++ classes that represent the usual Python objects. This family is easily extendible to include new kinds of Python objects.

For example, consider the case in which we wish to write a method, taking a single integer argument, that will create a Python dict and insert into it that the integer plus one under the key value. In C we might do that as follows:

static PyObject* mymodule_addvalue (PyObject* self, PyObject* args)
{
    PyObject *d;
    PyObject* f;
    int k;
    PyArgs_ParseTuple(args, "i", &k);
    d = PyDict_New();
    if (!d)
        return NULL;

    f = PyInt_NEW(k+1);
    if(!f)
    {
        Py_DECREF(d); /* have to get rid of d first */
        return NULL;
    }
    if(PyDict_SetItemString(d, "value", f) == -1)
    {
        Py_DECREF(f);
        Py_DECREF(d);
        return NULL;
    }

    return d;
}

If you have written a significant Python extension, this tedium looks all too familiar. The vast bulk of the coding is error checking and cleanup. Now compare the same thing written in C++ using CXX/Objects.hxx. The things with Python-like names (Int, Dict, Tuple) are from CXX/Objects.hxx.

static PyObject* mymodule_addvalue (PyObject* self, PyObject* pargs)
{ 
    try
    {
        Tuple args(pargs); 
        args.verify_length(1); 

        Dict d; 
        Int k = args[0]; 
        d["value"] = k + 1;

        return new_reference_to(d); 
    } 
    catch (const PyException&)
    { 
        return NULL;
    }
}

If there are not the right number of arguments or the argument is not an integer, an exception is thrown. In this case we choose to catch it and convert it into a Python exception. The C++ exception handling mechanism takes care all the cleanup.

Note that the creation of the Int k got the first argument and verified that it is an Int.

Just to peek ahead, if you wrote this method in an ExtensionModule-derived module of your own, it would be a method and it could be written even more simply:

Object addvalue (Object & self, const Tuple & args)
{
    args.verify_length(1);
    Dict d;
    Int k = args[0];
    d["value"] = k + 1;
    return d;
}

The basic concept is to wrap Python pointers

The basic concept of CXX/Objects.hxx is to create a wrapper around each PyObject * so that the reference counting can be done automatically, thus eliminating the most frequent source of errors. In addition, we can then add methods and operators so that Python objects can be manipulated in C++ much like you would in Python.

Each Object contains a PyObject * to which it owns a reference. When an Object is destroyed, it releases its ownership on the pointer. Since C++ calls the destructors on objects that are about to go out of scope, we are guaranteed that we will keep the reference counts right even if we unexpectedly leave a routine with an exception.

As a matter of philosophy, CXX/Objects.hxx prevents the creation of instances of its classes unless the instance will be a valid instance of its class. When an attempt is made to create an object that will not be valid, an exception is thrown.

Class Object represents the most general kind of Python object. The rest of the classes that represent Python objects inherit from it.

Object
Type
Int
Float
Long
Complex
Char
Sequence -> SeqBase<T>
    String
    Tuple
    List
Mapping -> MapBase<T>
    Dict
Callable
Module

There are several constructors for each of these classes. For example, you can create an Int from an integer as in

Int s(3)

However, you can also create an instance of one of these classes using any PyObject* or another Object. If the corresponding Python object does not actually have the type desired, an exception is thrown. This is accomplished as follows. Class Object defines a virtual function accepts:

virtual bool accepts(PyObject* p)

The base class version of accepts returns true for any pointer p except 0. This means we can create an Object using any PyObject *, or from any other Object. However, if we attempt to create an Int from a PyObject *, the overridding version of accepts in class Int will only accept pointers that correspond to Python ints. Therefore if we have a Tuple t and we wish to get the first element and be sure it is an Int, we do

Int first_element = t[0]

This will not only accomplish the goal of extracting the first element of the Tuple t, but it will ensure that the result is an Int. If not, an exception is thrown. The exception mechanism is discussed later.

Class Object

Class Object serves as the base class for the other classes. Its default constructor constructs a Py_None, the unique object of Python type None. The interface to Object consists of a large number of methods corresponding to the operations that are defined for every Python object. In each case, the methods throw an exception if anything goes wrong.

There is no method corresponding to PyObject_SetItem with an arbitrary Python object as a key. Instead, create an instance of a more specific child of Object and use the appropriate facilities.

The comparison operators use the Python comparison function to compare values. The method is is available to test for absolute identity.

A conversion to standard library string type std::string is supplied using method as_string. Stream output of PyCXX Object instances uses this conversion, which in turn uses the Python object's str() representation.

All the numeric operators are defined on all possible combinations of Object, long, and double. These use the corresponding Python operators, and should the operation fail for some reason, an exception is thrown.

Dealing with pointers returned by the Python C API

Often, PyObject * pointers are acquired from some function, particularly functions in the Python C API. If you wish to make an object from the pointer returned by such a function, you need to know if the function returns you an owned or unowned reference. Unowned references are unusual but there are some cases where unowned references are returned.

Usually, Object and its children acquire a new reference when constructed from a PyObject *. This is usually not the right behavior if the reference comes from one of the Python C API calls.

If p is an owned reference, you can add the boolean true as an extra argument in the creation routine, Object(p, true), or use the function asObject(p) which returns an Object created using the owned reference. For example, the routine PyString_FromString returns an owned reference to a Python string object. You could write:

Object w = asObject( PyString_FromString("my string") );

or using the constructor,

Object w( PyString_FromString("my string"), true );

In fact, you would never do this, since PyCXX has a class String and you can just say:

String w( "my string" );

Indeed, since most of the Python C API is similarly embodied in Object and its descendents, you probably will not use asObject all that often.

Table 1: Class Object

Returns Name(signature) Comment

Basic Methods

explicit Object (PyObject* pyob=Py_None, bool owned=false) Construct from pointer.
explicit Object (const Object& ob) Copycons; acquires an owned reference.
Object& operator= (const Object& rhs) Acquires an owned reference.
Object& operator= (PyObject* rhsp) Acquires an owned reference.
virtual ~Object () Releases the reference.
void increment_reference_count() Explicitly increment the count
void decrement_reference_count() Explicitly decrement count but not to zero
PyObject* operator* () const Lends the pointer
PyObject* ptr () const Lends the pointer
virtual bool accepts (PyObject *pyob) const Would assignment of pyob to this object succeed?
std::string as_string() const str() representation
Python API Interface
int reference_count () const reference count
Type type () const associated type object
String str () const str() representation
String repr () const repr () representation
bool hasAttr (const std::string& s) const hasattr(this, s)
Object getAttr (const std::string& s) const getattr(this, s)
Object getItem (const Object& key) const getitem(this, key)
long hashValue () const hash(this)
void setAttr (const std::string& s,
const Object& value)
this.s = value
void delAttr (const std::string& s) del this.s
void delItem (const Object& key) del this[key]
bool isCallable () const does this have callable behavior?
bool isList () const is this a Python list?
bool isMapping () const does this have mapping behaviors?
bool isNumeric () const does this have numeric behaviors?
bool isSequence () const does this have sequence behaviors?
bool isTrue () const is this true in the Python sense?
bool isType (const Type& t) const is type(this) == t?
bool isTuple() const is this a Python tuple?
bool isString() const is this a Python string?
bool isUnicode() const is this a Python Unicode string?
bool isDict() const is this a Python dictionary?
Comparison Operators
bool is(PyObject* pother) const test for identity
bool is(const Object& other) const test for identity
bool operator==(const Object& o2) const Comparisons use Python cmp
bool operator!=(const Object& o2) const Comparisons use Python cmp
bool operator>=(const Object& o2) const Comparisons use Python cmp
bool operator<=(const Object& o2) const Comparisons use Python cmp
bool operator<(const Object& o2) const Comparisons use Python cmp
bool operator>(const Object& o2) const Comparisons use Python cmp

The Basic Types

Corresponding to each of the basic Python types is a class that inherits from Object. Here are the interfaces for those types. Each of them inherits from Object and therefore has all of the inherited methods listed for Object. Where a virtual function is overridden in a class, the name is underlined.

Class Type

Class Type corresponds to Python type objects. There is no default constructor.

Table 2: class Type

Returns Name and Signature Comments
explicit Type (PyObject* pyob, bool owned = false) Constructor
explicit Type (const Object& ob) Constructor
explicit Type(const Type& t) Copycons
Type& operator= (const Object& rhs) Assignment
Type& operator= (PyObject* rhsp) Assignment
virtual bool accepts (PyObject *pyob) const Uses PyType_Check

Class Int

Class Int, derived publically from Object, corresponds to Python ints. Note that the latter correspond to C long ints. Class Int has an implicit user-defined conversion to long int. All constructors, on the other hand, are explicit. The default constructor creates a Python int zero.

Table 3: class Int

Returns Name and Signature Comments
explicit Int (PyObject *pyob, bool owned= false, bool owned = false) Constructor
explicit Int (const Int& ob) Constructor
explicit Int (long v = 0L) Construct from long
explicit Int (int v) Contruct from int
explicit Int (const Object& ob) Copycons
Int& operator= (const Object& rhs) Assignment
Int& operator= (PyObject* rhsp) Assignment
virtual bool   (PyObject *pyob) const Based on PyInt_Check
long operator long() const Implicit conversion to long int
Int& operator= (int v) Assign from int
Int& operator= (long v) Assign from long

Class Long

Class Long, derived publically from Object, corresponds to Python type long. In Python, a long is an integer type of unlimited size, and is usually used for applications such as cryptography, not as a normal integer. Implicit conversions to both double and long are provided, although the latter may of course fail if the number is actually too big. All constructors are explicit. The default constructor produces a Python long zero.

Table 4: Class Long

Returns Name and Signature Comments
explicit Long (PyObject *pyob, bool owned = false) Constructor
explicit Long (const Int& ob) Constructor
explicit Long (long v = 0L) Construct from long
explicit Long (int v) Contruct from int
explicit Long (const Object& ob) Copycons
Long& operator= (const Object& rhs) Assignment
Long& operator= (PyObject* rhsp) Assignment
virtual bool (PyObject *pyob) const Based on PyLong_Check
double operator double() const Implicit conversion to double
long operator long() const Implicit conversion to long
Long& operator= (int v) Assign from int
Long& operator= (long v) Assign from long

Class Float

Class Float corresponds to Python floats, which in turn correspond to C double. The default constructor produces the Python float 0.0.

Table 5: Class Float

Returns Name and Signature Comments
explicit Float (PyObject *pyob, bool owned = false) Constructor
Float (const Float& f)   Construct from float
explicit Float (double v=0.0) Construct from double
explicit Float (const Object& ob) Copycons
Float& operator= (const Object& rhs) Assignment
Float& operator= (PyObject* rhsp) Assignment
virtual bool accepts (PyObject *pyob) const Based on PyFloat_Check
double operator double () const Implicit conversion to double
Float& operator= (double v) Assign from double
Float& operator= (int v) Assign from int
Float& operator= (long v) Assign from long
Float& operator= (const Int& iob) Assign from Int

Sequences

PyCXX implements a quite sophisticated wrapper class for Python sequences. While every effort has been made to disguise the sophistication, it may pop up in the form of obscure compiler error messages, so in this documentation we will first detail normal usage and then discuss what is under the hood.

The basic idea is that we would like the subscript operator [] to work properly, and to be able to use STL-style iterators and STL algorithms across the elements of the sequence.

Sequences are implemented in terms of a templated base class, SeqBase<T>. The parameter T is the answer to the question, sequence of what? For Lists, for example, T is Object, because the most specific thing we know about an element of a List is simply that it is an Object. (Class List is defined below; it is a descendent of Object that holds a pointer to a Python list). For strings, T is Char, which is a wrapper in turn of Python strings whose length is one.

For convenience, the word Sequence is a typedef of SeqBase<Object>.

General sequences

Suppose you are writing an extension module method that expects the first argument to be any kind of Python sequence, and you wish to return the length of that sequence. You might write:

static PyObject*
my_module_seqlen (PyObject *self, PyObject* args) {
try
    {
    Tuple t(args);       // set up a Tuple pointing to the arguments.
    if(t.length() != 1) 
         throw PyException("Incorrect number of arguments to seqlen.");
    Sequence s = t[0];   // get argument and be sure it is a sequence
    return new_reference_to(Int(s.length()));
    }
catch(const PyException&)
    {
    return Py_Null;
    }
}

As we will explain later, the try/catch structure converts any errors, such as the first argument not being a sequence, into a Python exception.

Subscripting

When a sequence is subscripted, the value returned is a special kind of object which serves as a proxy object. The general idea of proxy objects is discussed in Scott Meyers' book, "More Effective C++". Proxy objects are necessary because when one subscripts a sequence it is not clear whether the value is to be used or the location assigned to. Our proxy object is even more complicated than normal because a sequence reference such as s[i] is not a direct reference to the i'th object of s.

In normal use, you are not supposed to notice this magic going on behind your back. You write:

Object t;
Sequence s;
s[2] = t + s[1]

and here is what happens: s[1] returns a proxy object. Since there is no addition operator in Object that takes a proxy as an argument, the compiler decides to invoke an automatic conversion of the proxy to an Object, which returns the desired component of s. The addition takes place, and then there is an assignment operator in the proxy class created by the s[2], and that assignment operator stuffs the result into the 2 component of s.

It is possible to fool this mechanism and end up with a compiler failing to admit that a s[i] is an Object. If that happens, you can work around it by writing Object(s[i]), which makes the desired implicit conversion, explicit.

Iterators

Each sequence class provides the following interface. The class seqref<T> is the proxy class. We omit the details of the iterator, const_iterator, and seqref<T> here. See CXX/Objects.hxx if necessary. The purpose of most of this interface is to satisfy requirements of the STL.

The SeqBase<T> Interface

SeqBase<T> inherits from Object.

Type Name
typedef int size_type
typedef seqref<T> reference
typedef T const_reference
typedef seqref<T>* pointer
typedef int difference_type
virtual size_type max_size() const
virtual size_type capacity() const;
virtual void swap(SeqBase<T>& c);
virtual size_type size () const;
explicit SeqBase<T> ();
explicit SeqBase<T> (PyObject* pyob, bool owned = false);
explicit SeqBase<T> (const Object& ob);
SeqBase<T>& operator= (const Object& rhs);
SeqBase<T>& operator= (PyObject* rhsp);
virtual bool accepts (PyObject *pyob) const;
size_type length () const ;
const T operator[](size_type index) const;
seqref<T> operator[](size_type index);
virtual T getItem (size_type i) const;
virtual void setItem (size_type i, const T& ob);
SeqBase<T> repeat (int count) const;
SeqBase<T> concat (const SeqBase<T>& other) const ;
const T front () const;
seqref<T> front();
const T back () const;
seqref<T> back();
void verify_length(size_type required_size);
void verify_length(size_type min_size, size_type max_size);
class iterator;
iterator begin ();
iterator end ();
class const_iterator;
const_iterator begin () const;
const_iterator end () const;

Any heir of class Object that has a sequence behavior should inherit from class SeqBase<T>, where T is specified as the type of object that represents the individual elements of the sequence. The requirements on T are that it has a constructor that takes a PyObject* as an argument, that it has a default constructor, a copy constructor, and an assignment operator. In short, any properly defined heir of Object will work.

Classes Char and String

Python strings are unusual in that they are immutable sequences of characters. However, there is no character type per se; rather, when subscripted strings return a string of length one. To simulate this, we define two classes Char and String. The Char class represents a Python string object of length one. The String class represents a Python string, and its elements make up a sequence of Char's.

The user interface for Char is limited. Unlike String, for example, it is not a sequence.

The Char interface

Char inherits from Object.

Type Name
explicit Char (PyObject *pyob, bool owned = false)
Char (const Object& ob)
Char (const std::string& v = "")
Char (char v)
Char (Py_UNICODE v)
Char& operator= (const std::string& v)
Char& operator= (char v)
Char& operator= (Py_UNICODE v)
Char& operator= (std::basic_string v)
operator String() const
operator std::string () const

The String Interface

String inherits from SeqBase<Char>.

Type Name
explicit String (PyObject *pyob, bool owned = false)
String (const Object& ob)
String (const std::string& v = "")
String (const std::string& v, const char *encoding, const char *error="strict")
String (const char *s, const char *encoding, const char *error="strict")
String (const char *s, int len, const char *encoding, const char *error="strict")
String (const std::string& v, std::string::size_type vsize)
String (const char* v)
String& operator= (const std::string& v)
std::string operator std::string () const
String encode( const char *encoding, const char *error="strict" )
String decode( const char *encoding, const char *error="strict" )
std::string as_std_string() const
unicodestring as_unicodestring() const

Class Tuple

Class Tuple represents Python tuples. A Tuple is a Sequence. There are two kinds of constructors: one takes a PyObject* as usual, the other takes an integer number as an argument and returns a Tuple of that length, each component initialized to Py_None. The default constructor produces an empty Tuple.

Tuples are not immutable, but attempts to assign to their components will fail if the reference count is not 1. That is, it is safe to set the elements of a Tuple you have just made, but not thereafter.

Example: create a Tuple containing (1, 2, 4)

Tuple t(3)
t[0] = Int(1)
t[1] = Int(2)
t[2] = Int(4)

Example: create a Tuple from a list:

Dict d
...
Tuple t(d.keys())

The Tuple Interface

Tuple inherits from Sequence.. Special run-time checks prevent modification if the reference count is greater than one.

Type Name Comment
virtual void setItem (int offset, const Object&ob) setItem is overriden to handle tuples properly.
explicit Tuple (PyObject *pyob, bool owned = false)
Tuple (const Object& ob)
explicit Tuple (int size = 0) Create a tuple of the given size. Items initialize to Py_None. Default is an empty tuple.
explicit Tuple (const Sequence& s) Create a tuple from any sequence.
Tuple& operator= (const Object& rhs)
Tuple& operator= (PyObject* rhsp)
Tuple getSlice (int i, int j) const Equivalent to python's t[i:j]

Class List

Class List represents a Python list, and the methods available faithfully reproduce the Python API for lists. A List is a Sequence.

The List Interface

List inherits from Sequence.

Type Name Comment
explicit List (PyObject *pyob, bool owned = false)
List (const Object& ob)
List (int size = 0) Create a list of the given size. Items initialized to Py_None. Default is an empty list.
List (const Sequence& s) Create a list from any sequence.
List& operator= (const Object& rhs)
List& operator= (PyObject* rhsp)
List getSlice (int i, int j) const
void setSlice (int i, int j, const Object& v)
void append (const Object& ob)
void insert (int i, const Object& ob)
void sort () Sorts the list in place, using Python's member function. You can also use the STL sort function on any List instance.
void reverse () Reverses the list in place, using Python's member function.

Mappings

A class MapBase<T> is used as the base class for Python objects with a mapping behavior. The key behavior of this class is the ability to set and use items by subscripting with strings. A proxy class mapref<T> is defined to produce the correct behavior for both use and assignment.

For convenience, Mapping is a typedef for MapBase<Object>.

The MapBase<T> interface

MapBase<T> inherits from Object. T should be chosen to reflect the kind of element returned by the mapping.

Type Name Comment
T operator[](const std::string& key) const
mapref<T> operator[](const std::string& key)
int length () const Number of entries.
int hasKey (const std::string& s) const Is m[s] defined?
T getItem (const std::string& s) const m[s]
virtual void setItem (const std::string& s, const Object& ob) m[s] = ob
void delItem (const std::string& s) del m[s]
void delItem (const Object& s)
List keys () const A list of the keys.
List values () const A list of the values.
List items () const Each item is a key-value pair.

Class Dict

Class Dict represents Python dictionarys. A Dict is a Mapping. Assignment to subscripts can be used to set the components.

Dict d
d["Paul Dubois"] = "(925)-422-5426"

Interface for Class Dict

Dict inherits from MapBase<Object>.

Type Name Comment
explicit Dict (PyObject *pyob, bool owned = false)
Dict (const Dict& ob)
Dict () Creates an empty dictionary
Dict& operator= (const Object& rhs)
Dict& operator= (PyObject* rhsp)

Other classes and facilities.

Class Callable provides an interface to those Python objects that support a call method. Class Module holds a pointer to a module. If you want to create an extension module, however, see the extension facility. There is a large set of numeric operators.

Interface to class Callable

Type Name Comment
explicit Callable (PyObject *pyob, bool owned = false)
Callable& operator= (const Object& rhs)
Callable& operator= (PyObject* rhsp)
Object apply(const Tuple& args) const Call the object with the given arguments
Object apply(PyObject* pargs = 0) const Call the object with args as the arguments. Checks that pargs is a tuple.

Interface to class Module

Type Name Comment
explicit Module (PyObject* pyob, bool owned = false)
explicit Module (const std::string name) Construct from name of module; does the import if needed.
Module (const Module& ob) Copy constructor
Module& operator= (const Object& rhs) Assignment
Module& operator= (PyObject* rhsp) Assignment

Numeric interface

Unary operators for plus and minus, and binary operators +, -, *, /, and % are defined for pairs of objects and for objects with scalar integers or doubles (in either order). Functions abs(ob) and coerce(o1, o2) are also defined.

The signature for coerce is:

inline std::pair<Object,Object> coerce(const Object& a, const Object& b)

Unlike the C API function, this simply returns the pair after coercion.

Stream I/O

Any object can be printed using stream I/O, using std::ostream& operator<< (std::ostream& os, const Object& ob). The object's str() representation is converted to a standard string which is passed to std::ostream& operator<< (std::ostream& os, const std::string&).

Exceptions

The Python exception facility and the C++ exception facility can be merged via the use of try/catch blocks in the bodies of extension objects and module functions.

Class Exception and its children

A set of classes is provided. Each is derived from class Exception, and represents a particular sort of Python exception, such as IndexError, RuntimeError, ValueError. Each of them (other than Exception) has a constructor which takes an explanatory string as an argument, and is used in a throw statement such as:

throw IndexError("Index too large in MyObject access.");

If in using a routine from the Python API, you discover that it has returned a NULL indicating an error, then Python has already set the error message. In that case you merely throw Exception.

List of Exceptions

The exception hierarchy mirrors the Python exception hierarchy. The concrete exception classes are shown here.

Type Interface for class Exception
explicit Exception()
Exception (const std::string& reason)
Exception (PyObject* exception, const std::string& reason)
void clear()
Constructors for other children of class Exception
TypeError (const std::string& reason)
IndexError (const std::string& reason)
AttributeError (const std::string& reason)
NameError (const std::string& reason)
RuntimeError (const std::string& reason)
SystemError (const std::string& reason)
KeyError (const std::string& reason)
ValueError (const std::string& reason)
OverflowError (const std::string& reason)
ZeroDivisionError (const std::string& reason)
MemoryError (const std::string& reason)
SystemExit (const std::string& reason)

Using Exceptions in extension methods

The exception facility allows you to integrate the C++ and Python exception mechanisms. To do this, you must use the style described below when writing module methods in the old C style.

Note: If using the ExtensionModule or PythonExtension mechanisms described below, the method handlers include exception handling so that you only need to use exceptions explicitly in unusual cases.

Catching Exceptions from the Python API or PyCXX.

When writing an extension module method, you can use the following boilerplate. Any exceptions caused by the Python API or PyCXX itself will be converted into a Python exception. Note that Exception is the most general of the exceptions listed above, and therefore this one catch clause will serve to catch all of them. You may wish to catch other exceptions, not in the Exception family, in the same way. If so, you need to make sure you set the error in Python before returning.

static PyObject *
some_module_method(PyObject* self, PyObject* args)
{
    Tuple a( args ); // we know args is a Tuple
    try
    {
        ...calculate something from a...
        return ...something, usually of the form new_reference_to(some Object);
    }
    catch( const Exception& )
    {
        //Exception caught, passing it on to Python
        return None();
    }
}

How to clear an Exception

If you anticipate that an Exception may be thrown and wish to recover from it, change the catch phrase to set a reference to an Exception, and use the method clear() from class Exception to clear it.:

catch( Exception& e )
{
    e.clear();
    ...now decide what to do about it...
}

Extension Facilities

CXX/Extensions.hxx provides facilities for:

  • Creating a Python extension module
  • Creating new Python extension types

These facilities use CXX/Objects.hxx and its support file cxxsupport.cxx.

If you use CXX/Extensions.hxx you must also include source files cxxextensions.c and cxx_extensions.cxx

Creating an Python extension module

The usual method of creating a Python extension module is to declare and initialize its method table in C. This requires knowledge of the correct form for the table and the order in which entries are to be made into it, and requires casts to get everything to compile without warning. The PyCXX header file CXX/Extensions.h offers a simpler method. Here is a sample usage, in which a module named "example" is created. Note that two details are necessary:

  • The initialization function must be declared to have external C linkage and to have the expected name. This is a requirement imposed by Python
  • The ExtensionModule object must have a storage class that survives the call to the initialization function. This is most easily accomplished by using a static local inside the initialization function, as in initexample below.

To create an extension module, you inherit from class ExtensionModule templated on yourself: In the constructor, you make calls to register methods of this class with Python as extension module methods. In this example, two methods are added (this is a simplified form of the example in Demo/example.cxx):

class example_module : public ExtensionModule<example_module>
{
public:
    example_module()
    : ExtensionModule<example_module>( "example" )
    {
        add_varargs_method("sum", &example_module::ex_sum, "sum(arglist) = sum of arguments");
        add_varargs_method("test", &example_module::ex_test, "test(arglist) runs a test suite");

        initialize( "documentation for the example module" );
    }

    virtual ~example_module() {}

private:
    Object ex_sum(const Tuple &a) { ... }
    Object ex_test(const Tuple &a) { ... }
};

To initialize the extension, you just instantiate one static instance (static so it does not destroy itself!):

void initexample()
{
    static example_module* example = new example_module;
}

The methods can be written to take Tuples as arguments and return Objects. If exceptions occur they are trapped for you and a Python exception is generated. So, for example, the implementation of ex_sum might be:

Object ex_sum (const Tuple &a)
{
    Float f(0.0);
    for( int i = 0; i < a.length(); i++ )
    {
        Float g(a[i]);
        f = f + g;
    }
    return f;
}

class ExtensionModule contains methods to return itself as a Module object, or to return its dictionary.

Interface to class ExtensionModule

Type Name Comment
explicit ExtensionModule (char* name) Create an extension module named "name"
virtual ~ExtensionModule () Destructor
Dict moduleDictionary() const Returns the module dictionary; module must be initialized.
Module module() const This module as a Module.
void add_varargs_method (char *name, method_varargs_function_t method, char *documentation="") Add a method to the module.
void add_keyword_method (char *name, method_keyword_function_t method, char *documentation="" Add a method that takes keywords
void initialize() (protected, call from constructor) Initialize the module once all methods have been added.

The signatures above are:

typedef Object (T::*method_varargs_function_t)( const Tuple &args );
typedef Object (T::*method_keyword_function_t)( const Tuple &args, const Dict &kws
);

That is, the methods take a Tuple or a Tuple and a Dict, and return an Object. The example below has an & in front of the name of the method; we found one compiler that needed this.

Creating a Python extension type

One of the great things about Python is the way you can create your own object types and have Python welcome them as first-class citizens. Unfortunately, part of the way you have to do this is not great. Key to the process is the creation of a Python "type object". All instances of this type must share a reference to this one unique type object. The type object itself has a multitude of "slots" into which the addresses of functions can be added in order to give the object the desired behavior.

Creating extension objects is of course harder since you must specify how the object behaves and give it methods. This is shown in some detail in the example range.h and range.cxx, with the test routine rangetest.cxx, in directory Demo. If you have never created a Python extension before, you should read the Extension manual first and be very familiar with Python's "special class methods". Then what follows will make more sense.

The basic idea is to inherit from PythonExtension templated on your self

class MyObject: public PythonExtension<MyObject> {...}

As a consequence:

  • MyObject is a child of PyObject, so that a MyObject* is-a PyObject*.
  • A static method check(PyObject*) is created in class MyObject. This function returns a boolean, testing whether or not the argument is in fact a pointer to an instance of MyObject.
  • The user can connect methods of MyObject to Python so that they are methods on MyObject objects. Each such method has the signature:
    Object method_name (const Tuple& args).
  • The user can override virtual methods of PythonExtension in order to set behaviors.
  • A method is created to handle the deletion of an instance if and when its reference count goes to zero. This method ensures the calling of the class destructor ~MyObject(), if any, and releases the memory (see below).
  • Both automatic and heap-based instances of MyObject can be created.

Sample usage of PythonExtension

Here is a brief overview. You create a class that inherits from PythonExtension templated upon itself. You override various methods from PythonExtension to implement behaviors, such as getattr, sequence_item, etc. You can also add methods to the object that are usable from Python using a similar scheme as for module methods above.

One of the consequences of inheriting from PythonExtension is that you are inheriting from PyObject itself. So your class is-a PyObject and instances of it can be passed to the Python C API. Note: this example uses the namespace feature of PyCXX.

Hint: You can avoid needing to specify the Py:: prefix if you include the C++ statement using Py; at the top of your files.

class range: public Py::PythonExtension<range>
{
public:
    ... constructors, data, etc.
    ... methods not callable from Python
    // initializer, see below
    static void init_type();
    // override functions from PythonExtension
    virtual Py::Object repr();
    virtual Py::Object getattr( const char *name );

    virtual int sequence_length();
    virtual Py::Object sequence_item( int i );
    virtual Py::Object sequence_concat( const Py::Object &j );
    virtual Py::Object sequence_slice( int i, int j );

    // define python methods of this object
    Py::Object amethod (const Py::Tuple& args);
    Py::Object value (const Py::Tuple& args);
    Py::Object assign (const Py::Tuple& args); 
};

To initialize the type we provide a static method that we can call from some module's initializer. We set the name, doc string, and indicate which behaviors range objects support. Then we adds the methods.

void range::init_type()
{
    behaviors().name("range");
    behaviors().doc("range objects: start, stop, step");
    behaviors().supportRepr();
    behaviors().supportGetattr();
    behaviors().supportSequenceType();

    add_varargs_method("amethod", &range::amethod,
        "demonstrate how to document amethod");
    add_varargs_method("assign", &range::assign);
    add_varargs_method("value", &range::value);
}

Do not forget to add the call range::init_type() to some module's init function. You will want a method in some module that can create range objects, too.

Interface to PythonExtension <T>

Your extension class T inherits PythonExtension<T>.

Type Name Comment
virtual ~PythonExtension<T>() Destructor
PyTypeObject* type_object() const Returns the object type object.
int check (PyObject* p) Is p a T?
Protected
void add_varargs_method (char *name, method_keyword_function_t method, char *documentation="" Add a method that takes arguments
void add_keyword_method (char *name, method_keyword_function_t method, char *documentation="" Add a method that takes keywords
static PythonType& behaviors() The type object
void initialize() (protected, call from constructor) Initialize the module once all methods have been added.

As before the signatures for the methods are Object mymethod(const Tuple& args) and Object mykeywordmethod (const Tuple& args, const Dict& keys). In this case, the methods must be methods of T.

To set the behaviors of the object you override some or all of these methods from PythonExtension<T>:

virtual int print( FILE *, int );
virtual Object getattr( const char * );
virtual int setattr( const char *, const Object & );
virtual Object getattro( const Object & );
virtual int setattro( const Object &, const Object & );
virtual int compare( const Object & );
virtual int rich_compare( const Object &, int op );
virtual Object repr();
virtual Object str();
virtual long hash();
virtual Object call( const Object &, const Object & );

// Sequence methods
virtual int sequence_length();
virtual Object sequence_concat( const Object & );
virtual Object sequence_repeat( int );
virtual Object sequence_item( int );
virtual Object sequence_slice( int, int );
virtual int sequence_ass_item( int, const Object & );
virtual int sequence_ass_slice( int, int, const Object & );

// Mapping
virtual int mapping_length();
virtual Object mapping_subscript( const Object & );
virtual int mapping_ass_subscript( const Object &, const Object & );

// Number
virtual int number_nonzero();
virtual Object number_negative();
virtual Object number_positive();
virtual Object number_absolute();
virtual Object number_invert();
virtual Object number_int();
virtual Object number_float();
virtual Object number_long();
virtual Object number_oct();
virtual Object number_hex();
virtual Object number_add( const Object & );
virtual Object number_subtract( const Object & );
virtual Object number_multiply( const Object & );
virtual Object number_divide( const Object & );
virtual Object number_remainder( const Object & );
virtual Object number_divmod( const Object & );
virtual Object number_lshift( const Object & );
virtual Object number_rshift( const Object & );
virtual Object number_and( const Object & );
virtual Object number_xor( const Object & );
virtual Object number_or( const Object & );
virtual Object number_power( const Object &, const Object & );

// Buffer
virtual int buffer_getreadbuffer( int, void** );
virtual int buffer_getwritebuffer( int, void** );
virtual int buffer_getsegcount( int* );

Note that dealloc is not one of the functions you can override. That is what your destructor is for. As noted below, dealloc behavior is provided for you by PythonExtension.

Type initialization

To initialize your type, supply a static public member function that can be called from the extension module. In that function, obtain the PythonType object by calling behaviors() and apply appropriate "support" methods from PythonType to turn on the support for that behavior or set of behaviors.

void supportPrint(void);
void supportGetattr(void);
void supportSetattr(void);
void supportGetattro(void);
void supportSetattro(void);
void supportCompare(void);
void supportRichCompare(void);
void supportRepr(void);
void supportStr(void);
void supportHash(void);
void supportCall(void);

void supportSequenceType(void);
void supportMappingType(void);
void supportNumberType(void);
void supportBufferType(void);

Then call add_varargs_method or add_keyword_method to add any methods desired to the object.

Notes on memory management and extension objects

Normal Python objects exist only on the heap. That is unfortunate, as object creation and destruction can be relatively expensive. Class PythonExtension allows creation of both local and heap-based objects.

If an extension object is created using operator new, as in:

range* my_r_ref = new range(1, 20, 3)

then the entity my_r_ref can be thought of as "owning" the reference created in the new object. Thus, the object will never have a reference count of zero. If the creator wishes to delete this object, they should either make sure the reference count is 1 and then do delete my_r_ref, or decrement the reference with Py_DECREF(my_r_ref).

Should my_r_ref give up ownership by being used in an Object constructor, all will still be well. When the Object goes out of scope its destructor will be called, and that will decrement the reference count, which in turn will trigger the special dealloc routine that calls the destructor and deletes the pointer.

If the object is created with automatic scope, as in:

range my_r(1, 20, 3)

then my_r can be thought of as owning the reference, and when my_r goes out of scope the object will be destroyed. Of course, care must be taken not to have kept any permanent reference to this object. Fortunately, in the case of an exception, the C++ exception facility will call the destructor of my_r. Naturally, care must be taken not to end up with a dangling reference, but such objects can be created and destroyed more efficiently than heap-based PyObjects.

Putting it all together

The Demo directory of the distribution contains an extensive example of how to use many of the facilities in PyCXX. It also serves as a test routine. This test is not completely exhaustive but does excercise much of the facility.

pysvn-1.7.8/Import/pycxx-6.2.4/Doc/Python2/style.css000644 000771 000771 00000003047 11146615306 022235 0ustar00barrybarry000000 000000 /* Copyright (c) 2008-2009 Barry A. Scott */ h1, h2, h3, h4 { color: #000099; background-color: #aaaaff; } h3 { position: relative; left: 20px margin-right: 40px; } body { background-color: #ffffff; width: 95%; } p { position: relative; left: 20px; width: 45em; margin-right: 40px; } pre { color: #0000cc; background-color: #eeeeee; position: relative; left: 40px; margin-right: 80px; border-style: solid; border-color: black; border-width: thin; } kbd { color: #990000; } p cite, ol cite, ul cite { font-family: monospace; font-style: normal; font-size: normal; } li { width: 43em; } li var, pre var, p var, kbd var { color: #009900; font-style: italic; } li samp, pre samp, p samp, kbd samp { color: #009900; font-weight: bold; } li p { position: relative; left: 0; } table { position: relative; left: 20px; margin-right: 40px; border: solid #888888 1px; background-color: #eeeeee; } table th { border: solid #888888 1px; background-color: #88dd88; color: black; text-align: left; } table td { border: solid #888888 1px; } table td.code { border: solid #888888 1px; font-family: monospace; font-style: normal; font-size: normal; } p.param { background-color: #eeeeee; border-top: lightskyblue solid 4; } p.center { text-align: center; } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/000755 000771 000771 00000000000 11724122666 020542 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/000755 000771 000771 00000000000 11724122666 020543 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/example.cxx000644 000771 000771 00000100451 11367330334 022717 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details, see http://cxx.sourceforge.net. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifdef _MSC_VER // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "CXX/Objects.hxx" #include "CXX/Extensions.hxx" #include #include "range.hxx" // Extension object #include "test_assert.hxx" extern void test_extension_object(); #include void test_compare() { test_assert( "compare == true", true, Py::Long( 100 ) == Py::Long( 100 ) ); test_assert( "compare == false", false, Py::Long( 100 ) == Py::Long( 101 ) ); test_assert( "compare != true", true, Py::Long( 100 ) != Py::Long( 101 ) ); test_assert( "compare != false", false, Py::Long( 100 ) != Py::Long( 100 ) ); test_assert( "compare < true", true, Py::Long( 100 ) < Py::Long( 101 ) ); test_assert( "compare < false", false, Py::Long( 100 ) < Py::Long( 99 ) ); test_assert( "compare <= true", true, Py::Long( 100 ) <= Py::Long( 101 ) ); test_assert( "compare <= true", true, Py::Long( 100 ) <= Py::Long( 100 ) ); test_assert( "compare <= false", false, Py::Long( 100 ) <= Py::Long( 99 ) ); test_assert( "compare > true", true, Py::Long( 100 ) > Py::Long( 99 ) ); test_assert( "compare > false", false, Py::Long( 100 ) > Py::Long( 101 ) ); test_assert( "compare >= true", true, Py::Long( 100 ) >= Py::Long( 99 ) ); test_assert( "compare >= true", true, Py::Long( 100 ) >= Py::Long( 100 ) ); test_assert( "compare >= false", false, Py::Long( 100 ) >= Py::Long( 101 ) ); test_assert( "compare == true", true, Py::Float( 100 ) == Py::Float( 100 ) ); test_assert( "compare == false", false, Py::Float( 100 ) == Py::Float( 101 ) ); test_assert( "compare != true", true, Py::Float( 100 ) != Py::Float( 101 ) ); test_assert( "compare != false", false, Py::Float( 100 ) != Py::Float( 100 ) ); test_assert( "compare < true", true, Py::Float( 100 ) < Py::Float( 101 ) ); test_assert( "compare < false", false, Py::Float( 100 ) < Py::Float( 99 ) ); test_assert( "compare <= true", true, Py::Float( 100 ) <= Py::Float( 101 ) ); test_assert( "compare <= true", true, Py::Float( 100 ) <= Py::Float( 100 ) ); test_assert( "compare <= false", false, Py::Float( 100 ) <= Py::Float( 99 ) ); test_assert( "compare > true", true, Py::Float( 100 ) > Py::Float( 99 ) ); test_assert( "compare > false", false, Py::Float( 100 ) > Py::Float( 101 ) ); test_assert( "compare >= true", true, Py::Float( 100 ) >= Py::Float( 99 ) ); test_assert( "compare >= true", true, Py::Float( 100 ) >= Py::Float( 100 ) ); test_assert( "compare >= false", false, Py::Float( 100 ) >= Py::Float( 101 ) ); } void test_String() { Py::String s( "hello" ); Py::Char blank = ' '; Py::String r1( "world in brief", 5 ); s = s + blank + r1; test_assert( "string concat", s, "hello world" ); s = s * 2; test_assert( "string multiple", s, "hello worldhello world" ); // test conversion std::string w = static_cast( s ); std::string w2 = s; test_assert( "string convert to std::string", w, w2 ); Py::String r2( "12345 789" ); Py::Char c6 = r2[5]; test_assert( "string convert to std::string", c6, blank ); Py::Char c7 = r2.front(); Py::Char c8 = r2.back(); } void test_boolean() { bool passed = true; Py::Object o; Py::Boolean pb1; Py::Boolean pb2; Py::String st1; Py::Long int1; bool b1; // True tests o = Py::True(); test_assert( "boolean Py::True", o.isTrue(), true ); pb1 = o; test_assert( "boolean true pybool var ", pb1 ? true : false, true ); b1 = pb1; test_assert( "boolean true bool = pybool", pb1 ? true : false, true ); pb2 = pb1; test_assert( "boolean true pybool = pybool", pb2 ? true : false, true ); pb2 = true; test_assert( "boolean true pybool = true", pb2 ? true : false, true ); test_assert( "boolean operator bool true", true, bool( pb2 ) ); // False tests o = Py::False(); test_assert( "boolean Py::False", o.isTrue(), false ); pb1 = o; test_assert( "boolean false pybool var ", pb1 ? true : false, false ); b1 = pb1; test_assert( "boolean false bool = pybool", pb1 ? true : false, false ); pb2 = pb1; test_assert( "boolean false pybool = pybool", pb2 ? true : false, false ); pb2 = false; test_assert( "boolean false pybool = false", pb2 ? true : false, false ); test_assert( "boolean operator bool false", false, bool( pb2 ) ); // conversion tests int1 = 0; pb1 = int1; test_assert( "boolean int 0", pb1 ? true : false, false ); int1 = 99; pb1 = int1; test_assert( "boolean int 99", pb1 ? true : false, true ); st1 = ""; pb1 = st1; test_assert( "boolean string \"\"", pb1 ? true : false, false ); st1 = "x"; pb1 = st1; test_assert( "boolean string \"x\"", pb1 ? true : false, true ); } void test_long() { long cxx_long1( 100 ); long cxx_long2( 0 ); long cxx_long3( 0 ); Py::Long py_long1( 100 ); Py::Long py_long2( 0 ); Py::Long py_long3( 0 ); test_assert( "long constructor", cxx_long1, py_long1.as_long() ); cxx_long2 = cxx_long1++; py_long2 = py_long1++; test_assert( "long num++", cxx_long2, py_long2.as_long() ); cxx_long2 = ++cxx_long1; py_long2 = ++py_long1; test_assert( "long ++num", cxx_long2, py_long2.as_long() ); cxx_long2 = cxx_long1--; py_long2 = py_long1--; test_assert( "long num--", cxx_long2, py_long2.as_long() ); cxx_long2 = --cxx_long1; py_long2 = --py_long1; test_assert( "long --num", cxx_long2, py_long2.as_long() ); cxx_long1 = 1000; py_long1 = 1000; test_assert( "long num =", cxx_long1, py_long1.as_long() ); // comparison tests cxx_long1 = 2; cxx_long2 = 3; cxx_long3 = 3; py_long1 = cxx_long1; py_long2 = cxx_long2; py_long3 = cxx_long3; // ------------------------------------------------------------ test_assert( "long operator ==", cxx_long2 == cxx_long3, py_long2 == py_long3 ); test_assert( "long operator ==", cxx_long2 == cxx_long3, cxx_long2 == py_long3 ); test_assert( "long operator ==", cxx_long2 == cxx_long3, py_long2 == cxx_long3 ); test_assert( "long operator ==", cxx_long1 == cxx_long3, py_long1 == py_long3 ); test_assert( "long operator ==", cxx_long1 == cxx_long3, cxx_long1 == py_long3 ); test_assert( "long operator ==", cxx_long1 == cxx_long3, py_long1 == cxx_long3 ); // ------------------------------------------------------------ test_assert( "long operator !=", cxx_long1 != cxx_long2, py_long1 != py_long2 ); test_assert( "long operator !=", cxx_long1 != cxx_long2, cxx_long1 != py_long2 ); test_assert( "long operator !=", cxx_long1 != cxx_long2, py_long1 != cxx_long2 ); test_assert( "long operator !=", cxx_long2 != cxx_long3, py_long2 != py_long3 ); test_assert( "long operator !=", cxx_long2 != cxx_long3, cxx_long2 != py_long3 ); test_assert( "long operator !=", cxx_long2 != cxx_long3, py_long2 != cxx_long3 ); // ------------------------------------------------------------ test_assert( "long operator < ", cxx_long1 < cxx_long2, py_long1 < py_long2 ); test_assert( "long operator < ", cxx_long1 < cxx_long2, cxx_long1 < py_long2 ); test_assert( "long operator < ", cxx_long1 < cxx_long2, py_long1 < cxx_long2 ); test_assert( "long operator < ", cxx_long2 < cxx_long1, py_long2 < py_long1 ); test_assert( "long operator < ", cxx_long2 < cxx_long1, cxx_long2 < py_long1 ); test_assert( "long operator < ", cxx_long2 < cxx_long1, py_long2 < cxx_long1 ); // ------------------------------------------------------------ test_assert( "long operator > ", cxx_long2 > cxx_long1, py_long2 > py_long1 ); test_assert( "long operator > ", cxx_long2 > cxx_long1, cxx_long2 > py_long1 ); test_assert( "long operator > ", cxx_long2 > cxx_long1, py_long2 > cxx_long1 ); test_assert( "long operator > ", cxx_long1 > cxx_long2, py_long1 > py_long2 ); test_assert( "long operator > ", cxx_long1 > cxx_long2, cxx_long1 > py_long2 ); test_assert( "long operator > ", cxx_long1 > cxx_long2, py_long1 > cxx_long2 ); // ------------------------------------------------------------ test_assert( "long operator <=", cxx_long1 <= cxx_long2, py_long1 <= py_long2 ); test_assert( "long operator <=", cxx_long1 <= cxx_long2, cxx_long1 <= py_long2 ); test_assert( "long operator <=", cxx_long1 <= cxx_long2, py_long1 <= cxx_long2 ); test_assert( "long operator <=", cxx_long2 <= cxx_long3, py_long2 <= py_long3 ); test_assert( "long operator <=", cxx_long2 <= cxx_long3, cxx_long2 <= py_long3 ); test_assert( "long operator <=", cxx_long2 <= cxx_long3, py_long2 <= cxx_long3 ); test_assert( "long operator <=", cxx_long2 <= cxx_long1, py_long2 <= py_long1 ); test_assert( "long operator <=", cxx_long2 <= cxx_long1, cxx_long2 <= py_long1 ); test_assert( "long operator <=", cxx_long2 <= cxx_long1, py_long2 <= cxx_long1 ); // ------------------------------------------------------------ test_assert( "long operator >=", cxx_long2 >= cxx_long1, py_long2 >= py_long1 ); test_assert( "long operator >=", cxx_long2 >= cxx_long1, cxx_long2 >= py_long1 ); test_assert( "long operator >=", cxx_long2 >= cxx_long1, py_long2 >= cxx_long1 ); test_assert( "long operator >=", cxx_long2 >= cxx_long3, py_long2 >= py_long3 ); test_assert( "long operator >=", cxx_long2 >= cxx_long3, cxx_long2 >= py_long3 ); test_assert( "long operator >=", cxx_long2 >= cxx_long3, py_long2 >= cxx_long3 ); test_assert( "long operator >=", cxx_long1 >= cxx_long2, py_long1 >= py_long2 ); test_assert( "long operator >=", cxx_long1 >= cxx_long2, cxx_long1 >= py_long2 ); test_assert( "long operator >=", cxx_long1 >= cxx_long2, py_long1 >= cxx_long2 ); // ------------------------------------------------------------ test_assert( "long operator long", cxx_long2, long( py_long2 ) ); test_assert( "long operator int", int( cxx_long2 ), int( py_long2 ) ); } void test_float() { double cxx_float1( 100 ); double cxx_float2( 0 ); double cxx_float3( 0 ); Py::Float py_float1( 100.0 ); Py::Float py_float2( 0.0 ); Py::Float py_float3( 0.0 ); test_assert( "float constructor", cxx_float1, py_float1.as_double() ); cxx_float1 = 1000; py_float1 = 1000; test_assert( "float num =", cxx_float1, py_float1.as_double() ); // comparison tests cxx_float1 = 2; cxx_float2 = 3; cxx_float3 = 3; py_float1 = cxx_float1; py_float2 = cxx_float2; py_float3 = cxx_float3; //------------------------------------------------------------ test_assert( "float operator ==", cxx_float2 == cxx_float3, py_float2 == py_float3 ); test_assert( "float operator ==", cxx_float2 == cxx_float3, cxx_float2 == py_float3 ); test_assert( "float operator ==", cxx_float2 == cxx_float3, py_float2 == cxx_float3 ); test_assert( "float operator ==", cxx_float1 == cxx_float3, py_float1 == py_float3 ); test_assert( "float operator ==", cxx_float1 == cxx_float3, cxx_float1 == py_float3 ); test_assert( "float operator ==", cxx_float1 == cxx_float3, py_float1 == cxx_float3 ); //------------------------------------------------------------ test_assert( "float operator !=", cxx_float1 != cxx_float2, py_float1 != py_float2 ); test_assert( "float operator !=", cxx_float1 != cxx_float2, cxx_float1 != py_float2 ); test_assert( "float operator !=", cxx_float1 != cxx_float2, py_float1 != cxx_float2 ); test_assert( "float operator !=", cxx_float2 != cxx_float3, py_float2 != py_float3 ); test_assert( "float operator !=", cxx_float2 != cxx_float3, cxx_float2 != py_float3 ); test_assert( "float operator !=", cxx_float2 != cxx_float3, py_float2 != cxx_float3 ); //------------------------------------------------------------ test_assert( "float operator < ", cxx_float1 < cxx_float2, py_float1 < py_float2 ); test_assert( "float operator < ", cxx_float1 < cxx_float2, cxx_float1 < py_float2 ); test_assert( "float operator < ", cxx_float1 < cxx_float2, py_float1 < cxx_float2 ); test_assert( "float operator < ", cxx_float2 < cxx_float1, py_float2 < py_float1 ); test_assert( "float operator < ", cxx_float2 < cxx_float1, cxx_float2 < py_float1 ); test_assert( "float operator < ", cxx_float2 < cxx_float1, py_float2 < cxx_float1 ); //------------------------------------------------------------ test_assert( "float operator > ", cxx_float2 > cxx_float1, py_float2 > py_float1 ); test_assert( "float operator > ", cxx_float2 > cxx_float1, cxx_float2 > py_float1 ); test_assert( "float operator > ", cxx_float2 > cxx_float1, py_float2 > cxx_float1 ); test_assert( "float operator > ", cxx_float1 > cxx_float2, py_float1 > py_float2 ); test_assert( "float operator > ", cxx_float1 > cxx_float2, cxx_float1 > py_float2 ); test_assert( "float operator > ", cxx_float1 > cxx_float2, py_float1 > cxx_float2 ); //------------------------------------------------------------ test_assert( "float operator <=", cxx_float1 <= cxx_float2, py_float1 <= py_float2 ); test_assert( "float operator <=", cxx_float1 <= cxx_float2, cxx_float2 <= py_float2 ); test_assert( "float operator <=", cxx_float1 <= cxx_float2, py_float1 <= cxx_float2 ); test_assert( "float operator <=", cxx_float2 <= cxx_float3, py_float2 <= py_float3 ); test_assert( "float operator <=", cxx_float2 <= cxx_float3, cxx_float2 <= py_float3 ); test_assert( "float operator <=", cxx_float2 <= cxx_float3, py_float2 <= cxx_float3 ); test_assert( "float operator <=", cxx_float2 <= cxx_float1, py_float2 <= py_float1 ); test_assert( "float operator <=", cxx_float2 <= cxx_float1, cxx_float2 <= py_float1 ); test_assert( "float operator <=", cxx_float2 <= cxx_float1, py_float2 <= cxx_float1 ); //------------------------------------------------------------ test_assert( "float operator >=", cxx_float2 >= cxx_float1, py_float2 >= py_float1 ); test_assert( "float operator >=", cxx_float2 >= cxx_float1, cxx_float2 >= py_float1 ); test_assert( "float operator >=", cxx_float2 >= cxx_float1, py_float2 >= cxx_float1 ); test_assert( "float operator >=", cxx_float2 >= cxx_float3, py_float2 >= py_float3 ); test_assert( "float operator >=", cxx_float2 >= cxx_float3, cxx_float2 >= py_float3 ); test_assert( "float operator >=", cxx_float2 >= cxx_float3, py_float2 >= cxx_float3 ); test_assert( "float operator >=", cxx_float1 >= cxx_float2, py_float1 >= py_float2 ); test_assert( "float operator >=", cxx_float1 >= cxx_float2, cxx_float1 >= py_float2 ); test_assert( "float operator >=", cxx_float1 >= cxx_float2, py_float1 >= cxx_float2 ); //------------------------------------------------------------ test_assert( "float operator float", cxx_float2, float( py_float2 ) ); } void test_numbers() { test_long(); test_float(); // test the basic numerical classes Py::Long i; Py::Long j(2); Py::Long k = Py::Long(3); i = 2; Py::Float a; a = 3 + i; //5.0 Py::Float b( 4.0 ); a = (1.0 + 2*a + (b*3.0)/2.0 + k)/Py::Float(5); // 4.0 i = a - 1.0; // 3 test_assert( "number calculation", i.as_long(), k.as_long() ); } void test_List() { // test the Py::List class Py::List list1; Py::List list2; test_assert( "list empty len()", list1.size(), static_cast( 0 ) ); list2.append( Py::String( "list2 index 0" ) ); list2.append( Py::String( "list2 index 1" ) ); list1.append( Py::Long( 3 ) ); list1.append( Py::Float( 6.0 ) ); list1.append( list2 ); list1.append( Py::String( "world" ) ); test_assert( "list len()", static_cast( 4 ), list1.size() ); test_assert( "list index[0]", Py::Long( 3 ), list1[0] ); test_assert( "list index[1]", Py::Float( 6.0 ), list1[1] ); test_assert( "list index[-1]", Py::String( "world" ), list1[-1] ); Py::List::iterator it1 = list1.begin(); test_assert( "list iterator not end != [0]", true, it1 != list1.end() ); test_assert( "list iterator not end == [0]", false, it1 == list1.end() ); test_assert( "list iterator compare [0]", Py::Long( 3 ), *it1 ); ++it1; test_assert( "list iterator not end != [1]", true, it1 != list1.end() ); test_assert( "list iterator not end == [1]", false, it1 == list1.end() ); test_assert( "list iterator compare [1]", Py::Float( 6.0 ), *it1 ); ++it1; test_assert( "list iterator not end != [2]", true, it1 != list1.end() ); test_assert( "list iterator not end == [2]", false, it1 == list1.end() ); test_assert( "list iterator compare [2]", list2, *it1 ); ++it1; Py::List::iterator it2 = list1.end(); test_assert( "list iterator not end != [3]", true, it1 != list1.end() ); test_assert( "list iterator not end == [3]", false, it1 == list1.end() ); test_assert( "list iterator compare [3]", Py::String( "world" ), *it1 ); ++it1; test_assert( "list iterator at end != [4]", false, it1 != list1.end() ); test_assert( "list iterator at end == [4]", true, it1 == list1.end() ); list1[ 3 ] = Py::String( "hello" ); test_assert( "list index assign", list1[ 3 ], Py::String( "hello" ) ); Py::List list3; list3 = list1 + list2; test_assert( "list operator+ count", static_cast( 6 ), list3.size() ); Py::Tuple tuple1( list1 ); test_assert( "list construct from tuple", list1.size(), tuple1.size() ); } void test_Tuple() { // test the Tuple class Py::Float f1( 1.0 ); Py::Float f2( 2.0 ); Py::Float f3( 3.0 ); Py::Tuple tuple1( 3 ); tuple1[0] = f1; // should be ok since no other reference owned tuple1[1] = f2; tuple1[2] = f3; Py::Tuple tuple2( tuple1 ); Py::Tuple::iterator it2 = tuple2.begin(); test_assert( "tuple iterator not end [0]", true, it2 != tuple2.end() ); test_assert( "tuple iterator compare [0]", Py::Float( 1.0 ), *it2 ); ++it2; test_assert( "tuple iterator not end [1]", true, it2 != tuple2.end() ); test_assert( "tuple iterator compare [1]", Py::Float( 2.0 ), *it2 ); ++it2; test_assert( "tuple iterator not end [2]", true, it2 != tuple2.end() ); test_assert( "tuple iterator compare [2]", Py::Float( 3.0 ), *it2 ); ++it2; test_assert( "tuple iterator at end [3]", true, it2 == tuple2.end() ); bool test_passed = false; Py::Tuple tuple3 = tuple1; try { tuple3[0] = Py::Long( 1 ); // should fail, tuple has multiple references } catch( Py::Exception &e ) { e.clear(); test_passed = true; } test_assert( "tuple assign exception with multiple referencese", test_passed, true ); Py::List list1( tuple1 ); test_assert( "tuple construct from list", list1.size(), tuple1.size() ); Py::TupleN t0; test_assert( "TupleN construction", 0, t0.size() ); Py::TupleN t1( Py::Long( 1 ) ); test_assert( "TupleN construction", 1, t1.size() ); Py::TupleN t2( Py::Long( 1 ), Py::Long( 2 ) ); test_assert( "TupleN construction", 2, t2.size() ); Py::TupleN t3( Py::Long( 1 ), Py::Long( 2 ), Py::Long( 3 ) ); test_assert( "TupleN construction", 3, t3.size() ); Py::TupleN t4( Py::Long( 1 ), Py::Long( 2 ), Py::Long( 3 ), Py::Long( 4 ) ); test_assert( "TupleN construction", 4, t4.size() ); Py::TupleN t5( Py::Long( 1 ), Py::Long( 2 ), Py::Long( 3 ), Py::Long( 4 ), Py::Long( 5 ) ); test_assert( "TupleN construction", 5, t5.size() ); Py::TupleN t6( Py::Long( 1 ), Py::Long( 2 ), Py::Long( 3 ), Py::Long( 4 ), Py::Long( 5 ), Py::Long( 6 ) ); test_assert( "TupleN construction", 6, t6.size() ); Py::TupleN t7( Py::Long( 1 ), Py::Long( 2 ), Py::Long( 3 ), Py::Long( 4 ), Py::Long( 5 ), Py::Long( 6 ), Py::Long( 7 ) ); test_assert( "TupleN construction", 7, t7.size() ); Py::TupleN t8( Py::Long( 1 ), Py::Long( 2 ), Py::Long( 3 ), Py::Long( 4 ), Py::Long( 5 ), Py::Long( 6 ), Py::Long( 7 ), Py::Long( 8 ) ); test_assert( "TupleN construction", 8, t8.size() ); Py::TupleN t9( Py::Long( 1 ), Py::Long( 2 ), Py::Long( 3 ), Py::Long( 4 ), Py::Long( 5 ), Py::Long( 6 ), Py::Long( 7 ), Py::Long( 8 ), Py::Long( 9 ) ); test_assert( "TupleN construction", 9, t9.size() ); } void test_Dict() { // test the Dict class Py::Dict dict1; Py::List list1; Py::String str1( "two" ); dict1[ "one" ] = Py::Long( 1 ); dict1[ str1 ] = Py::Long( 2 ); dict1[ "three" ] = Py::Long( 3 ); test_assert( "dict index[char *]", dict1[ "one" ], Py::Long( 1 ) ); test_assert( "dict index[std::string]", dict1[ std::string("one") ], Py::Long( 1 ) ); test_assert( "dict index[Py::String]", dict1[ str1 ], Py::Long( 2 ) ); test_assert( "dict keys()", dict1.keys().size(), static_cast( 3 ) ); test_assert( "dict values()", dict1.values().size(), static_cast( 3 ) ); Py::Dict::iterator it1 = dict1.begin(); test_assert( "dict iterator not end != [0]", true, it1 != dict1.end() ); test_assert( "dict iterator not end == [0]", false, it1 == dict1.end() ); ++it1; test_assert( "dict iterator not end != [1]", true, it1 != dict1.end() ); test_assert( "dict iterator not end == [1]", false, it1 == dict1.end() ); ++it1; test_assert( "dict iterator not end != [2]", true, it1 != dict1.end() ); test_assert( "dict iterator not end == [2]", false, it1 == dict1.end() ); ++it1; Py::Dict::iterator it2 = dict1.end(); bool x = it1 != it2; test_assert( "x", false, x ); test_assert( "dict iterator at end != [3]", false, it1 != dict1.end() ); test_assert( "dict iterator at end == [3]", true, it1 == dict1.end() ); list1 = dict1.values(); list1.sort(); for( long k = 1; k < 4; ++k ) { test_assert( "dict values as expected", Py::Long( list1[ k-1 ] ).as_long(), k ); } Py::Dict dict2 = dict1; dict2.clear(); test_assert( "dict clear()", dict2.keys().length(), static_cast( 0 ) ); const Py::Dict c; for (Py::Dict::const_iterator it = c.begin(); it != c.end(); ++it) { } } void test_STL() { Py::List list1; list1.append( Py::Long(5) ); list1.append( Py::Long(1) ); list1.append( Py::Long(4) ); list1.append( Py::Long(2) ); list1.append( Py::Long(3) ); list1.append( Py::Long(1) ); test_assert( "STL count", 2, std::count( list1.begin(), list1.end(), Py::Long( 1 ) ) ); Py::Dict dict1; Py::String s1( "blah" ); Py::String s2( "gorf" ); dict1[ "one" ] = s1; dict1[ "two" ] = s1; dict1[ "three" ] = s2; dict1[ "four" ] = s2; Py::Dict::iterator it( dict1.begin() ); test_assert( "STL ad hoc", true, it != dict1.end() ); while( it != dict1.end() ) { Py::Dict::value_type vt( *it ); Py::String rs = vt.second.repr(); Py::Bytes bs = rs.encode( "utf-8" ); std::string ls = bs.as_std_string(); std::cout << "STL test: " << ls << std::endl; ++it; } } void debug_check_ref_queue() { #ifdef Py_TRACE_REFS // create an element to find the queue Py::Long list_element; PyObject *p_slow = list_element.ptr(); PyObject *p_fast = p_slow; do { assert( p_slow->_ob_next->_ob_prev == p_slow ); assert( p_slow->_ob_prev->_ob_next == p_slow ); p_slow = p_slow->_ob_next; p_fast = p_slow->_ob_next->_ob_next; assert( p_slow != p_fast ); } while( p_slow != list_element.ptr() ); #endif } class example_module : public Py::ExtensionModule { public: example_module() : Py::ExtensionModule( "example" ) { range::init_type(); add_varargs_method( "string", &example_module::ex_string, "string( s ) = return string" ); add_varargs_method( "sum", &example_module::ex_sum, "sum( arglist ) = sum of arguments" ); add_varargs_method( "test", &example_module::ex_test, "test( arglist ) runs a test suite" ); add_varargs_method( "range", &example_module::new_r, "range( start, stop, step )" ); add_keyword_method( "kw", &example_module::ex_keyword, "kw()" ); initialize( "documentation for the example module" ); Py::Dict d( moduleDictionary() ); Py::Object b( Py::asObject( new range( 1, 10, 2 ) ) ); d["a_constant"] = b.getAttr("c"); d["a_range"] = b; } virtual ~example_module() {} private: Py::Object ex_keyword( const Py::Tuple &args, const Py::Dict &kws ) { std::cout << "Called with " << args.length() << " normal arguments." << std::endl; Py::List names( kws.keys() ); std::cout << "and with " << names.length() << " keyword arguments:" << std::endl; for( Py::List::size_type i=0; i< names.length(); i++ ) { Py::String name( names[i] ); std::cout << " " << name << std::endl; } return Py::Long(0); } Py::Object new_r (const Py::Tuple &rargs) { if (rargs.length() < 2 || rargs.length() > 3) { throw Py::RuntimeError("Incorrect # of args to range(start,stop [,step])."); } Py::Long start( rargs[0] ); Py::Long stop( rargs[1] ); Py::Long step( 1 ); if (rargs.length() == 3) { step = rargs[2]; } std::cout << "new_r" << " start: " << start.as_long() << " stop: " << stop.as_long() << " step: " << step.as_long() << std::endl; if( start.as_long() > stop.as_long() + 1 || step.as_long() == 0 ) { throw Py::RuntimeError("Bad arguments to range( start, stop [,step] )"); } return Py::asObject( new range( start.as_long(), stop.as_long(), step.as_long() ) ); } Py::Object ex_string( const Py::Tuple &a ) { std::cout << "ex_std::string: s1 is first arg" << std::endl; Py::Object o1( a[0] ); std::cout << "ex_string: s1.isString() " << o1.isString() << std::endl; if( o1.isString() ) { Py::String s1( o1 ); std::cout << "ex_string: s1.size() " << s1.size() << std::endl; std::cout << "ex_string: s2 is s1.encode( utf-8 )" << std::endl; Py::Bytes b1( s1.encode( "utf-8" ) ); std::cout << "ex_string: s1.isString() " << b1.isString() << std::endl; std::cout << "ex_string: s1.size() " << b1.size() << std::endl; return b1; } else { Py::Bytes b1( o1 ); std::cout << "ex_string: s1 is b1.decode( utf-8 )" << std::endl; Py::String s1( b1.decode( "utf-8" ) ); std::cout << "ex_string: s1.isString() " << s1.isString() << std::endl; std::cout << "ex_string: s1.size() " << s1.size() << std::endl; return s1; } } Py::Object ex_sum (const Py::Tuple &a) { // this is just to test the function verify_length: try { a.verify_length(0); std::cout << "I see that you refuse to give me any work to do." << std::endl; } catch (Py::Exception& e) { e.clear(); std::cout << "I will now add up your elements, oh great one." << std::endl; } Py::Float f(0.0); for( Py::Sequence::size_type i = 0; i < a.length(); i++ ) { Py::Float g (a[i]); f = f + g; } return f; } Py::Object ex_test( const Py::Tuple &args ) { debug_check_ref_queue(); std::cout << "Example Test starting" << std::endl; try { Py::String s("this should fail"); Py::Long k( s.ptr() ); throw TestError( "convert a Py::String to an Py::Long must not succeed" ); } catch( Py::TypeError &e ) { std::cout << "PASSED: Correctly caught " << Py::type(e) << std::endl; std::cout << "PASSED: Py::Exception value: " << Py::value(e) << std::endl; std::cout << "PASSED: Py::Exception traceback: " << Py::trace(e) << std::endl; e.clear(); } try { debug_check_ref_queue(); std::cout << "Start: test_compare" << std::endl; test_compare(); debug_check_ref_queue(); std::cout << "Start: test_boolean" << std::endl; test_boolean(); debug_check_ref_queue(); std::cout << "Start: test_numbers" << std::endl; test_numbers(); debug_check_ref_queue(); std::cout << "Start: test_String" << std::endl; test_String(); debug_check_ref_queue(); std::cout << "Start: test_List" << std::endl; test_List(); debug_check_ref_queue(); std::cout << "Start: test_Dict" << std::endl; test_Dict(); debug_check_ref_queue(); std::cout << "Start: test_Tuple" << std::endl; test_Tuple(); debug_check_ref_queue(); std::cout << "Start: test_STL" << std::endl; test_STL(); std::cout << "Done: test_STL" << std::endl; debug_check_ref_queue(); std::cout << "Start: test_extension_object" << std::endl; test_extension_object(); debug_check_ref_queue(); } catch( TestError &e ) { std::cout << "FAILED: Test error - " << e.m_description << std::endl; } Py::Module m("sys"); Py::Object s = m.getAttr("stdout"); Py::Object nun; nun = PyObject_CallMethod(s.ptr(), "write", "s", "Module test ok.\n"); return Py::None(); } }; #if defined( _WIN32 ) #define EXPORT_SYMBOL __declspec( dllexport ) #else #define EXPORT_SYMBOL #endif extern "C" EXPORT_SYMBOL PyObject *PyInit_example() { #if defined(PY_WIN32_DELAYLOAD_PYTHON_DLL) Py::InitialisePythonIndirectPy::Interface(); #endif static example_module *example = new example_module; return example->module().ptr(); } // symbol required for the debug version extern "C" EXPORT_SYMBOL PyObject *PyInit_example_d() { return PyInit_example(); } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/example.def000644 000771 000771 00000000026 11146616710 022650 0ustar00barrybarry000000 000000 EXPORTS initexample pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/pycxx_iter.cxx000644 000771 000771 00000002721 11367330334 023463 0ustar00barrybarry000000 000000 #include "pycxx_iter.hxx" #include "CXX/Objects.hxx" void IterT::init_type() { behaviors().name( "IterT" ); behaviors().doc( "IterT( ini_count )" ); // you must have overwritten the virtual functions // Py::Object iter() and Py::Object iternext() behaviors().supportIter(); // set entries in the Type Table behaviors().supportRepr(); add_varargs_method( "reversed", &IterT::reversed, "reversed()" ); } class MyIterModule : public Py::ExtensionModule { public: MyIterModule() : Py::ExtensionModule( "pycxx_iter" ) { IterT::init_type(); add_varargs_method( "IterT", &MyIterModule::new_IterT, "IterT(from,last)" ); initialize( "MyIterModule documentation" ); // register with Python } virtual ~MyIterModule() {} private: Py::Object new_IterT( const Py::Tuple &args ) { if( args.length() != 2 ) { throw Py::RuntimeError( "Incorrect # of args to IterT(from,to)." ); } return Py::asObject( new IterT( Py::Long( args[0] ).as_long(), Py::Long( args[1] ).as_long() ) ); } }; #if defined( _WIN32 ) #define EXPORT_SYMBOL __declspec( dllexport ) #else #define EXPORT_SYMBOL #endif extern "C" EXPORT_SYMBOL PyObject *PyInit_pycxx_iter() { // the following constructor call registers our extension module // with the Python runtime system static MyIterModule *iter = new MyIterModule; return iter->module().ptr(); } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/pycxx_iter.hxx000644 000771 000771 00000003613 11146616710 023471 0ustar00barrybarry000000 000000 #include "CXX/Extensions.hxx" #include #include #include class IterT : public Py::PythonExtension { int from, count, last; int fwd_iter; bool do_it_reversed; public: static void init_type(void); // announce properties and methods IterT(int _from, int _last) : from(_from) , last(_last) , fwd_iter(0) , do_it_reversed(false) {} Py::Object repr() { std::string s; std::ostringstream s_out; s_out << "IterT count(" << count << ")"; return Py::String(s_out.str()); } Py::Object reversed(const Py::Tuple&) { do_it_reversed= true; // indicate backward iteration return Py::Object(this,false); // increment the refcount } Py::Object iter() { if( do_it_reversed ) { fwd_iter = -1; do_it_reversed=false; } else fwd_iter = 1; // indicate forward iteration return Py::Object(this,false); // increment the refcount } PyObject* iternext() { int ct; if( ! fwd_iter ) return NULL; // signal StopIteration if( fwd_iter > 0 ) { if( fwd_iter == 1 ) { ct = from; count = from+1; fwd_iter=2; } else if( count <= last ) ct= count++; else return NULL; // signal StopIteration } else if( fwd_iter == -1 ) { ct = last; count = last-1; fwd_iter=-2; } else if( count >= from ) ct= count--; else return NULL; // signal StopIteration Py::Long Result(ct); Result.increment_reference_count(); return Result.ptr(); } }; pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/python.cxx000644 000771 000771 00000004776 11146616710 022622 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- /* Minimal main program -- everything is loaded from the library */ #include "CXX/WrapPython.h" #include extern "C" int Py_Main(int argc, char** argv); extern "C" void initexample(); extern "C" void Py_Initialize(); int main(int argc, char** argv) { std::cout << "Greetings. Type from example import *; test()" << std::endl; Py_Initialize(); initexample(); return Py_Main(argc, argv); } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/range.cxx000755 000771 000771 00000013015 11146616710 022362 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifdef _MSC_VER // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning( disable: 4786 ) #endif #include "range.hxx" // Connect range objects to Python range::range( long start, long stop, long step ) : Py::PythonExtension() , m_start( start ) , m_stop( stop ) , m_step( step ) { std::cout << "range object created " << this << " " << asString() << std::endl; } range::~range() { std::cout << "range object destroyed " << this << std::endl; } long range::length() const { return (m_stop - m_start + 1)/m_step; } long range::item( int i ) const { if( i >= length() ) // this exception stops a Python for loop over range. throw Py::IndexError("index too large"); return m_start + i * m_step; } range *range::slice( int i, int j ) const { int first = m_start + i * m_step; int last = m_start + j * m_step; return new range( first, last, m_step ); } range *range::extend( int k ) const { return new range( m_start, m_stop + k, m_step); } std::string range::asString() const { std::OSTRSTREAM s; s << "range(" << m_start << ", " << m_stop << ", " << m_step << ")" << std::ends; return std::string( s.str() ); } Py::Object range::reference_count( const Py::Tuple &args ) { return Py::Long( ob_refcnt ); } Py::Object range::c_value(const Py::Tuple&) const { Py::List result; for( int i = m_start; i <= m_stop; i += m_step ) { result.append( Py::Long(i) ); } return result; } void range::c_assign( const Py::Tuple &, const Py::Object &rhs ) { Py::Tuple w( rhs ); w.verify_length( 3 ); m_start = Py::Long( w[0] ).as_long(); m_stop = Py::Long( w[1] ).as_long(); m_step = Py::Long( w[2] ).as_long(); } Py::Object range::repr() { return Py::String( asString() ); } int range::sequence_length() { return length(); } Py::Object range::sequence_item( Py_ssize_t i ) { return Py::Long( item( i ) ); } Py::Object range::sequence_concat( const Py::Object &j ) { Py::Long k( j ); return Py::asObject( extend( k.as_long() ) ); } Py::Object range::sequence_slice( Py_ssize_t i, Py_ssize_t j ) { return Py::asObject( slice( i, j ) ); } Py::Object range::getattr( const char *name ) { if( std::string( name ) == "c" ) return Py::Float( 300.0 ); if( std::string( name ) == "start" ) return Py::Long( m_start ); return getattr_methods( name ); } // "regular" methods... Py::Object range::amethod( const Py::Tuple &t ) { t.verify_length( 1 ); Py::List result; result.append( Py::Object( this ) ); result.append( t[0] ); return result; } Py::Object range::value( const Py::Tuple &t ) { return c_value( t ); } Py::Object range::assign( const Py::Tuple &t ) { t.verify_length( 2 ); Py::Tuple t1( t[0] ); // subscripts Py::Object o2( t[1] ); // rhs; c_assign ( t1, o2 ); return Py::None(); } void range::init_type() { behaviors().name( "range" ); behaviors().doc( "range objects: start, stop, step" ); behaviors().supportRepr(); behaviors().supportGetattr(); behaviors().supportSequenceType(); add_varargs_method( "amethod", &range::amethod, "demonstrate how to document amethod" ); add_varargs_method( "assign", &range::assign ); add_varargs_method( "value", &range::value ); add_varargs_method( "reference_count", &range::reference_count ); } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/range.hxx000755 000771 000771 00000010450 11146616710 022367 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __r__h #define __r__h #include "CXX/Extensions.hxx" #include STR_STREAM // Making an extension object class range: public Py::PythonExtension { public: range( long start, long stop, long step = 1L ); virtual ~range(); static void init_type(void); long length() const; long item( int i ) const; range *slice( int i, int j ) const; range *extend( int k ) const; std::string asString() const; // override functions from PythonExtension virtual Py::Object repr(); virtual Py::Object getattr( const char *name ); virtual int sequence_length(); virtual Py::Object sequence_item( Py_ssize_t i ); virtual Py::Object sequence_concat( const Py::Object &j ); virtual Py::Object sequence_slice( Py_ssize_t i, Py_ssize_t j ); // define python methods of this object Py::Object amethod( const Py::Tuple &args ); Py::Object value( const Py::Tuple &args ); Py::Object assign( const Py::Tuple &args ); Py::Object reference_count( const Py::Tuple &args ); Py::Object c_value( const Py::Tuple & ) const; void c_assign( const Py::Tuple &, const Py::Object &rhs ); private: long m_start; long m_stop; long m_step; }; class RangeSequence: public Py::SeqBase { public: explicit RangeSequence (PyObject *pyob, bool owned = false): Py::SeqBase(pyob, owned) { validate(); } explicit RangeSequence(int start, int stop, int step = 1) { set (new range(start, stop, step), true); } RangeSequence(const RangeSequence& other): Py::SeqBase(*other) { validate(); } RangeSequence& operator= (const Py::Object& rhs) { return (*this = *rhs); } RangeSequence& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set(rhsp); return *this; } virtual bool accepts(PyObject *pyob) const { return pyob && range::check(pyob); } Py::Object value(const Py::Tuple& t) const { return static_cast(ptr())->c_value(t); } void assign(const Py::Tuple& t, const Py::Object& rhs) { static_cast(ptr())->c_assign(t, rhs); } }; #endif pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/rangetest.cxx000755 000771 000771 00000010400 11353641071 023253 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifdef _MSC_VER // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning( disable: 4786 ) #endif #include "CXX/Extensions.hxx" #include "range.hxx" #include "test_assert.hxx" // This test also illustrates using the Py namespace explicitly void test_extension_object() { Py::List a; // just something that is not a range... Py::ExtensionObject r1( new range( 1, 20, 3 ) ); test_assert( "extension object check() incompatible", false, range::check( a ) ); test_assert( "extension object check() incompatible", true, range::check( r1 ) ); RangeSequence r2( 1, 10, 2 ); test_assert( "extension object index", r2[ 1 ], Py::Long( 3 ) ); // calling an extension object method using getattr Py::Callable w( r2.getAttr( "amethod" ) ); { Py::Tuple args( 1 ); Py::Long j( 3 ); args[0] = j; Py::List answer( w.apply( args ) ); test_assert( "extension object amethod 1 q1", answer[0], r2 ); test_assert( "extension object amethod 1q2", answer[1], args[0] ); } { // calling an extension object method using callMemberFunction Py::Tuple args( 1 ); Py::Long j( 3 ); args[0] = j; Py::List answer( r2.callMemberFunction( "amethod", args ) ); test_assert( "extension object amethod 2 q1", answer[0], r2 ); test_assert( "extension object amethod 2 q2", answer[1], args[0] ); } Py::Tuple nv( 3 ); nv[0] = Py::Long( 1 ); nv[1] = Py::Long( 20 ); nv[2] = Py::Long( 3 ); Py::Tuple unused; Py::List r2value; r2.assign( unused, nv ); r2value = r2.value( unused ); test_assert( "extension object q3", r2value[1], Py::Long( 4 ) ); // repeat using getattr w = r2.getAttr( "assign" ); Py::Tuple the_arguments( 2 ); the_arguments[0] = unused; the_arguments[1] = nv; w.apply( the_arguments ); { Py::ExtensionObject rheap( new range( 1, 10, 2 ) ); // delete rheap } w = r2.getAttr( "value" ); Py::Tuple one_arg( 1 ); one_arg[0] = unused; r2value = w.apply( one_arg ); test_assert( "extension object q4", r2value[1], Py::Long( 4 ) ); } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/setup.py000644 000771 000771 00000006311 11230635754 022255 0ustar00barrybarry000000 000000 #----------------------------------------------------------------------------- # # Copyright (c) 1998 - 2007, The Regents of the University of California # Produced at the Lawrence Livermore National Laboratory # All rights reserved. # # This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The # full copyright notice is contained in the file COPYRIGHT located at the root # of the PyCXX distribution. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # - Redistributions of source code must retain the above copyright notice, # this list of conditions and the disclaimer below. # - Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the disclaimer (as noted below) in the # documentation and/or materials provided with the distribution. # - Neither the name of the UC/LLNL nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF # CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. # #----------------------------------------------------------------------------- import os, sys from distutils.core import setup, Extension support_dir = os.path.normpath( os.path.join( sys.prefix, 'share', 'python%d.%d' % (sys.version_info[0],sys.version_info[1]), 'CXX') ) if os.name == 'posix': CXX_libraries = ['stdc++','m'] else: CXX_libraries = [] setup (name = "CXXDemo", version = "5.1", maintainer = "Barry Scott", maintainer_email = "barry-scott@users.sourceforge.net", description = "Demo of facility for extending Python with C++", url = "http://cxx.sourceforge.net", packages = ['CXX'], package_dir = {'CXX': '.'}, ext_modules = [ Extension('CXX.example', sources = ['example.cxx', 'range.cxx', 'rangetest.cxx', os.path.join(support_dir,'cxxsupport.cxx'), os.path.join(support_dir,'cxx_extensions.cxx'), os.path.join(support_dir,'IndirectPythonInterface.cxx'), os.path.join(support_dir,'cxxextensions.c') ], ) ] ) pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/simple.cxx000644 000771 000771 00000023547 11523511652 022565 0ustar00barrybarry000000 000000 // // Copyright (c) 2008-2010 Barry A. Scott // // // simple_moduile.cxx // // This module defines a single function. // #ifdef _MSC_VER // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "CXX/Objects.hxx" #include "CXX/Extensions.hxx" #include class new_style_class: public Py::PythonClass< new_style_class > { public: new_style_class( Py::PythonClassInstance *self, Py::Tuple &args, Py::Dict &kwds ) : Py::PythonClass< new_style_class >::PythonClass( self, args, kwds ) , m_value( "default value" ) { std::cout << "new_style_class c'tor Called with " << args.length() << " normal arguments." << std::endl; Py::List names( kwds.keys() ); std::cout << "and with " << names.length() << " keyword arguments:" << std::endl; for( Py::List::size_type i=0; i< names.length(); i++ ) { Py::String name( names[i] ); std::cout << " " << name << std::endl; } } virtual ~new_style_class() { std::cout << "~new_style_class." << std::endl; } static void init_type(void) { behaviors().name( "new_style_class" ); behaviors().doc( "documentation for new_style_class class" ); behaviors().supportGetattro(); behaviors().supportSetattro(); PYCXX_ADD_NOARGS_METHOD( func_noargs, new_style_class_func_noargs, "docs for func_noargs" ); PYCXX_ADD_VARARGS_METHOD( func_varargs, new_style_class_func_varargs, "docs for func_varargs" ); PYCXX_ADD_KEYWORDS_METHOD( func_keyword, new_style_class_func_keyword, "docs for func_keyword" ); PYCXX_ADD_NOARGS_METHOD( func_noargs_raise_exception, new_style_class_func_noargs_raise_exception, "docs for func_noargs_raise_exception" ); // Call to make the type ready for use behaviors().readyType(); } Py::Object new_style_class_func_noargs( void ) { std::cout << "new_style_class_func_noargs Called." << std::endl; std::cout << "value ref count " << m_value.reference_count() << std::endl; return Py::None(); } PYCXX_NOARGS_METHOD_DECL( new_style_class, new_style_class_func_noargs ) Py::Object new_style_class_func_varargs( const Py::Tuple &args ) { std::cout << "new_style_class_func_varargs Called with " << args.length() << " normal arguments." << std::endl; return Py::None(); } PYCXX_VARARGS_METHOD_DECL( new_style_class, new_style_class_func_varargs ) Py::Object new_style_class_func_keyword( const Py::Tuple &args, const Py::Dict &kwds ) { std::cout << "new_style_class_func_keyword Called with " << args.length() << " normal arguments." << std::endl; Py::List names( kwds.keys() ); std::cout << "and with " << names.length() << " keyword arguments:" << std::endl; for( Py::List::size_type i=0; i< names.length(); i++ ) { Py::String name( names[i] ); std::cout << " " << name << std::endl; } return Py::None(); } PYCXX_KEYWORDS_METHOD_DECL( new_style_class, new_style_class_func_keyword ) Py::Object new_style_class_func_noargs_raise_exception( void ) { std::cout << "new_style_class_func_noargs_raise_exception Called." << std::endl; throw Py::RuntimeError( "its an error" ); return Py::None(); } PYCXX_NOARGS_METHOD_DECL( new_style_class, new_style_class_func_noargs_raise_exception ) Py::Object getattro( const Py::String &name_ ) { std::string name( name_.as_std_string( "utf-8" ) ); if( name == "value" ) { return m_value; } else { return genericGetAttro( name_ ); } } int setattro( const Py::String &name_, const Py::Object &value ) { std::string name( name_.as_std_string( "utf-8" ) ); if( name == "value" ) { m_value = value; return 0; } else { return genericSetAttro( name_, value ); } } Py::String m_value; }; class old_style_class: public Py::PythonExtension< old_style_class > { public: old_style_class() { } virtual ~old_style_class() { } static void init_type(void) { behaviors().name( "old_style_class" ); behaviors().doc( "documentation for old_style_class class" ); behaviors().supportGetattr(); add_noargs_method( "old_style_class_func_noargs", &old_style_class::old_style_class_func_noargs ); add_varargs_method( "old_style_class_func_varargs", &old_style_class::old_style_class_func_varargs ); add_keyword_method( "old_style_class_func_keyword", &old_style_class::old_style_class_func_keyword ); } // override functions from PythonExtension virtual Py::Object getattr( const char *name ) { return getattr_methods( name ); } Py::Object old_style_class_func_noargs( void ) { std::cout << "old_style_class_func_noargs Called." << std::endl; return Py::None(); } Py::Object old_style_class_func_varargs( const Py::Tuple &args ) { std::cout << "old_style_class_func_varargs Called with " << args.length() << " normal arguments." << std::endl; return Py::None(); } Py::Object old_style_class_func_keyword( const Py::Tuple &args, const Py::Dict &kwds ) { std::cout << "old_style_class_func_keyword Called with " << args.length() << " normal arguments." << std::endl; Py::List names( kwds.keys() ); std::cout << "and with " << names.length() << " keyword arguments:" << std::endl; for( Py::List::size_type i=0; i< names.length(); i++ ) { Py::String name( names[i] ); std::cout << " " << name << std::endl; } return Py::None(); } }; class simple_module : public Py::ExtensionModule { public: simple_module() : Py::ExtensionModule( "simple" ) // this must be name of the file on disk e.g. simple.so or simple.pyd { old_style_class::init_type(); new_style_class::init_type(); add_varargs_method("old_style_class", &simple_module::factory_old_style_class, "documentation for old_style_class()"); add_keyword_method("func", &simple_module::func, "documentation for func()"); add_keyword_method("make_instance", &simple_module::make_instance, "documentation for make_instance()"); add_keyword_method("decode_test", &simple_module::decode_test, "documentation for decode_test()"); add_keyword_method("encode_test", &simple_module::encode_test, "documentation for encode_test()"); // after initialize the moduleDictionary will exist initialize( "documentation for the simple module" ); Py::Dict d( moduleDictionary() ); d["var"] = Py::String( "var value" ); Py::Object x( new_style_class::type() ); d["new_style_class"] = x; } virtual ~simple_module() {} private: Py::Object decode_test( const Py::Tuple &args, const Py::Dict &kwds ) { Py::Bytes s( args[0] ); return s.decode("utf-8"); } Py::Object encode_test( const Py::Tuple &args, const Py::Dict &kwds ) { Py::String s( args[0] ); return s.encode("utf-8"); } Py::Object func( const Py::Tuple &args, const Py::Dict &kwds ) { std::cout << "func Called with " << args.length() << " normal arguments." << std::endl; Py::List names( kwds.keys() ); std::cout << "and with " << names.length() << " keyword arguments:" << std::endl; for( Py::List::size_type i=0; i< names.length(); i++ ) { Py::String name( names[i] ); std::cout << " " << name << std::endl; } #ifdef PYCXX_DEBUG if( args.length() > 0 ) { Py::Object x( args[0] ); PyObject *x_p = x.ptr(); std::cout << "func( self=0x" << std::hex << reinterpret_cast< unsigned int >( x_p ) << std::dec << " )" << std::endl; Py::PythonClassInstance *instance_wrapper = reinterpret_cast< Py::PythonClassInstance * >( x_p ); new_style_class *instance = static_cast( instance_wrapper->cxx_object ); std::cout << " self->cxx_object=0x" << std::hex << reinterpret_cast< unsigned int >( instance ) << std::dec << std::endl; } bpt(); #endif return Py::None(); } Py::Object make_instance( const Py::Tuple &args, const Py::Dict &kwds ) { std::cout << "make_instance Called with " << args.length() << " normal arguments." << std::endl; Py::List names( kwds.keys() ); std::cout << "and with " << names.length() << " keyword arguments:" << std::endl; for( Py::List::size_type i=0; i< names.length(); i++ ) { Py::String name( names[i] ); std::cout << " " << name << std::endl; } Py::Callable class_type( new_style_class::type() ); Py::PythonClassObject new_style_obj( class_type.apply( args, kwds ) ); return new_style_obj; } Py::Object factory_old_style_class( const Py::Tuple &rargs ) { Py::Object obj = Py::asObject( new old_style_class ); return obj; } }; #if defined( _WIN32 ) #define EXPORT_SYMBOL __declspec( dllexport ) #else #define EXPORT_SYMBOL #endif extern "C" EXPORT_SYMBOL PyObject *PyInit_simple() { #if defined(PY_WIN32_DELAYLOAD_PYTHON_DLL) Py::InitialisePythonIndirectPy::Interface(); #endif static simple_module* simple = new simple_module; return simple->module().ptr(); } #if defined( _WIN32 ) #define EXPORT_SYMBOL __declspec( dllexport ) #else #define EXPORT_SYMBOL #endif // symbol required for the debug version extern "C" EXPORT_SYMBOL PyObject *PyInit_simple_d() { return PyInit_simple(); } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/simple2.cxx000644 000771 000771 00000021204 11146616710 022635 0ustar00barrybarry000000 000000 // // Copyright (c) 2008 Barry A. Scott // // // simple2_moduile.cxx // // This module defines a single function. // #ifdef _MSC_VER // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "CXX/Objects.hxx" #include "CXX/Extensions.hxx" #include #include template class EnumString { public: EnumString(); ~EnumString() {} const std::string &toTypeName( T ) { return m_type_name; } const std::string &toString( T value ) { static std::string not_found( "-unknown-" ); EXPLICIT_TYPENAME std::map::iterator it = m_enum_to_string.find( value ); if( it != m_enum_to_string.end() ) return (*it).second; not_found = "-unknown ("; int u1000 = value/1000 % 10; int u100 = value/100 % 10; int u10 = value/10 % 10; int u1 = value % 10; not_found += char( '0' + u1000 ); not_found += char( '0' + u100 ); not_found += char( '0' + u10 ); not_found += char( '0' + u1 ); not_found += ")-"; return not_found; } bool toEnum( const std::string &string, T &value ) { EXPLICIT_TYPENAME std::map::iterator it = m_string_to_enum.find( string ); if( it != m_string_to_enum.end() ) { value = (*it).second; return true; } return false; } EXPLICIT_TYPENAME std::map::iterator begin() { return m_string_to_enum.begin(); } EXPLICIT_TYPENAME std::map::iterator end() { return m_string_to_enum.end(); } private: void add( T value, std::string string ) { m_string_to_enum[string] = value; m_enum_to_string[value] = string; } std::string m_type_name; std::map m_string_to_enum; std::map m_enum_to_string; }; template class pysvn_enum_value : public Py::PythonExtension< EXPLICIT_CLASS pysvn_enum_value > { public: pysvn_enum_value( T _value) : Py::PythonExtension() , m_value( _value ) { } virtual ~pysvn_enum_value() { } virtual int compare( const Py::Object &other ) { if( pysvn_enum_value::check( other ) ) { pysvn_enum_value *other_value = static_cast( other.ptr() ); if( m_value == other_value->m_value ) return 0; if( m_value > other_value->m_value ) return 1; else return -1; } else { std::string msg( "expecting " ); msg += toTypeName( m_value ); msg += " object for compare "; throw Py::AttributeError( msg ); } } virtual Py::Object repr() { std::string s("<"); s += toTypeName( m_value ); s += "."; s += toString( m_value ); s += ">"; return Py::String( s ); } virtual Py::Object str() { return Py::String( toString( m_value ) ); } // need a hash so that the enums can go into a map virtual long hash() { static Py::String type_name( toTypeName( m_value ) ); // use the m_value plus the hash of the type name return long( m_value ) + type_name.hashValue(); } static void init_type(void); public: T m_value; }; //------------------------------------------------------------ template class pysvn_enum : public Py::PythonExtension< EXPLICIT_CLASS pysvn_enum > { public: pysvn_enum() : Py::PythonExtension() { } virtual ~pysvn_enum() { } virtual Py::Object getattr( const char *_name ) { std::string name( _name ); T value; if( name == "__methods__" ) { return Py::List(); } if( name == "__members__" ) { return memberList( static_cast( 0 ) ); } if( toEnum( name, value ) ) { return Py::asObject( new pysvn_enum_value( value ) ); } return this->getattr_methods( _name ); } static void init_type(void); }; template const std::string &toTypeName( T value ) { static EnumString< T > enum_map; return enum_map.toTypeName( value ); } template const std::string &toString( T value ) { static EnumString< T > enum_map; return enum_map.toString( value ); } template bool toEnum( const std::string &string, T &value ) { static EnumString< T > enum_map; return enum_map.toEnum( string, value ); } template Py::List memberList( T value ) { static EnumString< T > enum_map; Py::List members; EXPLICIT_TYPENAME std::map::iterator it = enum_map.begin(); while( it != enum_map.end() ) { members.append( Py::String( (*it).first ) ); ++it; } return members; } typedef enum { xxx_first = 1, xxx_second, xxx_third } xxx_t; template <> EnumString< xxx_t >::EnumString() : m_type_name( "xxx" ) { add( xxx_first, "first" ); add( xxx_second, "second" ); add( xxx_third, "third" ); } template <> void pysvn_enum< xxx_t >::init_type(void) { behaviors().name("xxx"); behaviors().doc("xxx enumeration"); behaviors().supportGetattr(); } template <> void pysvn_enum_value< xxx_t >::init_type(void) { behaviors().name("xxx"); behaviors().doc("xxx value"); behaviors().supportRepr(); behaviors().supportStr(); behaviors().supportHash(); } class cls: public Py::PythonExtension< cls > { public: cls() { } virtual ~cls() { } static void init_type(void) { behaviors().name( "cls" ); behaviors().doc( "documentation for cls class" ); behaviors().supportGetattr(); add_noargs_method( "cls_func_noargs", &cls::cls_func_noargs ); add_varargs_method( "cls_func_varargs", &cls::cls_func_varargs ); add_keyword_method( "cls_func_keyword", &cls::cls_func_keyword ); } // override functions from PythonExtension virtual Py::Object getattr( const char *name ) { return getattr_methods( name ); } Py::Object cls_func_noargs( void ) { std::cout << "cls_func_noargs Called." << std::endl; return Py::None(); } Py::Object cls_func_varargs( const Py::Tuple &args ) { std::cout << "cls_func_varargs Called with " << args.length() << " normal arguments." << std::endl; return Py::None(); } Py::Object cls_func_keyword( const Py::Tuple &args, const Py::Dict &kws ) { std::cout << "cls_func_keyword Called with " << args.length() << " normal arguments." << std::endl; Py::List names( kws.keys() ); std::cout << "and with " << names.length() << " keyword arguments:" << std::endl; for( Py::List::size_type i=0; i< names.length(); i++ ) { Py::String name( names[i] ); std::cout << " " << name << std::endl; } return Py::None(); } }; class simple2_module : public Py::ExtensionModule { public: simple2_module() : Py::ExtensionModule( "simple2" ) // this must be name of the file on disk e.g. simple2.so or simple2.pyd { cls::init_type(); pysvn_enum< xxx_t >::init_type(); pysvn_enum_value< xxx_t >::init_type(); add_varargs_method("cls", &simple2_module::factory_cls, "documentation for cls()"); add_keyword_method("func", &simple2_module::func, "documentation for func()"); // after initialize the moduleDictionary with exist initialize( "documentation for the simple2 module" ); Py::Dict d( moduleDictionary() ); d["xxx"] = Py::asObject( new pysvn_enum< xxx_t >() ); d["var"] = Py::String( "var value" ); } virtual ~simple2_module() {} private: Py::Object func( const Py::Tuple &args, const Py::Dict &kws ) { return Py::None(); } Py::Object factory_cls( const Py::Tuple &rargs ) { return Py::asObject( new cls ); } }; extern "C" PyObject *PyInit_simple2() { #if defined(PY_WIN32_DELAYLOAD_PYTHON_DLL) Py::InitialisePythonIndirectPy::Interface(); #endif static simple2_module* simple2 = new simple2_module; return simple2->module().ptr(); } // symbol required for the debug version extern "C" PyObject *PyInit_simple2_d() { return PyInit_simple2(); } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/test_assert.hxx000644 000771 000771 00000005531 11541734230 023631 0ustar00barrybarry000000 000000 // // Copyright (c) 2008-2009 Barry A. Scott // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // // test_assert.hxx // class TestError { public: TestError( const std::string &description ) : m_description( description ) {} ~TestError() {} std::string m_description; }; template static void test_assert_scaler( const char *description, const char *type, T benchmark, T value ) { std::ostringstream full_description; full_description << description << ": " << type << " benchmark=" << benchmark << " " << type << " value=" << value; if( benchmark != value ) { throw TestError( full_description.str() ); } else { std::cout << "PASSED: " << full_description.str() << std::endl; } } static void test_assert( const char *description, bool benchmark, bool value ) { test_assert_scaler( description, "bool", benchmark, value ); } static void test_assert( const char *description, long benchmark, long value ) { test_assert_scaler( description, "long", benchmark, value ); } static void test_assert( const char *description, int benchmark, int value ) { test_assert_scaler( description, "int", benchmark, value ); } static void test_assert( const char *description, size_t benchmark, size_t value ) { test_assert_scaler( description, "size_t", benchmark, value ); } static void test_assert( const char *description, int benchmark, size_t value ) { test_assert_scaler( description, "size_t", size_t( benchmark ), value ); } static void test_assert( const char *description, double benchmark, double value ) { test_assert_scaler( description, "float", benchmark, value ); } static void test_assert( const char *description, const std::string &benchmark, const std::string &value ) { test_assert_scaler( description, "std::string", benchmark, value ); } static void test_assert( const char *description, const Py::Object &benchmark, const Py::Object &value ) { test_assert_scaler( description, "Py::Object", benchmark, value ); } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/test_example.py000644 000771 000771 00000004257 11146616710 023613 0ustar00barrybarry000000 000000 #----------------------------------------------------------------------------- # # Copyright (c) 1998 - 2007, The Regents of the University of California # Produced at the Lawrence Livermore National Laboratory # All rights reserved. # # This file is part of PyCXX. For details,see http:#cxx.sourceforge.net/. The # full copyright notice is contained in the file COPYRIGHT located at the root # of the PyCXX distribution. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # - Redistributions of source code must retain the above copyright notice, # this list of conditions and the disclaimer below. # - Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the disclaimer (as noted below) in the # documentation and/or materials provided with the distribution. # - Neither the name of the UC/LLNL nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF # CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. # #----------------------------------------------------------------------------- import sys sys.path.insert( 0, 'pyds%d%d' % (sys.version_info[0], sys.version_info[1]) ) import example example.test() pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/test_pycxx_iter.py000644 000771 000771 00000000473 11146616710 024352 0ustar00barrybarry000000 000000 import sys sys.path.insert( 0, 'pyds%d%d' % (sys.version_info[0], sys.version_info[1]) ) import pycxx_iter it = pycxx_iter.IterT( 5, 7 ) for i in it: print( i, it ) print( "refcount of it:", sys.getrefcount( it ) ) for i in it.reversed(): print( i ) print( "refcount of it:", sys.getrefcount( it ) ) pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/test_simple.py000644 000771 000771 00000003347 11347772667 023471 0ustar00barrybarry000000 000000 import simple print( '--- module func ---' ) simple.func() simple.func( 4, 5 ) simple.func( 4, 5, name=6, value=7 ) print( '--- old_style_class func ---' ) old_style_class = simple.old_style_class() old_style_class.old_style_class_func_noargs() old_style_class.old_style_class_func_varargs() old_style_class.old_style_class_func_varargs( 4 ) old_style_class.old_style_class_func_keyword() old_style_class.old_style_class_func_keyword( name=6, value=7 ) old_style_class.old_style_class_func_keyword( 4, 5 ) old_style_class.old_style_class_func_keyword( 4, 5, name=6, value=7 ) print( '--- Derived func ---' ) class Derived(simple.new_style_class): def __init__( self ): simple.new_style_class.__init__( self ) def derived_func( self ): print( 'derived_func' ) super().func_noargs() def func_noargs( self ): print( 'derived func_noargs' ) d = Derived() print( dir( d ) ) d.derived_func() d.func_noargs() d.func_varargs() d.func_varargs( 4 ) d.func_keyword() d.func_keyword( name=6, value=7 ) d.func_keyword( 4, 5 ) d.func_keyword( 4, 5, name=6, value=7 ) print( d.value ) d.value = "a string" print( d.value ) d.new_var = 99 print( '--- new_style_class func ---' ) new_style_class = simple.new_style_class() print( dir( new_style_class ) ) new_style_class.func_noargs() new_style_class.func_varargs() new_style_class.func_varargs( 4 ) new_style_class.func_keyword() new_style_class.func_keyword( name=6, value=7 ) new_style_class.func_keyword( 4, 5 ) new_style_class.func_keyword( 4, 5, name=6, value=7 ) try: new_style_class.func_noargs_raise_exception() print( 'Error: did not raised RuntimeError' ) sys.exit( 1 ) except RuntimeError as e: print( 'Raised %r' % (str(e),) ) new_style_class = None pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python3/test_simple2.py000644 000771 000771 00000000216 11146066410 023516 0ustar00barrybarry000000 000000 import simple2 m = { simple2.xxx.first: 1, simple2.xxx.second: 2, simple2.xxx.third: 3 } v = m[ simple2.xxx.second ] print( v ) pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/example.cxx000644 000771 000771 00000044716 11367330334 022731 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details, see http://cxx.sourceforge.net. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifdef _MSC_VER // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "CXX/Objects.hxx" #include "CXX/Extensions.hxx" #include #include "range.hxx" // Extension object extern std::string test_extension_object(); #include static std::string test_String() { Py::String s("hello"); Py::Char blank = ' '; Py::String r1("world in brief", 5); s = s + blank + r1; s = s * 2; if(std::string(s) != "hello worldhello world") { return "failed (1) '" + std::string(s) + "'"; } // test conversion std::string w = static_cast(s); std::string w2 = (std::string) s; if(w != w2) { return "failed (2)"; } Py::String r2("12345 789"); Py::Char c6 = r2[5]; if(c6 != blank) { std::cout << "|" << c6 << "|" << std::endl; return "failed (3)"; } Py::Char c7 = r2.front(); Py::Char c8 = r2.back(); return "ok"; } static std::string test_boolean() { bool passed = true; Py::Object o; Py::Boolean pb1; Py::Boolean pb2; bool b1; o = Py::True(); if( o.isTrue() ) { std::cout << "OK: T1: True" << std::endl; } else { std::cout << "Bad: T1: False" << std::endl; passed = false; } pb1 = o; if( pb1 ) { std::cout << "OK: T2: True" << std::endl; } else { std::cout << "Bad: T2: False" << std::endl; passed = false; } b1 = pb1; if( b1 ) { std::cout << "OK: T3: True" << std::endl; } else { std::cout << "Bad: T3: False" << std::endl; passed = false; } pb2 = pb1; if( pb2 ) { std::cout << "OK: T4: True" << std::endl; } else { std::cout << "Bad: T4: False" << std::endl; passed = false; } pb2 = true; if( pb2 ) { std::cout << "OK: T5: True" << std::endl; } else { std::cout << "Bad: T5: False" << std::endl; passed = false; } o = Py::False(); if( o.isTrue() ) { std::cout << "Bad: F1: True" << std::endl; passed = false; } else { std::cout << "OK: F1: False" << std::endl; } pb1 = o; if( pb1 ) { std::cout << "Bad: F2: True" << std::endl; passed = false; } else { std::cout << "OK: F2: False" << std::endl; } b1 = pb1; if( b1 ) { std::cout << "Bad: F3: True" << std::endl; passed = false; } else { std::cout << "OK: F3: False" << std::endl; } pb2 = pb1; if( pb2 ) { std::cout << "Bad: F4: True" << std::endl; passed = false; } else { std::cout << "OK: F4: False" << std::endl; } pb2 = false; if( pb2 ) { std::cout << "Bad: F5: True" << std::endl; passed = false; } else { std::cout << "OK: F5: False" << std::endl; } if( passed ) return "ok"; else return "failed"; } static std::string test_numbers() { // test the basic numerical classes Py::Int i; Py::Int j(2); Py::Int k = Py::Int(3); if (! (j < k)) return "failed (1)"; if (! (j == j)) return "failed (2)" ; if (! (j != k)) return "failed (3)"; if (! (j <= k)) return "failed (4)"; if (! (k >= j)) return "failed (5)"; if (! (k > j)) return "failed (6)"; if (! (j <= j)) return "failed (7)"; if (! (j >= Py::Int(2))) return "failed (8)"; i = 2; Py::Float a; a = 3 + i; //5.0 Py::Float b(4.0); a = (1.0 + 2*a + (b*3.0)/2.0 + k)/Py::Float(5); // 4.0 i = a - 1.0; // 3 if(i != k) { return "failed 9"; } return "ok"; } static std::string test_List_iterators (const Py::List& x, Py::List& y) { std::vector v; Py::Sequence::iterator j; int k = 0; for(Py::Sequence::const_iterator i = x.begin(); i != x.end(); ++i) { if ((*i).isList()) { ++k; } } if(k!=1) return "failed List iterators (1)"; k = 0; for(j = y.begin(); j != y.end(); ++j) { *j = Py::Int(k++); v.push_back (*j); } k = 0; for(j = y.begin(); j != y.end(); j++) { if(*j != Py::Int(k)) return "failed List iterators (2)"; if(v[k] != Py::Int(k)) return "failed List iterators (3)"; ++k; } Py::String o1("Howdy"); Py::Int o2(1); int caught_it = 0; try { o2 = o1; } catch (Py::Exception& e) { caught_it = 1; e.clear(); } if(!caught_it) return "failed exception catch (4)."; return "ok"; } static Py::List test_List_references (Py::List& x) { Py::List y; for(Py::List::size_type i=0; i < x.length(); ++i) { if (x[i].isList()) { y = x[i]; } } return y; } static std::string test_List() { // test the Py::List class Py::List a; Py::List ans, aux; aux.append(Py::Int(3)); aux.append(Py::Float(6.0)); Py::Object b; Py::Int i(3); Py::Float x(6.0); Py::Float c(10.0), d(20.0); a.append(i); a.append(x); a.append(Py::Float(0.0)); b = a[0]; a[2] = b; a.append(c+d); a.append(aux); // a is now [3, 6.0, 3, 30.0, aux] ans.append(Py::Int(3)); ans.append(Py::Float(6.0)); ans.append(Py::Int(3)); ans.append(Py::Float(30.0)); ans.append(aux); Py::List::iterator l1, l2; for(l1= a.begin(), l2 = ans.begin(); l1 != a.end() && l2 != ans.end(); ++l1, ++l2) { if(*l1 != *l2) return "failed 1" + a.as_string(); } if (test_List_references (a)!= aux) { return "failed 2" + test_List_references(a).as_string(); } return test_List_iterators(ans, a); } static std::string test_Dict() { // test the Dict class Py::Dict a,b; Py::List v; Py::String s("two"); a["one"] = Py::Int(1); a[s] = Py::Int(2); a["three"] = Py::Int(3); if(Py::Int(a["one"]) != Py::Int(1)) return "failed 1a " + a.as_string(); if(Py::Int(a[s]) != Py::Int(2)) return "failed 1b " + a.as_string(); v = a.values(); #if 0 std::sort(v.begin(), v.end()); for(int k = 1; k < 4; ++k) { if(v[k-1] != Py::Int(k)) return "failed 2 " + v.as_string(); } #endif b = a; b.clear(); if(b.keys().length() != 0) { return "failed 3 " + b.as_string(); } const Py::Dict c; for (Py::Dict::const_iterator it = c.begin(); it != c.end(); ++it) { } return "ok"; } static std::string test_Tuple() { // test the Tuple class Py::Tuple a(3); Py::Tuple t; Py::Float f1(1.0), f2(2.0), f3(3.0); a[0] = f1; // should be ok since no other reference owned a[1] = f2; a[2] = f3; Py::Tuple b(a); int k = 0; for(Py::Tuple::iterator i = b.begin(); i != b.end(); ++i) { if(*i != Py::Float(++k)) return "failed 1 " + b.as_string(); } t = a; try { t[0] = Py::Int(1); // should fail, tuple has multiple references return "failed 2"; } catch (Py::Exception& e) { e.clear(); } Py::TupleN t0; Py::TupleN t1( Py::Int( 1 ) ); Py::TupleN t2( Py::Int( 1 ), Py::Int( 2 ) ); Py::TupleN t3( Py::Int( 1 ), Py::Int( 2 ), Py::Int( 3 ) ); Py::TupleN t4( Py::Int( 1 ), Py::Int( 2 ), Py::Int( 3 ), Py::Int( 4 ) ); Py::TupleN t5( Py::Int( 1 ), Py::Int( 2 ), Py::Int( 3 ), Py::Int( 4 ), Py::Int( 5 ) ); Py::TupleN t6( Py::Int( 1 ), Py::Int( 2 ), Py::Int( 3 ), Py::Int( 4 ), Py::Int( 5 ), Py::Int( 6 ) ); Py::TupleN t7( Py::Int( 1 ), Py::Int( 2 ), Py::Int( 3 ), Py::Int( 4 ), Py::Int( 5 ), Py::Int( 6 ), Py::Int( 7 ) ); Py::TupleN t8( Py::Int( 1 ), Py::Int( 2 ), Py::Int( 3 ), Py::Int( 4 ), Py::Int( 5 ), Py::Int( 6 ), Py::Int( 7 ), Py::Int( 8 ) ); Py::TupleN t9( Py::Int( 1 ), Py::Int( 2 ), Py::Int( 3 ), Py::Int( 4 ), Py::Int( 5 ), Py::Int( 6 ), Py::Int( 7 ), Py::Int( 8 ), Py::Int( 9 ) ); return "ok"; } static std::string test_STL() { int ans1; Py::List w; Py::List wans; wans.append(Py::Int(1)); wans.append(Py::Int(1)); wans.append(Py::Int(2)); wans.append(Py::Int(3)); wans.append(Py::Int(4)); wans.append(Py::Int(5)); w.append(Py::Int(5)); w.append(Py::Int(1)); w.append(Py::Int(4)); w.append(Py::Int(2)); w.append(Py::Int(3)); w.append(Py::Int(1)); ans1 = std::count(w.begin(), w.end(), Py::Float(1.0)); if (ans1 != 2) { return "failed count test"; } #if 0 std::sort(w.begin(), w.end()); if (w != wans) { return "failed sort test"; } #endif Py::Dict d; Py::String s1("blah"); Py::String s2("gorf"); d[ "one" ] = s1; d[ "two" ] = s1; d[ "three" ] = s2; d[ "four" ] = s2; Py::Dict::iterator it = d.begin(); for( ; it != d.end(); ++it ) { Py::Dict::value_type vt( *it ); Py::String rs = vt.second.repr(); std::string ls = rs.operator std::string(); std::cout << "dict value " << ls.c_str() << std::endl; } return "ok"; } void debug_check_ref_queue() { #ifdef Py_TRACE_REFS // create an element to find the queue Py::Int list_element; PyObject *p_slow = list_element.ptr(); PyObject *p_fast = p_slow; do { assert( p_slow->_ob_next->_ob_prev == p_slow ); assert( p_slow->_ob_prev->_ob_next == p_slow ); p_slow = p_slow->_ob_next; p_fast = p_slow->_ob_next->_ob_next; assert( p_slow != p_fast ); } while( p_slow != list_element.ptr() ); #endif } class example_module : public Py::ExtensionModule { public: example_module() : Py::ExtensionModule( "example" ) { range::init_type(); add_varargs_method("string", &example_module::ex_string, "string( s ) = return string"); add_varargs_method("sum", &example_module::ex_sum, "sum(arglist) = sum of arguments"); add_varargs_method("test", &example_module::ex_test, "test(arglist) runs a test suite"); add_varargs_method("range", &example_module::new_r, "range(start,stop,stride)"); add_keyword_method("kw", &example_module::ex_keyword, "kw()"); initialize( "documentation for the example module" ); Py::Dict d( moduleDictionary() ); Py::Object b(Py::asObject(new range(1,10,2))); d["a_constant"] = b.getAttr("c"); } virtual ~example_module() {} private: Py::Object ex_keyword( const Py::Tuple &args, const Py::Dict &kws ) { std::cout << "Called with " << args.length() << " normal arguments." << std::endl; Py::List names( kws.keys() ); std::cout << "and with " << names.length() << " keyword arguments:" << std::endl; for( Py::List::size_type i=0; i< names.length(); i++ ) { Py::String name( names[i] ); std::cout << " " << name << std::endl; } return Py::Int(0); } Py::Object new_r (const Py::Tuple &rargs) { if (rargs.length() < 2 || rargs.length() > 3) { throw Py::RuntimeError("Incorrect # of args to range(start,stop [,step])."); } Py::Int start(rargs[0]); Py::Int stop(rargs[1]); Py::Int step(1); if (rargs.length() == 3) { step = rargs[2]; } if (long(start) > long(stop) + 1 || long(step) == 0) { throw Py::RuntimeError("Bad arguments to range(start,stop [,step])."); } return Py::asObject(new range(start, stop, step)); } Py::Object ex_string (const Py::Tuple &a) { std::cout << "ex_std::string: s1 is first arg" << std::endl; Py::String s1( a[0] ); std::cout << "ex_string: s1.isString() " << s1.isString() << std::endl; std::cout << "ex_string: s1.isUnicode() " << s1.isUnicode() << std::endl; std::cout << "ex_string: s1.size() " << s1.size() << std::endl; if( s1.isUnicode() ) { std::cout << "ex_string: s2 is s1.encode( utf-8 )" << std::endl; Py::String s2( s1.encode( "utf-8" ) ); std::cout << "ex_string: s2.isString() " << s2.isString() << std::endl; std::cout << "ex_string: s2.isUnicode() " << s2.isUnicode() << std::endl; std::cout << "ex_string: s2.size() " << s2.size() << std::endl; return s2; } else { std::cout << "ex_string: s2 is s1.decode( utf-8 )" << std::endl; Py::String s2( s1.decode( "utf-8" ) ); std::cout << "ex_string: s2.isString() " << s2.isString() << std::endl; std::cout << "ex_string: s2.isUnicode() " << s2.isUnicode() << std::endl; std::cout << "ex_string: s2.size() " << s2.size() << std::endl; return s2; } } Py::Object ex_sum (const Py::Tuple &a) { // this is just to test the function verify_length: try { a.verify_length(0); std::cout << "I see that you refuse to give me any work to do." << std::endl; } catch (Py::Exception& e) { e.clear(); std::cout << "I will now add up your elements, oh great one." << std::endl; } Py::Float f(0.0); for( Py::Sequence::size_type i = 0; i < a.length(); i++ ) { Py::Float g (a[i]); f = f + g; } return f; } Py::Object ex_test( const Py::Tuple &a) { debug_check_ref_queue(); std::cout << "Example Test starting" << std::endl; try { PyObject *p = NULL; std::cout << "Trying to convert a NULL to an Py::Int" << std::endl; Py::Int k( p ); std::cout << "Failed to raise error" << std::endl; } catch (Py::TypeError& e) { std::cout << "Correctly caught " << Py::type(e) << std::endl; std::cout << " Py::Exception value: " << Py::value(e) << std::endl; std::cout << " Py::Exception traceback: " << Py::trace(e) << std::endl; e.clear(); } try { Py::String s("this should fail"); PyObject *p = s.ptr(); std::cout << "Trying to convert a Py::String to an Py::Int" << std::endl; Py::Int k( p ); std::cout << "Failed to raise error" << std::endl; } catch (Py::TypeError& e) { std::cout << "Correctly caught " << Py::type(e) << std::endl; std::cout << " Py::Exception value: " << Py::value(e) << std::endl; std::cout << " Py::Exception traceback: " << Py::trace(e) << std::endl; e.clear(); } debug_check_ref_queue(); std::string result = test_boolean(); std::cout << "Py::Boolean: " << result << std::endl; debug_check_ref_queue(); std::cout << "Numbers: " << test_numbers() << std::endl; debug_check_ref_queue(); std::cout << "Py::String: " << test_String() << std::endl; debug_check_ref_queue(); std::cout << "Py::List: " << test_List() << std::endl; debug_check_ref_queue(); std::cout << "Py::Dict: " << test_Dict() << std::endl; debug_check_ref_queue(); std::cout << "Py::Tuple: " << test_Tuple() << std::endl; debug_check_ref_queue(); std::cout << "STL test: " << test_STL() << std::endl; debug_check_ref_queue(); std::cout << "Extension object test: " << test_extension_object() << std::endl; debug_check_ref_queue(); Py::List b(a); Py::Tuple c(b); if( c != a) { std::cout << "Py::Tuple/list conversion failed.\n"; } Py::Module m("sys"); Py::Object s = m.getAttr("stdout"); Py::Object nun; nun = PyObject_CallMethod(s.ptr(), "write", "s", "Module test ok.\n"); return Py::None(); } }; #if defined( _WIN32 ) #define EXPORT_SYMBOL __declspec( dllexport ) #else #define EXPORT_SYMBOL #endif extern "C" EXPORT_SYMBOL void initexample() { #if defined(PY_WIN32_DELAYLOAD_PYTHON_DLL) Py::InitialisePythonIndirectPy::Interface(); #endif static example_module* example = new example_module; } // symbol required for the debug version extern "C" EXPORT_SYMBOL void initexample_d() { initexample(); } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/example.def000644 000771 000771 00000000026 11146616710 022647 0ustar00barrybarry000000 000000 EXPORTS initexample pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/pycxx_iter.cxx000644 000771 000771 00000002561 11367330334 023464 0ustar00barrybarry000000 000000 #include "pycxx_iter.hxx" #include "CXX/Objects.hxx" void IterT::init_type() { behaviors().name("IterT"); behaviors().doc("IterT(ini_count)"); // you must have overwritten the virtual functions // Py::Object iter() and Py::Object iternext() behaviors().supportIter(); // set entries in the Type Table behaviors().supportRepr(); add_varargs_method("reversed",&IterT::reversed,"reversed()"); } class MyIterModule : public Py::ExtensionModule { public: MyIterModule() : Py::ExtensionModule("pycxx_iter") { IterT::init_type(); add_varargs_method("IterT",&MyIterModule::new_IterT,"IterT(from,last)"); initialize("MyIterModule documentation"); // register with Python } virtual ~MyIterModule() {} private: Py::Object new_IterT(const Py::Tuple& args) { if (args.length() != 2) { throw Py::RuntimeError("Incorrect # of args to IterT(from,to)."); } return Py::asObject(new IterT(Py::Int(args[0]),Py::Int(args[1]))); } }; #if defined( _WIN32 ) #define EXPORT_SYMBOL __declspec( dllexport ) #else #define EXPORT_SYMBOL #endif extern "C" EXPORT_SYMBOL void initpycxx_iter() { // the following constructor call registers our extension module // with the Python runtime system static MyIterModule* IterTest = new MyIterModule; } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/pycxx_iter.hxx000644 000771 000771 00000003612 11146616710 023467 0ustar00barrybarry000000 000000 #include "CXX/Extensions.hxx" #include #include #include class IterT : public Py::PythonExtension { int from, count, last; int fwd_iter; bool do_it_reversed; public: static void init_type(void); // announce properties and methods IterT(int _from, int _last) : from(_from) , last(_last) , fwd_iter(0) , do_it_reversed(false) {} Py::Object repr() { std::string s; std::ostringstream s_out; s_out << "IterT count(" << count << ")"; return Py::String(s_out.str()); } Py::Object reversed(const Py::Tuple&) { do_it_reversed= true; // indicate backward iteration return Py::Object(this,false); // increment the refcount } Py::Object iter() { if( do_it_reversed ) { fwd_iter = -1; do_it_reversed=false; } else fwd_iter = 1; // indicate forward iteration return Py::Object(this,false); // increment the refcount } PyObject* iternext() { int ct; if( ! fwd_iter ) return NULL; // signal StopIteration if( fwd_iter > 0 ) { if( fwd_iter == 1 ) { ct = from; count = from+1; fwd_iter=2; } else if( count <= last ) ct= count++; else return NULL; // signal StopIteration } else if( fwd_iter == -1 ) { ct = last; count = last-1; fwd_iter=-2; } else if( count >= from ) ct= count--; else return NULL; // signal StopIteration Py::Int Result(ct); Result.increment_reference_count(); return Result.ptr(); } }; pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/python.cxx000644 000771 000771 00000004776 11146616710 022621 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- /* Minimal main program -- everything is loaded from the library */ #include "CXX/WrapPython.h" #include extern "C" int Py_Main(int argc, char** argv); extern "C" void initexample(); extern "C" void Py_Initialize(); int main(int argc, char** argv) { std::cout << "Greetings. Type from example import *; test()" << std::endl; Py_Initialize(); initexample(); return Py_Main(argc, argv); } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/range.cxx000755 000771 000771 00000007607 11146616710 022373 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifdef _MSC_VER // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "range.hxx" // Connect range objects to Python Py::Object range::repr() { return Py::String(asString()); } int range::sequence_length() { return length(); } Py::Object range::sequence_item(Py_ssize_t i) { return Py::Int(item(i)); } Py::Object range::sequence_concat( const Py::Object &j ) { Py::Int k(j); return Py::asObject(extend(int(k))); } Py::Object range::sequence_slice(Py_ssize_t i, Py_ssize_t j) { return Py::asObject(slice(i,j)); } Py::Object range::getattr( const char *name ) { if(std::string(name) == "c") return Py::Float(300.0); if(std::string(name) == "start") return Py::Int(start); return getattr_methods( name ); } // "regular" methods... Py::Object range::amethod( const Py::Tuple &t ) { t.verify_length(1); Py::List result; result.append(Py::Object(this)); result.append(t[0]); return result; } Py::Object range::value( const Py::Tuple &t ) { return c_value(t); } Py::Object range::assign( const Py::Tuple &t ) { t.verify_length(2); Py::Tuple t1(t[0]); // subscripts Py::Object o2(t[1]); // rhs; c_assign (t1, o2); return Py::Nothing(); } void range::init_type() { behaviors().name("range"); behaviors().doc("range objects: start, stop, step"); behaviors().supportRepr(); behaviors().supportGetattr(); behaviors().supportSequenceType(); add_varargs_method("amethod", &range::amethod, "demonstrate how to document amethod"); add_varargs_method("assign", &range::assign); add_varargs_method("value", &range::value); add_varargs_method("reference_count", &range::reference_count); } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/range.hxx000755 000771 000771 00000012723 11146616710 022373 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __r__h #define __r__h #include "CXX/Extensions.hxx" #include STR_STREAM // Making an extension object class range: public Py::PythonExtension { public: long start; long stop; long step; range(long start_, long stop_, long step_ = 1L) { start = start_; stop = stop_; step = step_; std::cout << "range object created " << this << std::endl; } virtual ~range() { std::cout << "range object destroyed " << this << std::endl; } static void init_type(void); long length() const { return (stop - start + 1)/step; } long item(int i) const { if( i >= length() ) // this exception stops a Python for loop over range. throw Py::IndexError("index too large"); return start + i * step; } range* slice(int i, int j) const { int first = start + i * step; int last = start + j * step; return new range(first, last, step); } range* extend(int k) const { return new range(start, stop + k, step); } std::string asString() const { std::OSTRSTREAM s; s << "range(" << start << ", " << stop << ", " << step << ")" << std::ends; return std::string(s.str()); } // override functions from PythonExtension virtual Py::Object repr(); virtual Py::Object getattr( const char *name ); virtual int sequence_length(); virtual Py::Object sequence_item( Py_ssize_t i ); virtual Py::Object sequence_concat( const Py::Object &j ); virtual Py::Object sequence_slice( Py_ssize_t i, Py_ssize_t j ); // define python methods of this object Py::Object amethod (const Py::Tuple& args); Py::Object value (const Py::Tuple& args); Py::Object assign (const Py::Tuple& args); Py::Object reference_count (const Py::Tuple& args) { return Py::Int(this->ob_refcnt); } Py::Object c_value(const Py::Tuple&) const { Py::List result; for(int i = start; i <= stop; i += step) { result.append(Py::Int(i)); } return result; } void c_assign(const Py::Tuple&, const Py::Object& rhs) { Py::Tuple w(rhs); w.verify_length(3); start = long(Py::Int(w[0])); stop = long(Py::Int(w[1])); step = long(Py::Int(w[2])); } }; class RangeSequence: public Py::SeqBase { public: explicit RangeSequence (PyObject *pyob, bool owned = false): Py::SeqBase(pyob, owned) { validate(); } explicit RangeSequence(int start, int stop, int step = 1) { set (new range(start, stop, step), true); } RangeSequence(const RangeSequence& other): Py::SeqBase(*other) { validate(); } RangeSequence& operator= (const Py::Object& rhs) { return (*this = *rhs); } RangeSequence& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set(rhsp); return *this; } virtual bool accepts(PyObject *pyob) const { return pyob && range::check(pyob); } Py::Object value(const Py::Tuple& t) const { return static_cast(ptr())->c_value(t); } void assign(const Py::Tuple& t, const Py::Object& rhs) { static_cast(ptr())->c_assign(t, rhs); } }; #endif pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/rangetest.cxx000755 000771 000771 00000010737 11347431443 023272 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifdef _MSC_VER // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "CXX/Extensions.hxx" #include "range.hxx" // This test also illustrates using the Py namespace explicitly extern void debug_check_ref_queue(); std::string test_extension_object() { debug_check_ref_queue(); Py::Tuple a; // just something that isn't an range... Py::ExtensionObject r1( new range(1, 20, 3) ); if(range::check(a)) std::cout << "range::check failed (1)."; if(!range::check(r1)) return "r::check failed (2)."; debug_check_ref_queue(); RangeSequence r2(1, 10, 2); if(r2[1] != Py::Int(3)) return "RangeSequence check failed. "; debug_check_ref_queue(); // calling an extension object method using getattr Py::Callable w(r2.getAttr("amethod")); Py::Tuple args(1); Py::Int j(3); args[0]=j; Py::List answer(w.apply(args)); if(answer[0] != r2) return ("Extension object test failed (1)"); if(answer[1] != args[0]) return ("Extension object test failed (2)"); // calling an extension object method using callMemberFunction Py::List answer2( r2.callMemberFunction( "amethod", args ) ); if(answer2[0] != r2) return ("Extension object test failed (3)"); if(answer2[1] != args[0]) return ("Extension object test failed (4)"); debug_check_ref_queue(); Py::Tuple nv(3); nv[0] = Py::Int(1); nv[1] = Py::Int(20); nv[2] = Py::Int(3); Py::Tuple unused; Py::List r2value; r2.assign(unused, nv); r2value = r2.value(unused); if(r2value[1] != Py::Int(4)) return("Extension object test failed (5)"); debug_check_ref_queue(); // repeat using getattr w = r2.getAttr("assign"); Py::Tuple the_arguments(2); the_arguments[0] = unused; the_arguments[1] = nv; w.apply(the_arguments); debug_check_ref_queue(); w = r2.getAttr("value"); Py::Tuple one_arg(1); one_arg[0] = unused; r2value = w.apply(one_arg); if(r2value[1] != Py::Int(4)) return("Extension object test failed. (6)"); debug_check_ref_queue(); { Py::ExtensionObject rheap( new range(1, 10, 2) ); debug_check_ref_queue(); // delete rheap } debug_check_ref_queue(); return "ok."; } pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/setup.py000644 000771 000771 00000006311 11214645533 022252 0ustar00barrybarry000000 000000 #----------------------------------------------------------------------------- # # Copyright (c) 1998 - 2007, The Regents of the University of California # Produced at the Lawrence Livermore National Laboratory # All rights reserved. # # This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The # full copyright notice is contained in the file COPYRIGHT located at the root # of the PyCXX distribution. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # - Redistributions of source code must retain the above copyright notice, # this list of conditions and the disclaimer below. # - Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the disclaimer (as noted below) in the # documentation and/or materials provided with the distribution. # - Neither the name of the UC/LLNL nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF # CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. # #----------------------------------------------------------------------------- import os, sys from distutils.core import setup, Extension support_dir = os.path.normpath( os.path.join( sys.prefix, 'share', 'python%d.%d' % (sys.version_info[0],sys.version_info[1]), 'CXX') ) if os.name == 'posix': CXX_libraries = ['stdc++','m'] else: CXX_libraries = [] setup (name = "CXXDemo", version = "5.1", maintainer = "Barry Scott", maintainer_email = "barry-scott@users.sourceforge.net", description = "Demo of facility for extending Python with C++", url = "http://cxx.sourceforge.net", packages = ['CXX'], package_dir = {'CXX': '.'}, ext_modules = [ Extension('CXX.example', sources = ['example.cxx', 'range.cxx', 'rangetest.cxx', os.path.join(support_dir,'cxxsupport.cxx'), os.path.join(support_dir,'cxx_extensions.cxx'), os.path.join(support_dir,'IndirectPythonInterface.cxx'), os.path.join(support_dir,'cxxextensions.c') ], ) ] ) pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/simple.cxx000644 000771 000771 00000024010 11523511652 022546 0ustar00barrybarry000000 000000 // // Copyright (c) 2008-2010 Barry A. Scott // // // simple_moduile.cxx // // This module defines a single function. // #ifdef _MSC_VER // disable warning C4786: symbol greater than 255 character, // nessesary to ignore as causes lots of warning #pragma warning(disable: 4786) #endif #include "CXX/Objects.hxx" #include "CXX/Extensions.hxx" #include class new_style_class: public Py::PythonClass< new_style_class > { public: new_style_class( Py::PythonClassInstance *self, Py::Tuple &args, Py::Dict &kwds ) : Py::PythonClass< new_style_class >::PythonClass( self, args, kwds ) , m_value( "default value" ) { std::cout << "new_style_class c'tor Called with " << args.length() << " normal arguments." << std::endl; Py::List names( kwds.keys() ); std::cout << "and with " << names.length() << " keyword arguments:" << std::endl; for( Py::List::size_type i=0; i< names.length(); i++ ) { Py::String name( names[i] ); std::cout << " " << name << std::endl; } } virtual ~new_style_class() { std::cout << "~new_style_class." << std::endl; } static void init_type(void) { behaviors().name( "new_style_class" ); behaviors().doc( "documentation for new_style_class class" ); behaviors().supportGetattro(); behaviors().supportSetattro(); PYCXX_ADD_NOARGS_METHOD( func_noargs, new_style_class_func_noargs, "docs for new_style_class_func_noargs" ); PYCXX_ADD_VARARGS_METHOD( func_varargs, new_style_class_func_varargs, "docs for new_style_class_func_varargs" ); PYCXX_ADD_KEYWORDS_METHOD( func_keyword, new_style_class_func_keyword, "docs for new_style_class_func_keyword" ); PYCXX_ADD_NOARGS_METHOD( func_noargs_raise_exception, new_style_class_func_noargs_raise_exception, "docs for new_style_class_func_noargs_raise_exception" ); // Call to make the type ready for use behaviors().readyType(); } Py::Object new_style_class_func_noargs( void ) { std::cout << "new_style_class_func_noargs Called." << std::endl; std::cout << "value ref count " << m_value.reference_count() << std::endl; return Py::None(); } PYCXX_NOARGS_METHOD_DECL( new_style_class, new_style_class_func_noargs ) Py::Object new_style_class_func_varargs( const Py::Tuple &args ) { std::cout << "new_style_class_func_varargs Called with " << args.length() << " normal arguments." << std::endl; return Py::None(); } PYCXX_VARARGS_METHOD_DECL( new_style_class, new_style_class_func_varargs ) Py::Object new_style_class_func_keyword( const Py::Tuple &args, const Py::Dict &kwds ) { std::cout << "new_style_class_func_keyword Called with " << args.length() << " normal arguments." << std::endl; Py::List names( kwds.keys() ); std::cout << "and with " << names.length() << " keyword arguments:" << std::endl; for( Py::List::size_type i=0; i< names.length(); i++ ) { Py::String name( names[i] ); std::cout << " " << name << std::endl; } return Py::None(); } PYCXX_KEYWORDS_METHOD_DECL( new_style_class, new_style_class_func_keyword ) Py::Object new_style_class_func_noargs_raise_exception( void ) { std::cout << "new_style_class_func_noargs_raise_exception Called." << std::endl; throw Py::RuntimeError( "its an error" ); return Py::None(); } PYCXX_NOARGS_METHOD_DECL( new_style_class, new_style_class_func_noargs_raise_exception ) Py::Object getattro( const Py::String &name_ ) { std::string name( name_.as_std_string( "utf-8" ) ); if( name == "value" ) { return m_value; } else { return genericGetAttro( name_ ); } } int setattro( const Py::String &name_, const Py::Object &value ) { std::string name( name_.as_std_string( "utf-8" ) ); if( name == "value" ) { m_value = value; return 0; } else { return genericSetAttro( name_, value ); } } Py::String m_value; }; class old_style_class: public Py::PythonExtension< old_style_class > { public: old_style_class() { } virtual ~old_style_class() { } static void init_type(void) { behaviors().name( "old_style_class" ); behaviors().doc( "documentation for old_style_class class" ); behaviors().supportGetattr(); add_noargs_method( "old_style_class_func_noargs", &old_style_class::old_style_class_func_noargs ); add_varargs_method( "old_style_class_func_varargs", &old_style_class::old_style_class_func_varargs ); add_keyword_method( "old_style_class_func_keyword", &old_style_class::old_style_class_func_keyword ); } // override functions from PythonExtension virtual Py::Object getattr( const char *name ) { return getattr_methods( name ); } Py::Object old_style_class_func_noargs( void ) { std::cout << "old_style_class_func_noargs Called." << std::endl; return Py::None(); } Py::Object old_style_class_func_varargs( const Py::Tuple &args ) { std::cout << "old_style_class_func_varargs Called with " << args.length() << " normal arguments." << std::endl; return Py::None(); } Py::Object old_style_class_func_keyword( const Py::Tuple &args, const Py::Dict &kwds ) { std::cout << "old_style_class_func_keyword Called with " << args.length() << " normal arguments." << std::endl; Py::List names( kwds.keys() ); std::cout << "and with " << names.length() << " keyword arguments:" << std::endl; for( Py::List::size_type i=0; i< names.length(); i++ ) { Py::String name( names[i] ); std::cout << " " << name << std::endl; } return Py::None(); } }; class simple_module : public Py::ExtensionModule { public: simple_module() : Py::ExtensionModule( "simple" ) // this must be name of the file on disk e.g. simple.so or simple.pyd { old_style_class::init_type(); new_style_class::init_type(); add_varargs_method("old_style_class", &simple_module::factory_old_style_class, "documentation for old_style_class()"); add_keyword_method("func", &simple_module::func, "documentation for func()"); add_keyword_method("make_instance", &simple_module::make_instance, "documentation for make_instance()"); add_keyword_method("decode_test", &simple_module::decode_test, "documentation for decode_test()"); add_keyword_method("encode_test", &simple_module::encode_test, "documentation for encode_test()"); // after initialize the moduleDictionary will exist initialize( "documentation for the simple module" ); Py::Dict d( moduleDictionary() ); d["var"] = Py::String( "var value" ); Py::Object x( new_style_class::type() ); d["new_style_class"] = x; } virtual ~simple_module() {} private: Py::Object decode_test( const Py::Tuple &args, const Py::Dict &kwds ) { Py::String s( args[0] ); return s.decode("utf-8"); } Py::Object encode_test( const Py::Tuple &args, const Py::Dict &kwds ) { Py::String s( args[0] ); return s.encode("utf-8"); } Py::Object func( const Py::Tuple &args, const Py::Dict &kwds ) { std::cout << "func Called with " << args.length() << " normal arguments." << std::endl; Py::List names( kwds.keys() ); std::cout << "and with " << names.length() << " keyword arguments:" << std::endl; for( Py::List::size_type i=0; i< names.length(); i++ ) { Py::String name( names[i] ); std::cout << " " << name << std::endl; } if( args.length() > 0 ) { Py::Object x( args[0] ); try { Py::PythonClassObject x2( x ); std::cout << "C++ pointer " << x2.getCxxObject() << std::endl; } catch( Py::TypeError &e ) { // must clear the error e.clear(); std::cout << "arg 1 is not a new_style_class" << std::endl; } } return Py::None(); } Py::Object make_instance( const Py::Tuple &args, const Py::Dict &kwds ) { std::cout << "make_instance Called with " << args.length() << " normal arguments." << std::endl; Py::List names( kwds.keys() ); std::cout << "and with " << names.length() << " keyword arguments:" << std::endl; for( Py::List::size_type i=0; i< names.length(); i++ ) { Py::String name( names[i] ); std::cout << " " << name << std::endl; } Py::Callable class_type( new_style_class::type() ); Py::PythonClassObject new_style_obj( class_type.apply( args, kwds ) ); return new_style_obj; } Py::Object factory_old_style_class( const Py::Tuple &rargs ) { Py::Object obj = Py::asObject( new old_style_class ); return obj; } }; #if defined( _WIN32 ) #define EXPORT_SYMBOL __declspec( dllexport ) #else #define EXPORT_SYMBOL #endif #if defined( PY3 ) static simple_module *simple; extern "C" EXPORT_SYMBOL PyObject *PyInit_simple() { #if defined(PY_WIN32_DELAYLOAD_PYTHON_DLL) Py::InitialisePythonIndirectPy::Interface(); #endif simple = new simple_module; return simple->module().ptr(); } // symbol required for the debug version extern "C" EXPORT_SYMBOL PyObject *PyInit_simple_d() { return PyInit_simple(); } #else static simple_module *simple; extern "C" EXPORT_SYMBOL void initsimple() { #if defined(PY_WIN32_DELAYLOAD_PYTHON_DLL) Py::InitialisePythonIndirectPy::Interface(); #endif simple = new simple_module; } // symbol required for the debug version extern "C" EXPORT_SYMBOL void initsimple_d() { initsimple(); } #endif pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/test_example.py000644 000771 000771 00000004257 11146616710 023612 0ustar00barrybarry000000 000000 #----------------------------------------------------------------------------- # # Copyright (c) 1998 - 2007, The Regents of the University of California # Produced at the Lawrence Livermore National Laboratory # All rights reserved. # # This file is part of PyCXX. For details,see http:#cxx.sourceforge.net/. The # full copyright notice is contained in the file COPYRIGHT located at the root # of the PyCXX distribution. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # - Redistributions of source code must retain the above copyright notice, # this list of conditions and the disclaimer below. # - Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the disclaimer (as noted below) in the # documentation and/or materials provided with the distribution. # - Neither the name of the UC/LLNL nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF # CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. # #----------------------------------------------------------------------------- import sys sys.path.insert( 0, 'pyds%d%d' % (sys.version_info[0], sys.version_info[1]) ) import example example.test() pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/test_pycxx_iter.py000644 000771 000771 00000000445 11146616710 024350 0ustar00barrybarry000000 000000 import sys sys.path.insert( 0, 'pyds%d%d' % (sys.version_info[0], sys.version_info[1]) ) import pycxx_iter IT=pycxx_iter.IterT(5,7) for i in IT: print i, IT print "refcount of IT:",sys.getrefcount(IT) for i in IT.reversed(): print i print "refcount of IT:",sys.getrefcount(IT) pysvn-1.7.8/Import/pycxx-6.2.4/Demo/Python2/test_simple.py000644 000771 000771 00000003371 11347772667 023465 0ustar00barrybarry000000 000000 import sys import simple print( '--- module func ---' ) simple.func() simple.func( 4, 5 ) simple.func( 4, 5, name=6, value=7 ) print( '--- old_style_class func ---' ) old_style_class = simple.old_style_class() old_style_class.old_style_class_func_noargs() old_style_class.old_style_class_func_varargs() old_style_class.old_style_class_func_varargs( 4 ) old_style_class.old_style_class_func_keyword() old_style_class.old_style_class_func_keyword( name=6, value=7 ) old_style_class.old_style_class_func_keyword( 4, 5 ) old_style_class.old_style_class_func_keyword( 4, 5, name=6, value=7 ) print( '--- Derived func ---' ) class Derived(simple.new_style_class): def __init__( self ): simple.new_style_class.__init__( self ) def derived_func( self ): print( 'derived_func' ) super( Derived, self ).func_noargs() def func_noargs( self ): print( 'derived func_noargs' ) d = Derived() print( dir( d ) ) d.derived_func() d.func_noargs() d.func_varargs() d.func_varargs( 4 ) d.func_keyword() d.func_keyword( name=6, value=7 ) d.func_keyword( 4, 5 ) d.func_keyword( 4, 5, name=6, value=7 ) print( d.value ) d.value = "a string" print( d.value ) d.new_var = 99 print( '--- new_style_class func ---' ) new_style_class = simple.new_style_class() print( dir( new_style_class ) ) new_style_class.func_noargs() new_style_class.func_varargs() new_style_class.func_varargs( 4 ) new_style_class.func_keyword() new_style_class.func_keyword( name=6, value=7 ) new_style_class.func_keyword( 4, 5 ) new_style_class.func_keyword( 4, 5, name=6, value=7 ) try: new_style_class.func_noargs_raise_exception() print 'Error: did not raised RuntimeError' sys.exit( 1 ) except RuntimeError, e: print 'Raised %r' % (str(e),) new_style_class = None pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Config.hxx000644 000771 000771 00000004344 11146066410 020710 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #include "CXX/WrapPython.h" #if PY_MAJOR_VERSION == 2 #include "CXX/Python2/Config.hxx" #else #include "CXX/Python3/Config.hxx" #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Exception.hxx000644 000771 000771 00000004352 11146066410 021440 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #include "CXX/WrapPython.h" #if PY_MAJOR_VERSION == 2 #include "CXX/Python2/Exception.hxx" #else #include "CXX/Python3/Exception.hxx" #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Extensions.hxx000644 000771 000771 00000004354 11146066410 021643 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #include "CXX/WrapPython.h" #if PY_MAJOR_VERSION == 2 #include "CXX/Python2/Extensions.hxx" #else #include "CXX/Python3/Extensions.hxx" #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/IndirectPythonInterface.hxx000644 000771 000771 00000000252 11146072165 024265 0ustar00barrybarry000000 000000 #include "CXX/WrapPython.h" #if PY_MAJOR_VERSION == 2 #include "CXX/Python2/IndirectPythonInterface.hxx" #else #include "CXX/Python3/IndirectPythonInterface.hxx" #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Objects.hxx000644 000771 000771 00000004346 11146066410 021076 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #include "CXX/WrapPython.h" #if PY_MAJOR_VERSION == 2 #include "CXX/Python2/Objects.hxx" #else #include "CXX/Python3/Objects.hxx" #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python2/000755 000771 000771 00000000000 11724122667 020321 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python3/000755 000771 000771 00000000000 11724122667 020322 5ustar00barrybarry000000 000000 pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Version.hxx000644 000771 000771 00000004666 11541734710 021143 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __PyCXX_version_hxx__ #define __PyCXX_version_hxx__ #define PYCXX_VERSION_MAJOR 6 #define PYCXX_VERSION_MINOR 2 #define PYCXX_VERSION_PATCH 4 #define PYCXX_MAKEVERSION( major, minor, patch ) ((major<<16)|(minor<<8)|(patch)) #define PYCXX_VERSION PYCXX_MAKEVERSION( PYCXX_VERSION_MAJOR, PYCXX_VERSION_MINOR, PYCXX_VERSION_PATCH ) #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/WrapPython.h000644 000771 000771 00000005244 11230634337 021241 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __PyCXX_wrap_python_hxx__ #define __PyCXX_wrap_python_hxx__ // On some platforms we have to include time.h to get select defined #if !defined(__WIN32__) && !defined(WIN32) && !defined(_WIN32) && !defined(_WIN64) #include #endif // Prevent multiple conflicting definitions of swab from stdlib.h and unistd.h #if defined(__sun) || defined(sun) #if defined(_XPG4) #undef _XPG4 #endif #endif // Python.h will redefine these and generate warning in the process #undef _XOPEN_SOURCE #undef _POSIX_C_SOURCE // pull in python definitions #include #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python3/Config.hxx000644 000771 000771 00000007741 11704271056 022264 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __PyCXX_config_hh__ #define __PyCXX_config_hh__ // // Microsoft VC++ 6.0 has no traits // #if defined( _MSC_VER ) # define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 1 #elif defined( __GNUC__ ) # if __GNUC__ >= 3 # define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 1 # else # define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 0 #endif // // Assume all other compilers do // #else // Macros to deal with deficiencies in compilers # define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 1 #endif #if STANDARD_LIBRARY_HAS_ITERATOR_TRAITS # define random_access_iterator_parent(itemtype) std::iterator #else # define random_access_iterator_parent(itemtype) std::random_access_iterator #endif // // Which C++ standard is in use? // #if defined( _MSC_VER ) # if _MSC_VER <= 1200 // MSVC++ 6.0 # define PYCXX_ISO_CPP_LIB 0 # define STR_STREAM # define TEMPLATE_TYPENAME class # else # define PYCXX_ISO_CPP_LIB 1 # define STR_STREAM # define TEMPLATE_TYPENAME typename # endif #elif defined( __GNUC__ ) # if __GNUC__ >= 3 # define PYCXX_ISO_CPP_LIB 1 # define STR_STREAM # define TEMPLATE_TYPENAME typename # else # define PYCXX_ISO_CPP_LIB 0 # define STR_STREAM # define TEMPLATE_TYPENAME class # endif #endif #if PYCXX_ISO_CPP_LIB # define STR_STREAM # define OSTRSTREAM ostringstream # define EXPLICIT_TYPENAME typename # define EXPLICIT_CLASS class # define TEMPLATE_TYPENAME typename #else # define STR_STREAM # define OSTRSTREAM ostrstream # define EXPLICIT_TYPENAME # define EXPLICIT_CLASS # define TEMPLATE_TYPENAME class #endif // before 3.2 Py_hash_t was missing #ifndef PY_MAJOR_VERSION #error not defined PY_MAJOR_VERSION #endif #if PY_MINOR_VERSION < 2 typedef long int Py_hash_t; #endif #endif // __PyCXX_config_hh__ pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python3/CxxDebug.hxx000644 000771 000771 00000000402 11146615306 022553 0ustar00barrybarry000000 000000 // // CxxDebug.hxx // // Copyright (c) 2008 Barry A. Scott // #ifndef __CXX_Debug_hxx #define __CXX_Debug_hxx // // Functions useful when debugging PyCXX // #ifdef PYCXX_DEBUG extern void bpt(); extern void printRefCount( PyObject *obj ); #endif #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python3/Exception.hxx000644 000771 000771 00000016173 11400430272 023002 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_Exception_h #define __CXX_Exception_h #include "CXX/WrapPython.h" #include "CXX/Version.hxx" #include "CXX/Python3/Config.hxx" #include "CXX/Python3/CxxDebug.hxx" #include "CXX/Python3/IndirectPythonInterface.hxx" #include #include // This mimics the Python structure, in order to minimize confusion namespace Py { class ExtensionExceptionType; class Object; class Exception { public: Exception( ExtensionExceptionType &exception, const std::string &reason ); Exception( ExtensionExceptionType &exception, Object &reason ); explicit Exception () {} Exception (const std::string &reason) { PyErr_SetString( Py::_Exc_RuntimeError(), reason.c_str() ); } Exception( PyObject *exception, const std::string &reason ) { PyErr_SetString( exception, reason.c_str() ); } Exception( PyObject *exception, Object &reason ); void clear() // clear the error // technically but not philosophically const { PyErr_Clear(); } }; // Abstract class StandardError: public Exception { protected: explicit StandardError() {} }; class LookupError: public StandardError { protected: explicit LookupError() {} }; class ArithmeticError: public StandardError { protected: explicit ArithmeticError() {} }; class EnvironmentError: public StandardError { protected: explicit EnvironmentError() {} }; // Concrete class TypeError: public StandardError { public: TypeError (const std::string& reason) : StandardError() { PyErr_SetString( Py::_Exc_TypeError(),reason.c_str() ); } }; class IndexError: public LookupError { public: IndexError (const std::string& reason) : LookupError() { PyErr_SetString( Py::_Exc_IndexError(), reason.c_str() ); } }; class AttributeError: public StandardError { public: AttributeError (const std::string& reason) : StandardError() { PyErr_SetString( Py::_Exc_AttributeError(), reason.c_str() ); } }; class NameError: public StandardError { public: NameError (const std::string& reason) : StandardError() { PyErr_SetString( Py::_Exc_NameError(), reason.c_str() ); } }; class RuntimeError: public StandardError { public: RuntimeError (const std::string& reason) : StandardError() { PyErr_SetString( Py::_Exc_RuntimeError(), reason.c_str() ); } }; class NotImplementedError: public StandardError { public: NotImplementedError (const std::string& reason) : StandardError() { PyErr_SetString (Py::_Exc_NotImplementedError(), reason.c_str()); } }; class SystemError: public StandardError { public: SystemError (const std::string& reason) : StandardError() { PyErr_SetString( Py::_Exc_SystemError(),reason.c_str() ); } }; class KeyError: public LookupError { public: KeyError (const std::string& reason) : LookupError() { PyErr_SetString( Py::_Exc_KeyError(),reason.c_str() ); } }; class ValueError: public StandardError { public: ValueError (const std::string& reason) : StandardError() { PyErr_SetString( Py::_Exc_ValueError(), reason.c_str() ); } }; class OverflowError: public ArithmeticError { public: OverflowError (const std::string& reason) : ArithmeticError() { PyErr_SetString( Py::_Exc_OverflowError(), reason.c_str() ); } }; class ZeroDivisionError: public ArithmeticError { public: ZeroDivisionError (const std::string& reason) : ArithmeticError() { PyErr_SetString( Py::_Exc_ZeroDivisionError(), reason.c_str() ); } }; class FloatingPointError: public ArithmeticError { public: FloatingPointError (const std::string& reason) : ArithmeticError() { PyErr_SetString( Py::_Exc_FloatingPointError(), reason.c_str() ); } }; class MemoryError: public StandardError { public: MemoryError (const std::string& reason) : StandardError() { PyErr_SetString( Py::_Exc_MemoryError(), reason.c_str() ); } }; class SystemExit: public StandardError { public: SystemExit (const std::string& reason) : StandardError() { PyErr_SetString( Py::_Exc_SystemExit(),reason.c_str() ); } }; }// Py #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python3/ExtensionModule.hxx000644 000771 000771 00000020773 11615064135 024200 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_ExtensionModule__h #define __CXX_ExtensionModule__h namespace Py { class ExtensionModuleBase { public: ExtensionModuleBase( const char *name ); virtual ~ExtensionModuleBase(); Module module( void ) const; // only valid after initialize() has been called Dict moduleDictionary( void ) const; // only valid after initialize() has been called virtual Object invoke_method_noargs( void *method_def ) = 0; virtual Object invoke_method_keyword( void *method_def, const Tuple &_args, const Dict &_keywords ) = 0; virtual Object invoke_method_varargs( void *method_def, const Tuple &_args ) = 0; const std::string &name() const; const std::string &fullName() const; // what is returned from PyInit_ function Object moduleObject( void ) const; protected: // Initialize the module void initialize( const char *module_doc ); const std::string m_module_name; const std::string m_full_module_name; MethodTable m_method_table; PyModuleDef m_module_def; PyObject *m_module; private: // // prevent the compiler generating these unwanted functions // ExtensionModuleBase( const ExtensionModuleBase & ); //unimplemented void operator=( const ExtensionModuleBase & ); //unimplemented }; // Note: Python calls noargs as varargs buts args==NULL extern "C" PyObject *method_noargs_call_handler( PyObject *_self_and_name_tuple, PyObject * ); extern "C" PyObject *method_varargs_call_handler( PyObject *_self_and_name_tuple, PyObject *_args ); extern "C" PyObject *method_keyword_call_handler( PyObject *_self_and_name_tuple, PyObject *_args, PyObject *_keywords ); template class ExtensionModule : public ExtensionModuleBase { public: ExtensionModule( const char *name ) : ExtensionModuleBase( name ) {} virtual ~ExtensionModule() {} protected: typedef Object (T::*method_noargs_function_t)(); typedef Object (T::*method_varargs_function_t)( const Tuple &args ); typedef Object (T::*method_keyword_function_t)( const Tuple &args, const Dict &kws ); typedef std::map *> method_map_t; static void add_noargs_method( const char *name, method_noargs_function_t function, const char *doc="" ) { method_map_t &mm = methods(); mm[ std::string( name ) ] = new MethodDefExt( name, function, method_noargs_call_handler, doc ); } static void add_varargs_method( const char *name, method_varargs_function_t function, const char *doc="" ) { method_map_t &mm = methods(); mm[ std::string( name ) ] = new MethodDefExt( name, function, method_varargs_call_handler, doc ); } static void add_keyword_method( const char *name, method_keyword_function_t function, const char *doc="" ) { method_map_t &mm = methods(); mm[ std::string( name ) ] = new MethodDefExt( name, function, method_keyword_call_handler, doc ); } void initialize( const char *module_doc="" ) { ExtensionModuleBase::initialize( module_doc ); Dict dict( moduleDictionary() ); // // put each of the methods into the modules dictionary // so that we get called back at the function in T. // method_map_t &mm = methods(); EXPLICIT_TYPENAME method_map_t::const_iterator i = mm.begin(); EXPLICIT_TYPENAME method_map_t::const_iterator i_end = mm.end(); for ( ; i != i_end; ++i ) { MethodDefExt *method_def = (*i).second; static PyObject *self = PyCapsule_New( this, NULL, NULL ); Tuple args( 2 ); args[0] = Object( self, true ); args[1] = Object( PyCapsule_New( method_def, NULL, NULL ), true ); PyObject *func = PyCFunction_New ( &method_def->ext_meth_def, new_reference_to( args ) ); method_def->py_method = Object( func, true ); dict[ (*i).first ] = method_def->py_method; } } protected: // Tom Malcolmson reports that derived classes need access to these static method_map_t &methods( void ) { static method_map_t *map_of_methods = NULL; if( map_of_methods == NULL ) map_of_methods = new method_map_t; return *map_of_methods; } // this invoke function must be called from within a try catch block virtual Object invoke_method_noargs( void *method_def ) { // cast up to the derived class, method_def and call T *self = static_cast( this ); MethodDefExt *meth_def = reinterpret_cast *>( method_def ); return (self->*meth_def->ext_noargs_function)(); } // this invoke function must be called from within a try catch block virtual Object invoke_method_varargs( void *method_def, const Tuple &args ) { // cast up to the derived class, method_def and call T *self = static_cast( this ); MethodDefExt *meth_def = reinterpret_cast *>( method_def ); return (self->*meth_def->ext_varargs_function)( args ); } // this invoke function must be called from within a try catch block virtual Object invoke_method_keyword( void *method_def, const Tuple &args, const Dict &keywords ) { // cast up to the derived class, method_def and call T *self = static_cast( this ); MethodDefExt *meth_def = reinterpret_cast *>( method_def ); return (self->*meth_def->ext_keyword_function)( args, keywords ); } private: // // prevent the compiler generating these unwanted functions // ExtensionModule( const ExtensionModule & ); //unimplemented void operator=( const ExtensionModule & ); //unimplemented }; } // Namespace Py // End of __CXX_ExtensionModule__h #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python3/ExtensionOldType.hxx000644 000771 000771 00000031624 11615064135 024330 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_ExtensionOldType__h #define __CXX_ExtensionOldType__h namespace Py { template class PythonExtension : public PythonExtensionBase { public: static PyTypeObject *type_object() { return behaviors().type_object(); } static bool check( PyObject *p ) { // is p like me? return p->ob_type == type_object(); } static bool check( const Object &ob ) { return check( ob.ptr() ); } // // every object needs getattr implemented // to support methods // virtual Object getattr( const char *name ) { return getattr_methods( name ); } PyObject *selfPtr() { return this; } Object self() { return asObject( this ); } protected: explicit PythonExtension() : PythonExtensionBase() { PyObject_Init( this, type_object() ); // every object must support getattr behaviors().supportGetattr(); } virtual ~PythonExtension() {} static PythonType &behaviors() { static PythonType* p; if( p == NULL ) { #if defined( _CPPRTTI ) || defined( __GNUG__ ) const char *default_name =( typeid( T ) ).name(); #else const char *default_name = "unknown"; #endif p = new PythonType( sizeof( T ), 0, default_name ); p->set_tp_dealloc( extension_object_deallocator ); } return *p; } typedef Object (T::*method_noargs_function_t)(); typedef Object (T::*method_varargs_function_t)( const Tuple &args ); typedef Object (T::*method_keyword_function_t)( const Tuple &args, const Dict &kws ); typedef std::map *> method_map_t; // support the default attributes, __name__, __doc__ and methods virtual Object getattr_default( const char *_name ) { std::string name( _name ); if( name == "__name__" && type_object()->tp_name != NULL ) { return Py::String( type_object()->tp_name ); } if( name == "__doc__" && type_object()->tp_doc != NULL ) { return Py::String( type_object()->tp_doc ); } // trying to fake out being a class for help() // else if( name == "__bases__" ) // { // return Py::Tuple( 0 ); // } // else if( name == "__module__" ) // { // return Py::Nothing(); // } // else if( name == "__dict__" ) // { // return Py::Dict(); // } return getattr_methods( _name ); } // turn a name into function object virtual Object getattr_methods( const char *_name ) { std::string name( _name ); method_map_t &mm = methods(); // see if name exists and get entry with method EXPLICIT_TYPENAME method_map_t::const_iterator i = mm.find( name ); if( i == mm.end() ) { if( name == "__methods__" ) { List methods; i = mm.begin(); EXPLICIT_TYPENAME method_map_t::const_iterator i_end = mm.end(); for( ; i != i_end; ++i ) methods.append( String( (*i).first ) ); return methods; } throw AttributeError( name ); } MethodDefExt *method_def = i->second; Tuple self( 2 ); self[0] = Object( this ); self[1] = Object( PyCapsule_New( method_def, NULL, NULL ), true ); PyObject *func = PyCFunction_New( &method_def->ext_meth_def, self.ptr() ); return Object(func, true); } // check that all methods added are unique static void check_unique_method_name( const char *name ) { method_map_t &mm = methods(); EXPLICIT_TYPENAME method_map_t::const_iterator i; i = mm.find( name ); if( i != mm.end() ) throw AttributeError( name ); } static void add_noargs_method( const char *name, method_noargs_function_t function, const char *doc="" ) { check_unique_method_name( name ); method_map_t &mm = methods(); mm[ std::string( name ) ] = new MethodDefExt( name, function, method_noargs_call_handler, doc ); } static void add_varargs_method( const char *name, method_varargs_function_t function, const char *doc="" ) { check_unique_method_name( name ); method_map_t &mm = methods(); mm[ std::string( name ) ] = new MethodDefExt( name, function, method_varargs_call_handler, doc ); } static void add_keyword_method( const char *name, method_keyword_function_t function, const char *doc="" ) { check_unique_method_name( name ); method_map_t &mm = methods(); mm[ std::string( name ) ] = new MethodDefExt( name, function, method_keyword_call_handler, doc ); } private: static method_map_t &methods( void ) { static method_map_t *map_of_methods = NULL; if( map_of_methods == NULL ) map_of_methods = new method_map_t; return *map_of_methods; } // Note: Python calls noargs as varargs buts args==NULL static PyObject *method_noargs_call_handler( PyObject *_self_and_name_tuple, PyObject * ) { try { Tuple self_and_name_tuple( _self_and_name_tuple ); PyObject *self_in_cobject = self_and_name_tuple[0].ptr(); T *self = static_cast( self_in_cobject ); MethodDefExt *meth_def = reinterpret_cast *>( PyCapsule_GetPointer( self_and_name_tuple[1].ptr(), NULL ) ); Object result; // Adding try & catch in case of STL debug-mode exceptions. #ifdef _STLP_DEBUG try { result = (self->*meth_def->ext_noargs_function)(); } catch( std::__stl_debug_exception ) { // throw cxx::RuntimeError( sErrMsg ); throw RuntimeError( "Error message not set yet." ); } #else result = (self->*meth_def->ext_noargs_function)(); #endif // _STLP_DEBUG return new_reference_to( result.ptr() ); } catch( Exception & ) { return 0; } } static PyObject *method_varargs_call_handler( PyObject *_self_and_name_tuple, PyObject *_args ) { try { Tuple self_and_name_tuple( _self_and_name_tuple ); PyObject *self_in_cobject = self_and_name_tuple[0].ptr(); T *self = static_cast( self_in_cobject ); MethodDefExt *meth_def = reinterpret_cast *>( PyCapsule_GetPointer( self_and_name_tuple[1].ptr(), NULL ) ); Tuple args( _args ); Object result; // Adding try & catch in case of STL debug-mode exceptions. #ifdef _STLP_DEBUG try { result = (self->*meth_def->ext_varargs_function)( args ); } catch( std::__stl_debug_exception ) { throw RuntimeError( "Error message not set yet." ); } #else result = (self->*meth_def->ext_varargs_function)( args ); #endif // _STLP_DEBUG return new_reference_to( result.ptr() ); } catch( Exception & ) { return 0; } } static PyObject *method_keyword_call_handler( PyObject *_self_and_name_tuple, PyObject *_args, PyObject *_keywords ) { try { Tuple self_and_name_tuple( _self_and_name_tuple ); PyObject *self_in_cobject = self_and_name_tuple[0].ptr(); T *self = static_cast( self_in_cobject ); MethodDefExt *meth_def = reinterpret_cast *>( PyCapsule_GetPointer( self_and_name_tuple[1].ptr(), NULL ) ); Tuple args( _args ); // _keywords may be NULL so be careful about the way the dict is created Dict keywords; if( _keywords != NULL ) keywords = Dict( _keywords ); Object result( ( self->*meth_def->ext_keyword_function )( args, keywords ) ); return new_reference_to( result.ptr() ); } catch( Exception & ) { return 0; } } static void extension_object_deallocator( PyObject* t ) { delete (T *)( t ); } // // prevent the compiler generating these unwanted functions // explicit PythonExtension( const PythonExtension &other ); void operator=( const PythonExtension &rhs ); }; // // ExtensionObject is an Object that will accept only T's. // template class ExtensionObject: public Object { public: explicit ExtensionObject( PyObject *pyob ) : Object( pyob ) { validate(); } ExtensionObject( const ExtensionObject &other ) : Object( *other ) { validate(); } ExtensionObject( const Object &other ) : Object( *other ) { validate(); } ExtensionObject &operator=( const Object &rhs ) { return( *this = *rhs ); } ExtensionObject &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } virtual bool accepts( PyObject *pyob ) const { return( pyob && T::check( pyob ) ); } // // Obtain a pointer to the PythonExtension object // T *extensionObject( void ) { return static_cast( ptr() ); } }; } // Namespace Py // End of __CXX_ExtensionOldType__h #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python3/Extensions.hxx000644 000771 000771 00000015652 11230627123 023210 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_Extensions__h #define __CXX_Extensions__h #ifdef _MSC_VER // disable warning C4786: symbol greater than 255 character, // okay to ignore #pragma warning( disable: 4786 ) #endif #include "CXX/WrapPython.h" #include "CXX/Version.hxx" #include "CXX/Python3/Config.hxx" #include "CXX/Python3/CxxDebug.hxx" #include "CXX/Python3/Objects.hxx" extern "C" { extern PyObject py_object_initializer; } #include #include // ---------------------------------------------------------------------- namespace Py { class ExtensionModuleBase; // Make an Exception Type for use in raising custom exceptions class ExtensionExceptionType : public Object { public: ExtensionExceptionType(); virtual ~ExtensionExceptionType(); // call init to create the type void init( ExtensionModuleBase &module, const std::string &name, ExtensionExceptionType &parent ); void init( ExtensionModuleBase &module, const std::string &name ); }; class MethodTable { public: MethodTable(); virtual ~MethodTable(); void add( const char *method_name, PyCFunction f, const char *doc="", int flag=1 ); PyMethodDef *table(); protected: std::vector t; // accumulator of PyMethodDef's PyMethodDef *mt; // Actual method table produced when full static PyMethodDef method( const char* method_name, PyCFunction f, int flags=1, const char* doc="" ); private: // // prevent the compiler generating these unwanted functions // MethodTable( const MethodTable &m ); //unimplemented void operator=( const MethodTable &m ); //unimplemented }; // end class MethodTable // Note: Python calls noargs as varargs buts args==NULL extern "C" typedef PyObject *(*method_noargs_call_handler_t)( PyObject *_self, PyObject * ); extern "C" typedef PyObject *(*method_varargs_call_handler_t)( PyObject *_self, PyObject *_args ); extern "C" typedef PyObject *(*method_keyword_call_handler_t)( PyObject *_self, PyObject *_args, PyObject *_dict ); template class MethodDefExt : public PyMethodDef { public: typedef Object (T::*method_noargs_function_t)(); typedef Object (T::*method_varargs_function_t)( const Tuple &args ); typedef Object (T::*method_keyword_function_t)( const Tuple &args, const Dict &kws ); // NOARGS MethodDefExt ( const char *_name, method_noargs_function_t _function, method_noargs_call_handler_t _handler, const char *_doc ) { ext_meth_def.ml_name = const_cast( _name ); ext_meth_def.ml_meth = reinterpret_cast( _handler ); ext_meth_def.ml_flags = METH_NOARGS; ext_meth_def.ml_doc = const_cast( _doc ); ext_noargs_function = _function; ext_varargs_function = NULL; ext_keyword_function = NULL; } // VARARGS MethodDefExt ( const char *_name, method_varargs_function_t _function, method_varargs_call_handler_t _handler, const char *_doc ) { ext_meth_def.ml_name = const_cast( _name ); ext_meth_def.ml_meth = reinterpret_cast( _handler ); ext_meth_def.ml_flags = METH_VARARGS; ext_meth_def.ml_doc = const_cast( _doc ); ext_noargs_function = NULL; ext_varargs_function = _function; ext_keyword_function = NULL; } // VARARGS + KEYWORD MethodDefExt ( const char *_name, method_keyword_function_t _function, method_keyword_call_handler_t _handler, const char *_doc ) { ext_meth_def.ml_name = const_cast( _name ); ext_meth_def.ml_meth = reinterpret_cast( _handler ); ext_meth_def.ml_flags = METH_VARARGS|METH_KEYWORDS; ext_meth_def.ml_doc = const_cast( _doc ); ext_noargs_function = NULL; ext_varargs_function = NULL; ext_keyword_function = _function; } ~MethodDefExt() {} PyMethodDef ext_meth_def; method_noargs_function_t ext_noargs_function; method_varargs_function_t ext_varargs_function; method_keyword_function_t ext_keyword_function; Object py_method; }; } // Namespace Py #include "CXX/Python3/ExtensionModule.hxx" #include "CXX/Python3/PythonType.hxx" #include "CXX/Python3/ExtensionTypeBase.hxx" #include "CXX/Python3/ExtensionOldType.hxx" #include "CXX/Python3/ExtensionType.hxx" // End of CXX_Extensions.h #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python3/ExtensionType.hxx000644 000771 000771 00000033070 11367330334 023667 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_ExtensionClass__h #define __CXX_ExtensionClass__h #define PYCXX_NOARGS_METHOD_NAME( NAME ) _callNoArgsMethod__##NAME #define PYCXX_VARARGS_METHOD_NAME( NAME ) _callVarArgsMethod__##NAME #define PYCXX_KEYWORDS_METHOD_NAME( NAME ) _callKeywordsMethod__##NAME #define PYCXX_NOARGS_METHOD_DECL( CLS, NAME ) \ static PyObject *PYCXX_NOARGS_METHOD_NAME( NAME )( PyObject *_self, PyObject *, PyObject * ) \ { \ try \ { \ Py::PythonClassInstance *self_python = reinterpret_cast< Py::PythonClassInstance * >( _self ); \ CLS *self = reinterpret_cast< CLS * >( self_python->m_pycxx_object ); \ Py::Object r( (self->NAME)() ); \ return Py::new_reference_to( r.ptr() ); \ } \ catch( Py::Exception & ) \ { \ return 0; \ } \ } #define PYCXX_VARARGS_METHOD_DECL( CLS, NAME ) \ static PyObject *PYCXX_VARARGS_METHOD_NAME( NAME )( PyObject *_self, PyObject *_a, PyObject * ) \ { \ try \ { \ Py::PythonClassInstance *self_python = reinterpret_cast< Py::PythonClassInstance * >( _self ); \ CLS *self = reinterpret_cast< CLS * >( self_python->m_pycxx_object ); \ Py::Tuple a( _a ); \ Py::Object r( (self->NAME)( a ) ); \ return Py::new_reference_to( r.ptr() ); \ } \ catch( Py::Exception & ) \ { \ return 0; \ } \ } #define PYCXX_KEYWORDS_METHOD_DECL( CLS, NAME ) \ static PyObject *PYCXX_KEYWORDS_METHOD_NAME( NAME )( PyObject *_self, PyObject *_a, PyObject *_k ) \ { \ try \ { \ Py::PythonClassInstance *self_python = reinterpret_cast< Py::PythonClassInstance * >( _self ); \ CLS *self = reinterpret_cast< CLS * >( self_python->m_pycxx_object ); \ Py::Tuple a( _a ); \ Py::Dict k; \ if( _k != NULL ) \ k = _k; \ Py::Object r( (self->NAME)( a, k ) ); \ return Py::new_reference_to( r.ptr() ); \ } \ catch( Py::Exception & ) \ { \ return 0; \ } \ } // need to support METH_STATIC and METH_CLASS #define PYCXX_ADD_NOARGS_METHOD( PYNAME, NAME, docs ) \ add_method( #PYNAME, (PyCFunction)PYCXX_NOARGS_METHOD_NAME( NAME ), METH_NOARGS, docs ) #define PYCXX_ADD_VARARGS_METHOD( PYNAME, NAME, docs ) \ add_method( #PYNAME, (PyCFunction)PYCXX_VARARGS_METHOD_NAME( NAME ), METH_VARARGS, docs ) #define PYCXX_ADD_KEYWORDS_METHOD( PYNAME, NAME, docs ) \ add_method( #PYNAME, (PyCFunction)PYCXX_KEYWORDS_METHOD_NAME( NAME ), METH_VARARGS | METH_KEYWORDS, docs ) namespace Py { extern PythonExtensionBase *getPythonExtensionBase( PyObject *self ); struct PythonClassInstance { PyObject_HEAD PythonExtensionBase *m_pycxx_object; }; class ExtensionClassMethodsTable { public: ExtensionClassMethodsTable() : m_methods_table( new PyMethodDef[ METHOD_TABLE_SIZE_INCREMENT ] ) , m_methods_used( 0 ) , m_methods_size( METHOD_TABLE_SIZE_INCREMENT ) { } ~ExtensionClassMethodsTable() { delete m_methods_table; } // check that all methods added are unique void check_unique_method_name( const char *_name ) { std::string name( _name ); for( int i=0; iml_name = name; p->ml_meth = function; p->ml_flags = flags; p->ml_doc = doc; m_methods_used++; p++; // add the sentinel marking the table end p->ml_name = NULL; p->ml_meth = NULL; p->ml_flags = 0; p->ml_doc = NULL; return m_methods_table; } private: enum {METHOD_TABLE_SIZE_INCREMENT = 1}; PyMethodDef *m_methods_table; int m_methods_used; int m_methods_size; }; template class PythonClass : public PythonExtensionBase { protected: explicit PythonClass( PythonClassInstance *self, Tuple &args, Dict &kwds ) : PythonExtensionBase() , m_class_instance( self ) { } virtual ~PythonClass() {} static ExtensionClassMethodsTable &methodTable() { static ExtensionClassMethodsTable *method_table; if( method_table == NULL ) method_table = new ExtensionClassMethodsTable; return *method_table; } static void add_method( const char *name, PyCFunction function, int flags, const char *doc=NULL ) { behaviors().set_methods( methodTable().add_method( name, function, flags, doc ) ); } static PythonType &behaviors() { static PythonType *p; if( p == NULL ) { #if defined( _CPPRTTI ) || defined( __GNUG__ ) const char *default_name = (typeid( T )).name(); #else const char *default_name = "unknown"; #endif p = new PythonType( sizeof( T ), 0, default_name ); p->set_tp_new( extension_object_new ); p->set_tp_init( extension_object_init ); p->set_tp_dealloc( extension_object_deallocator ); // we are a class p->supportClass(); // always support get and set attr p->supportGetattro(); p->supportSetattro(); } return *p; } static PyObject *extension_object_new( PyTypeObject *subtype, PyObject *args, PyObject *kwds ) { #ifdef PYCXX_DEBUG std::cout << "extension_object_new()" << std::endl; #endif PythonClassInstance *o = reinterpret_cast( subtype->tp_alloc( subtype, 0 ) ); if( o == NULL ) return NULL; o->m_pycxx_object = NULL; PyObject *self = reinterpret_cast( o ); #ifdef PYCXX_DEBUG std::cout << "extension_object_new() => self=0x" << std::hex << reinterpret_cast< unsigned int >( self ) << std::dec << std::endl; #endif return self; } static int extension_object_init( PyObject *_self, PyObject *args_, PyObject *kwds_ ) { try { Py::Tuple args( args_ ); Py::Dict kwds; if( kwds_ != NULL ) kwds = kwds_; PythonClassInstance *self = reinterpret_cast( _self ); #ifdef PYCXX_DEBUG std::cout << "extension_object_init( self=0x" << std::hex << reinterpret_cast< unsigned int >( self ) << std::dec << " )" << std::endl; std::cout << " self->m_pycxx_object=0x" << std::hex << reinterpret_cast< unsigned int >( self->m_pycxx_object ) << std::dec << std::endl; #endif if( self->m_pycxx_object == NULL ) { self->m_pycxx_object = new T( self, args, kwds ); #ifdef PYCXX_DEBUG std::cout << " self->m_pycxx_object=0x" << std::hex << reinterpret_cast< unsigned int >( self->m_pycxx_object ) << std::dec << std::endl; #endif } else { #ifdef PYCXX_DEBUG std::cout << " reinit - self->m_pycxx_object=0x" << std::hex << reinterpret_cast< unsigned int >( self->m_pycxx_object ) << std::dec << std::endl; #endif self->m_pycxx_object->reinit( args, kwds ); } } catch( Exception & ) { return -1; } return 0; } static void extension_object_deallocator( PyObject *_self ) { PythonClassInstance *self = reinterpret_cast< PythonClassInstance * >( _self ); #ifdef PYCXX_DEBUG std::cout << "extension_object_deallocator( self=0x" << std::hex << reinterpret_cast< unsigned int >( self ) << std::dec << " )" << std::endl; std::cout << " self->m_pycxx_object=0x" << std::hex << reinterpret_cast< unsigned int >( self->m_pycxx_object ) << std::dec << std::endl; #endif delete self->m_pycxx_object; _self->ob_type->tp_free( _self ); } public: static PyTypeObject *type_object() { return behaviors().type_object(); } static Object type() { return Object( reinterpret_cast( behaviors().type_object() ) ); } static bool check( PyObject *p ) { // is p like me? return p->ob_type == type_object(); } static bool check( const Object &ob ) { return check( ob.ptr() ); } virtual PyObject *selfPtr() { return reinterpret_cast( m_class_instance ); } virtual Object self() { return Object( reinterpret_cast( m_class_instance ) ); } protected: private: PythonClassInstance *m_class_instance; private: // // prevent the compiler generating these unwanted functions // explicit PythonClass( const PythonClass &other ); void operator=( const PythonClass &rhs ); }; // // ExtensionObject is an Object that will accept only T's. // template class PythonClassObject: public Object { public: explicit PythonClassObject( PyObject *pyob ) : Object( pyob ) { validate(); } PythonClassObject( const PythonClassObject &other ) : Object( *other ) { validate(); } PythonClassObject( const Object &other ) : Object( *other ) { validate(); } PythonClassObject &operator=( const Object &rhs ) { *this = *rhs; return *this; } PythonClassObject &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } virtual bool accepts( PyObject *pyob ) const { return( pyob && T::check( pyob ) ); } // // Obtain a pointer to the PythonExtension object // T *getCxxObject( void ) { return dynamic_cast< T * >( getPythonExtensionBase( ptr() ) ); } }; } // Namespace Py // End of __CXX_ExtensionClass__h #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python3/ExtensionTypeBase.hxx000644 000771 000771 00000017443 11353666660 024501 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_ExtensionTypeBase__h #define __CXX_ExtensionTypeBase__h namespace Py { // Class PythonExtension is what you inherit from to create // a new Python extension type. You give your class itself // as the template paramter. // There are two ways that extension objects can get destroyed. // 1. Their reference count goes to zero // 2. Someone does an explicit delete on a pointer. // In(1) the problem is to get the destructor called // We register a special deallocator in the Python type object // (see behaviors()) to do this. // In(2) there is no problem, the dtor gets called. // PythonExtension does not use the usual Python heap allocator, // instead using new/delete. We do the setting of the type object // and reference count, usually done by PyObject_New, in the // base class ctor. // This special deallocator does a delete on the pointer. class PythonExtensionBase : public PyObject { public: PythonExtensionBase(); virtual ~PythonExtensionBase(); public: // object virtual void reinit( Tuple &args, Dict &kwds ); // object basics #ifdef PYCXX_PYTHON_2TO3 virtual int print( FILE *, int ); #endif virtual Object getattr( const char * ); virtual int setattr( const char *, const Object & ); virtual Object getattro( const String & ); Object genericGetAttro( const String & ); virtual int setattro( const String &, const Object & ); int genericSetAttro( const String &, const Object & ); virtual int compare( const Object & ); virtual Object rich_compare( const Object &, int ); virtual Object repr(); virtual Object str(); virtual long hash(); virtual Object call( const Object &, const Object & ); virtual Object iter(); virtual PyObject *iternext(); // Sequence methods virtual int sequence_length(); virtual Object sequence_concat( const Object & ); virtual Object sequence_repeat( Py_ssize_t ); virtual Object sequence_item( Py_ssize_t ); virtual int sequence_ass_item( Py_ssize_t, const Object & ); // Mapping virtual int mapping_length(); virtual Object mapping_subscript( const Object & ); virtual int mapping_ass_subscript( const Object &, const Object & ); // Number virtual Object number_negative(); virtual Object number_positive(); virtual Object number_absolute(); virtual Object number_invert(); virtual Object number_int(); virtual Object number_float(); virtual Object number_long(); virtual Object number_add( const Object & ); virtual Object number_subtract( const Object & ); virtual Object number_multiply( const Object & ); virtual Object number_remainder( const Object & ); virtual Object number_divmod( const Object & ); virtual Object number_lshift( const Object & ); virtual Object number_rshift( const Object & ); virtual Object number_and( const Object & ); virtual Object number_xor( const Object & ); virtual Object number_or( const Object & ); virtual Object number_power( const Object &, const Object & ); // Buffer // QQQ need to add py3 interface public: // helper functions to call function fn_name with 0 to 9 args Object callOnSelf( const std::string &fn_name ); Object callOnSelf( const std::string &fn_name, const Object &arg1 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3, const Object &arg4 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3, const Object &arg4, const Object &arg5 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3, const Object &arg4, const Object &arg5, const Object &arg6 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3, const Object &arg4, const Object &arg5, const Object &arg6, const Object &arg7 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3, const Object &arg4, const Object &arg5, const Object &arg6, const Object &arg7, const Object &arg8 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3, const Object &arg4, const Object &arg5, const Object &arg6, const Object &arg7, const Object &arg8, const Object &arg9 ); public: virtual PyObject *selfPtr() = 0; virtual Object self() = 0; private: void missing_method( void ); static PyObject *method_call_handler( PyObject *self, PyObject *args ); }; } // Namespace Py // End of __CXX_ExtensionTypeBase__h #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python3/IndirectPythonInterface.hxx000644 000771 000771 00000012567 11541734710 025645 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_INDIRECT_PYTHON_INTERFACE__HXX__ #define __CXX_INDIRECT_PYTHON_INTERFACE__HXX__ #include "CXX/WrapPython.h" namespace Py { bool InitialisePythonIndirectInterface(); // // Wrap Exception variables as function calls // PyObject * _Exc_Exception(); PyObject * _Exc_StandardError(); PyObject * _Exc_ArithmeticError(); PyObject * _Exc_LookupError(); PyObject * _Exc_AssertionError(); PyObject * _Exc_AttributeError(); PyObject * _Exc_EOFError(); PyObject * _Exc_FloatingPointError(); PyObject * _Exc_EnvironmentError(); PyObject * _Exc_IOError(); PyObject * _Exc_OSError(); PyObject * _Exc_ImportError(); PyObject * _Exc_IndexError(); PyObject * _Exc_KeyError(); PyObject * _Exc_KeyboardInterrupt(); PyObject * _Exc_MemoryError(); PyObject * _Exc_NameError(); PyObject * _Exc_OverflowError(); PyObject * _Exc_RuntimeError(); PyObject * _Exc_NotImplementedError(); PyObject * _Exc_SyntaxError(); PyObject * _Exc_SystemError(); PyObject * _Exc_SystemExit(); PyObject * _Exc_TypeError(); PyObject * _Exc_ValueError(); PyObject * _Exc_ZeroDivisionError(); #ifdef MS_WINDOWS PyObject * _Exc_WindowsError(); #endif PyObject * _Exc_IndentationError(); PyObject * _Exc_TabError(); PyObject * _Exc_UnboundLocalError(); PyObject * _Exc_UnicodeError(); // // Wrap Object variables as function calls // PyObject * _None(); PyObject * _False(); PyObject * _True(); // // Wrap Type variables as function calls // PyTypeObject * _List_Type(); bool _List_Check( PyObject *o ); PyTypeObject * _Buffer_Type(); bool _Buffer_Check( PyObject *op ); PyTypeObject * _Class_Type(); bool _Class_Check( PyObject *op ); PyTypeObject * _Instance_Type(); bool _Instance_Check( PyObject *op ); PyTypeObject * _Method_Type(); bool _Method_Check( PyObject *op ); PyTypeObject * _Complex_Type(); bool _Complex_Check( PyObject *op ); PyTypeObject * _Dict_Type(); bool _Dict_Check( PyObject *op ); PyTypeObject * _File_Type(); bool _File_Check( PyObject *op ); PyTypeObject * _Float_Type(); bool _Float_Check( PyObject *op ); PyTypeObject * _Frame_Type(); bool _Frame_Check( PyObject *op ); PyTypeObject * _Function_Type(); bool _Function_Check( PyObject *op ); PyTypeObject * _Bool_Type(); bool _Boolean_Check( PyObject *op ); PyTypeObject * _Int_Type(); bool _Int_Check( PyObject *op ); PyTypeObject * _List_Type(); bool _List_Check( PyObject *op ); PyTypeObject * _Long_Type(); bool _Long_Check( PyObject *op ); PyTypeObject * _CFunction_Type(); bool _CFunction_Check( PyObject *op ); PyTypeObject * _Module_Type(); bool _Module_Check( PyObject *op ); PyTypeObject * _Type_Type(); bool _Type_Check( PyObject *op ); PyTypeObject * _Range_Type(); bool _Range_Check( PyObject *op ); PyTypeObject * _Slice_Type(); bool _Slice_Check( PyObject *op ); PyTypeObject * _Unicode_Type(); bool _Unicode_Check( PyObject *op ); PyTypeObject * _Bytes_Type(); bool _Bytes_Check( PyObject *op ); PyTypeObject * _TraceBack_Type(); bool _TraceBack_Check( PyObject *v ); PyTypeObject * _Tuple_Type(); bool _Tuple_Check( PyObject *op ); int &_Py_DebugFlag(); int &_Py_InteractiveFlag(); int &_Py_OptimizeFlag(); int &_Py_NoSiteFlag(); int &_Py_TabcheckFlag(); int &_Py_VerboseFlag(); int &_Py_UnicodeFlag(); void _XINCREF( PyObject *op ); void _XDECREF( PyObject *op ); char *__Py_PackageContext(); }; #endif // __CXX_INDIRECT_PYTHON_INTERFACE__HXX__ pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python3/Objects.hxx000644 000771 000771 00000264413 11724120210 022434 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_Objects__h #define __CXX_Objects__h #include "CXX/WrapPython.h" #include "CXX/Version.hxx" #include "CXX/Python3/Config.hxx" #include "CXX/Python3/CxxDebug.hxx" #include "CXX/Python3/Exception.hxx" #include #include STR_STREAM #include #include #include #include namespace Py { typedef int sequence_index_type; // type of an index into a sequence // Forward declarations class Object; class Type; template class SeqBase; class Bytes; class String; class List; template class MapBase; class Tuple; class Dict; //===========================================================================// // class Object // The purpose of this class is to serve as the most general kind of // Python object, for the purpose of writing C++ extensions in Python // Objects hold a PyObject* which they own. This pointer is always a // valid pointer to a Python object. In children we must maintain this behavior. // // Instructions on how to make your own class MyType descended from Object: // (0) Pick a base class, either Object or perhaps SeqBase or MapBase. // This example assumes Object. // (1) Write a routine int MyType_Check( PyObject * ) modeled after PyInt_Check, // PyFloat_Check, etc. // (2) Add method accepts: // virtual bool accepts( PyObject *pyob ) const { // return pyob && MyType_Check( pyob ); // } // (3) Include the following constructor and copy constructor // /* explicit MyType( PyObject *pyob ): Object( pyob ) { validate(); } MyType( const Object &other ): Object( other.ptr() ) { validate(); } */ // Alernate version for the constructor to allow for construction from owned pointers: /* explicit MyType( PyObject *pyob ): Object( pyob ) { validate(); } */ // You may wish to add other constructors; see the classes below for examples. // Each constructor must use "set" to set the pointer // and end by validating the pointer you have created. //( 4 ) Each class needs at least these two assignment operators: /* MyType &operator=( const Object &rhs ) { return *this = *rhs; } Mytype &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } */ // Note on accepts: constructors call the base class // version of a virtual when calling the base class constructor, // so the test has to be done explicitly in a descendent. // If you are inheriting from PythonExtension to define an object // note that it contains PythonExtension::check // which you can use in accepts when writing a wrapper class. // See Demo/range.h and Demo/range.cxx for an example. class Object { private: // the pointer to the Python object // Only Object sets this directly. // The default constructor for Object sets it to Py_None and // child classes must use "set" to set it // PyObject *p; protected: void set( PyObject *pyob, bool owned = false ) { release(); p = pyob; if( !owned ) { Py::_XINCREF( p ); } validate(); } void release() { Py::_XDECREF( p ); p = NULL; } void validate(); public: // Constructor acquires new ownership of pointer unless explicitly told not to. explicit Object( PyObject *pyob=Py::_None(), bool owned = false ) : p( pyob ) { if( !owned ) { Py::_XINCREF( p ); } validate(); } // Copy constructor acquires new ownership of pointer Object( const Object &ob ) : p( ob.p ) { Py::_XINCREF( p ); validate(); } // Assignment acquires new ownership of pointer Object &operator=( const Object &rhs ) { set( rhs.p ); return *this; } Object &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } // Destructor virtual ~Object() { release(); } // Loaning the pointer to others, retain ownership PyObject *operator*() const { return p; } // Explicit reference_counting changes void increment_reference_count() { Py::_XINCREF( p ); } void decrement_reference_count() { // not allowed to commit suicide, however if( reference_count() == 1 ) throw RuntimeError( "Object::decrement_reference_count error." ); Py::_XDECREF( p ); } // Would like to call this pointer() but messes up STL in SeqBase PyObject *ptr() const { return p; } // // Queries // // Can pyob be used in this object's constructor? virtual bool accepts( PyObject *pyob ) const { // allow any object or NULL return true; } Py_ssize_t reference_count() const { // the reference count return p ? p->ob_refcnt : 0; } Type type() const; // the type object associated with this one String str() const; // the str() representation std::string as_string() const; String repr() const; // the repr() representation List dir() const; // the dir() list bool hasAttr( const std::string &s ) const { return PyObject_HasAttrString( p, const_cast( s.c_str() ) ) ? true: false; } Object getAttr( const std::string &s ) const { return Object( PyObject_GetAttrString( p, const_cast( s.c_str() ) ), true ); } Object callMemberFunction( const std::string &function_name ) const; Object callMemberFunction( const std::string &function_name, const Tuple &args ) const; Object callMemberFunction( const std::string &function_name, const Tuple &args, const Dict &kw ) const; Object getItem( const Object &key ) const { return Object( PyObject_GetItem( p, *key ), true ); } long hashValue() const { return PyObject_Hash( p ); } // convert to bool bool as_bool() const { return PyObject_IsTrue( ptr() ) != 0; } //operator bool() const //{ // return as_bool(); //} // int print( FILE *fp, int flags=Py_Print_RAW ) //{ // return PyObject_Print( p, fp, flags ); //} bool is( PyObject *pother ) const { // identity test return p == pother; } bool is( const Object &other ) const { // identity test return p == other.p; } bool isNull() const { return p == NULL; } bool isNone() const { return p == _None(); } bool isCallable() const { return PyCallable_Check( p ) != 0; } bool isDict() const { return Py::_Dict_Check( p ); } bool isList() const { return Py::_List_Check( p ); } bool isMapping() const { return PyMapping_Check( p ) != 0; } bool isNumeric() const { return PyNumber_Check( p ) != 0; } bool isSequence() const { return PySequence_Check( p ) != 0; } bool isTrue() const { return PyObject_IsTrue( p ) != 0; } bool isType( const Type &t ) const; bool isTuple() const { return Py::_Tuple_Check( p ); } bool isString() const { return Py::_Unicode_Check( p ); } bool isBytes() const { return Py::_Bytes_Check( p ); } bool isBoolean() const { return Py::_Boolean_Check( p ); } // Commands void setAttr( const std::string &s, const Object &value ) { if( PyObject_SetAttrString( p, const_cast( s.c_str() ), *value ) == -1 ) throw AttributeError( "getAttr failed." ); } void delAttr( const std::string &s ) { if( PyObject_DelAttrString( p, const_cast( s.c_str() ) ) == -1 ) throw AttributeError( "delAttr failed." ); } // PyObject_SetItem is too weird to be using from C++ // so it is intentionally omitted. void delItem( const Object &key ) { //if( PyObject_DelItem( p, *key ) == -1 ) // failed to link on Windows? throw KeyError( "delItem failed." ); } // Equality and comparison use PyObject_Compare }; // End of class Object // Null can be return from when it is require to return NULL to Python from a method class Null: public Object { public: Null() : Object( NULL ) { } virtual ~Null() { } virtual bool accepts( PyObject *pyob ) { return pyob == NULL; } }; //------------------------------------------------------------ bool operator==( const Object &o1, const Object &o2 ); bool operator!=( const Object &o1, const Object &o2 ); bool operator>=( const Object &o1, const Object &o2 ); bool operator<=( const Object &o1, const Object &o2 ); bool operator<( const Object &o1, const Object &o2 ); bool operator>( const Object &o1, const Object &o2 ); //------------------------------------------------------------ // // Convert an owned Python pointer into a PyCXX Object // inline Object asObject( PyObject *p ) { return Object( p, true ); } // new_reference_to also overloaded below on Object inline PyObject *new_reference_to( PyObject *p ) { Py::_XINCREF( p ); return p; } inline PyObject *new_reference_to( const Object &g ) { PyObject *p = g.ptr(); Py::_XINCREF( p ); return p; } // Python special None value inline Object None() { return Object( Py::_None() ); } // Python special Boolean values inline Object False() { return Object( Py::_False() ); } inline Object True() { return Object( Py::_True() ); } // TMM: 31May'01 - Added the #ifndef so I can exlude iostreams. #ifndef CXX_NO_IOSTREAMS std::ostream &operator<<( std::ostream &os, const Object &ob ); #endif // Class Type class Type: public Object { public: explicit Type( PyObject *pyob, bool owned = false ) : Object( pyob, owned ) { validate(); } Type( const Object &ob ) : Object( *ob ) { validate(); } Type( const Type &t ) : Object( t ) { validate(); } Type &operator=( const Object &rhs ) { return *this = *rhs; } Type &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } virtual bool accepts( PyObject *pyob ) const { return pyob && Py::_Type_Check( pyob ); } }; // =============================================== // class boolean class Boolean: public Object { public: // Constructor Boolean( PyObject *pyob, bool owned = false ) : Object( pyob, owned ) { validate(); } Boolean( const Boolean &ob ) : Object( *ob ) { validate(); } // create from bool Boolean( bool v=false ) { set( PyBool_FromLong( v ? 1 : 0 ), true ); validate(); } explicit Boolean( const Object &ob ) : Object( *ob ) { validate(); } // Assignment acquires new ownership of pointer Boolean &operator=( const Object &rhs ) { return *this = *rhs; } Boolean &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } // Membership virtual bool accepts( PyObject *pyob ) const { // accepts any object that can be converted to a boolean return pyob && PyObject_IsTrue( pyob ) != -1; } Boolean &operator=( bool v ) { set( PyBool_FromLong( v ? 1 : 0 ), true ); return *this; } operator bool() const { return as_bool(); } }; // =============================================== // class Long class Long: public Object { public: // Constructor explicit Long( PyObject *pyob, bool owned = false ) : Object( pyob, owned ) { validate(); } Long( const Long &ob ) : Object( ob.ptr() ) { validate(); } // try to create from any object explicit Long( const Object &ob ) : Object( PyNumber_Long( *ob ), true ) { validate(); } // create from long explicit Long( long v = 0L ) : Object( PyLong_FromLong( v ), true ) { validate(); } // create from unsigned long explicit Long( unsigned long v ) : Object( PyLong_FromUnsignedLong( v ), true ) { validate(); } // create from int explicit Long( int v ) : Object( PyLong_FromLong( static_cast( v ) ), true ) { validate(); } #ifdef HAVE_LONG_LONG // create from long long explicit Long( PY_LONG_LONG v ) : Object( PyLong_FromLongLong( v ), true ) { validate(); } // create from unsigned long long explicit Long( unsigned PY_LONG_LONG v ) : Object( PyLong_FromUnsignedLongLong( v ), true ) { validate(); } #endif // Membership virtual bool accepts( PyObject *pyob ) const { return pyob && Py::_Long_Check( pyob ); } // Assignment acquires new ownership of pointer Long &operator=( const Object &rhs ) { return *this = *rhs; } Long &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( PyNumber_Long( rhsp ), true ); return *this; } // assign from an int Long &operator=( int v ) { set( PyLong_FromLong( long( v ) ), true ); return *this; } // assign from long Long &operator=( long v ) { set( PyLong_FromLong( v ), true ); return *this; } // assign from unsigned long Long &operator=( unsigned long v ) { set( PyLong_FromUnsignedLong( v ), true ); return *this; } #ifdef HAVE_LONG_LONG Long &operator=( PY_LONG_LONG v ) { set( PyLong_FromLongLong( v ), true ); return *this; } Long &operator=( unsigned PY_LONG_LONG v ) { set( PyLong_FromUnsignedLongLong( v ), true ); return *this; } #endif //operator bool() const //{ // return as_bool(); //} // convert to long long as_long() const { return PyLong_AsLong( ptr() ); } operator long() const { return as_long(); } operator int() const { return static_cast( as_long() ); } // convert to unsigned long as_unsigned_long() const { return PyLong_AsUnsignedLong( ptr() ); } operator unsigned long() const { return as_unsigned_long(); } double as_double() const { return PyLong_AsDouble( ptr() ); } operator double() const { return as_double(); } #ifdef HAVE_LONG_LONG PY_LONG_LONG as_long_long() const { return PyLong_AsLongLong( ptr() ); } operator PY_LONG_LONG() const { return as_long_long(); } unsigned PY_LONG_LONG as_unsigned_long_long() const { return PyLong_AsUnsignedLongLong( ptr() ); } operator unsigned PY_LONG_LONG() const { return as_unsigned_long_long(); } #endif // prefix ++ Long operator++() { set( PyNumber_Add( ptr(), *Long( 1 ) ) ); return *this; } // postfix ++ Long operator++( int ) { Long a = *this; set( PyNumber_Add( ptr(), *Long( 1 ) ) ); return a; } // prefix -- Long operator--() { set( PyNumber_Subtract( ptr(), *Long( 1 ) ) ); return *this; } // postfix -- Long operator--( int ) { Long a = *this; set( PyNumber_Subtract( ptr(), *Long( 1 ) ) ); return a; } }; #ifdef PYCXX_PYTHON_2TO3 // PyCXX for Python2 had an Int and LongLong classes typedef Long Int; #ifdef HAVE_LONG_LONG typedef Long LongLong; #endif #endif #if 1 //------------------------------------------------------------ // compare operators bool operator!=( const Long &a, const Long &b ); bool operator!=( const Long &a, int b ); bool operator!=( const Long &a, long b ); bool operator!=( int a, const Long &b ); bool operator!=( long a, const Long &b ); //------------------------------ bool operator==( const Long &a, const Long &b ); bool operator==( const Long &a, int b ); bool operator==( const Long &a, long b ); bool operator==( int a, const Long &b ); bool operator==( long a, const Long &b ); //------------------------------ bool operator>( const Long &a, const Long &b ); bool operator>( const Long &a, int b ); bool operator>( const Long &a, long b ); bool operator>( int a, const Long &b ); bool operator>( long a, const Long &b ); //------------------------------ bool operator>=( const Long &a, const Long &b ); bool operator>=( const Long &a, int b ); bool operator>=( const Long &a, long b ); bool operator>=( int a, const Long &b ); bool operator>=( long a, const Long &b ); //------------------------------ bool operator<( const Long &a, const Long &b ); bool operator<( const Long &a, int b ); bool operator<( const Long &a, long b ); bool operator<( int a, const Long &b ); bool operator<( long a, const Long &b ); //------------------------------ bool operator<=( const Long &a, const Long &b ); bool operator<=( int a, const Long &b ); bool operator<=( long a, const Long &b ); bool operator<=( const Long &a, int b ); bool operator<=( const Long &a, long b ); #ifdef HAVE_LONG_LONG //------------------------------ bool operator!=( const Long &a, PY_LONG_LONG b ); bool operator!=( PY_LONG_LONG a, const Long &b ); //------------------------------ bool operator==( const Long &a, PY_LONG_LONG b ); bool operator==( PY_LONG_LONG a, const Long &b ); //------------------------------ bool operator>( const Long &a, PY_LONG_LONG b ); bool operator>( PY_LONG_LONG a, const Long &b ); //------------------------------ bool operator>=( const Long &a, PY_LONG_LONG b ); bool operator>=( PY_LONG_LONG a, const Long &b ); //------------------------------ bool operator<( const Long &a, PY_LONG_LONG b ); bool operator<( PY_LONG_LONG a, const Long &b ); //------------------------------ bool operator<=( const Long &a, PY_LONG_LONG b ); bool operator<=( PY_LONG_LONG a, const Long &b ); #endif #endif // =============================================== // class Float // class Float: public Object { public: // Constructor explicit Float( PyObject *pyob, bool owned = false ) : Object( pyob, owned ) { validate(); } Float( const Float &f ) : Object( f ) { validate(); } // make from double explicit Float( double v=0.0 ) : Object( PyFloat_FromDouble( v ), true ) { validate(); } // try to make from any object Float( const Object &ob ) : Object( PyNumber_Float( *ob ), true ) { validate(); } Float &operator=( const Object &rhs ) { return *this = *rhs; } Float &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( PyNumber_Float( rhsp ), true ); return *this; } // Membership virtual bool accepts( PyObject *pyob ) const { return pyob && Py::_Float_Check( pyob ); } double as_double() const { return PyFloat_AsDouble( ptr() ); } // convert to double operator double() const { return as_double(); } // assign from a double Float &operator=( double v ) { set( PyFloat_FromDouble( v ), true ); return *this; } // assign from an int Float &operator=( int v ) { set( PyFloat_FromDouble( double( v ) ), true ); return *this; } // assign from long Float &operator=( long v ) { set( PyFloat_FromDouble( double( v ) ), true ); return *this; } // assign from an Long Float &operator=( const Long &iob ) { set( PyFloat_FromDouble( double( iob.as_long() ) ), true ); return *this; } }; //------------------------------------------------------------ // compare operators bool operator!=( const Float &a, const Float &b ); bool operator!=( const Float &a, double b ); bool operator!=( double a, const Float &b ); //------------------------------ bool operator==( const Float &a, const Float &b ); bool operator==( const Float &a, double b ); bool operator==( double a, const Float &b ); //------------------------------ bool operator>( const Float &a, const Float &b ); bool operator>( const Float &a, double b ); bool operator>( double a, const Float &b ); //------------------------------ bool operator>=( const Float &a, const Float &b ); bool operator>=( const Float &a, double b ); bool operator>=( double a, const Float &b ); //------------------------------ bool operator<( const Float &a, const Float &b ); bool operator<( const Float &a, double b ); bool operator<( double a, const Float &b ); //------------------------------ bool operator<=( const Float &a, const Float &b ); bool operator<=( double a, const Float &b ); bool operator<=( const Float &a, double b ); // =============================================== // class Complex class Complex: public Object { public: // Constructor explicit Complex( PyObject *pyob, bool owned = false ) : Object( pyob, owned ) { validate(); } Complex( const Complex &f ) : Object( f ) { validate(); } // make from double explicit Complex( double v=0.0, double w=0.0 ) :Object( PyComplex_FromDoubles( v, w ), true ) { validate(); } Complex &operator=( const Object &rhs ) { return *this = *rhs; } Complex &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } // Membership virtual bool accepts( PyObject *pyob ) const { return pyob && Py::_Complex_Check( pyob ); } // convert to Py_complex operator Py_complex() const { return PyComplex_AsCComplex( ptr() ); } // assign from a Py_complex Complex &operator=( const Py_complex &v ) { set( PyComplex_FromCComplex( v ), true ); return *this; } // assign from a double Complex &operator=( double v ) { set( PyComplex_FromDoubles( v, 0.0 ), true ); return *this; } // assign from an int Complex &operator=( int v ) { set( PyComplex_FromDoubles( double( v ), 0.0 ), true ); return *this; } // assign from long Complex &operator=( long v ) { set( PyComplex_FromDoubles( double( v ), 0.0 ), true ); return *this; } // assign from an Long Complex &operator=( const Long &iob ) { set( PyComplex_FromDoubles( double( iob.as_long() ), 0.0 ), true ); return *this; } double real() const { return PyComplex_RealAsDouble( ptr() ); } double imag() const { return PyComplex_ImagAsDouble( ptr() ); } }; // Sequences // Sequences are here represented as sequences of items of type T. // The base class SeqBase represents that. // In basic Python T is always "Object". // seqref is what you get if you get elements from a non-const SeqBase. // Note: seqref could probably be a nested class in SeqBase but that might stress // some compilers needlessly. Simlarly for mapref later. // While this class is not intended for enduser use, it needs some public // constructors for the benefit of the STL. // See Scott Meyer's More Essential C++ for a description of proxies. // This application is even more complicated. We are doing an unusual thing // in having a double proxy. If we want the STL to work // properly we have to compromise by storing the rvalue inside. The // entire Object API is repeated so that things like s[i].isList() will // work properly. // Still, once in a while a weird compiler message may occur using expressions like x[i] // Changing them to Object( x[i] ) helps the compiler to understand that the // conversion of a seqref to an Object is wanted. template class seqref { protected: SeqBase &s; // the sequence int offset; // item number T the_item; // lvalue public: seqref( SeqBase &seq, sequence_index_type j ) : s( seq ) , offset( j ) , the_item( s.getItem( j ) ) {} seqref( const seqref &range ) : s( range.s ) , offset( range.offset ) , the_item( range.the_item ) {} // TMM: added this seqref ctor for use with STL algorithms seqref( Object &obj ) : s( dynamic_cast< SeqBase&>( obj ) ) , offset( NULL ) , the_item( s.getItem( offset ) ) {} ~seqref() {} operator T() const { // rvalue return the_item; } seqref &operator=( const seqref &rhs ) { //used as lvalue the_item = rhs.the_item; s.setItem( offset, the_item ); return *this; } seqref &operator=( const T &ob ) { // used as lvalue the_item = ob; s.setItem( offset, ob ); return *this; } // forward everything else to the item PyObject *ptr() const { return the_item.ptr(); } int reference_count() const { // the reference count return the_item.reference_count(); } Type type() const { return the_item.type(); } String str() const; String repr() const; bool hasAttr( const std::string &attr_name ) const { return the_item.hasAttr( attr_name ); } Object getAttr( const std::string &attr_name ) const { return the_item.getAttr( attr_name ); } Object getItem( const Object &key ) const { return the_item.getItem( key ); } long hashValue() const { return the_item.hashValue(); } bool isCallable() const { return the_item.isCallable(); } bool isInstance() const { return the_item.isInstance(); } bool isDict() const { return the_item.isDict(); } bool isList() const { return the_item.isList(); } bool isMapping() const { return the_item.isMapping(); } bool isNumeric() const { return the_item.isNumeric(); } bool isSequence() const { return the_item.isSequence(); } bool isTrue() const { return the_item.isTrue(); } bool isType( const Type &t ) const { return the_item.isType( t ); } bool isTuple() const { return the_item.isTuple(); } bool isString() const { return the_item.isString(); } // Commands void setAttr( const std::string &attr_name, const Object &value ) { the_item.setAttr( attr_name, value ); } void delAttr( const std::string &attr_name ) { the_item.delAttr( attr_name ); } void delItem( const Object &key ) { the_item.delItem( key ); } bool operator==( const Object &o2 ) const { return the_item == o2; } bool operator!=( const Object &o2 ) const { return the_item != o2; } bool operator>=( const Object &o2 ) const { return the_item >= o2; } bool operator<=( const Object &o2 ) const { return the_item <= o2; } bool operator<( const Object &o2 ) const { return the_item < o2; } bool operator>( const Object &o2 ) const { return the_item > o2; } }; // end of seqref // class SeqBase // ...the base class for all sequence types template class SeqBase: public Object { public: // STL definitions typedef size_t size_type; typedef seqref reference; typedef T const_reference; typedef seqref *pointer; typedef int difference_type; typedef T value_type; // TMM: 26Jun'01 virtual size_type max_size() const { return std::string::npos; // ? } virtual size_type capacity() const { return size(); } virtual void swap( SeqBase &c ) { SeqBase temp = c; c = ptr(); set( temp.ptr() ); } virtual size_type size() const { return PySequence_Length( ptr() ); } explicit SeqBase() :Object( PyTuple_New( 0 ), true ) { validate(); } explicit SeqBase( PyObject *pyob, bool owned=false ) : Object( pyob, owned ) { validate(); } SeqBase( const Object &ob ) : Object( ob ) { validate(); } // Assignment acquires new ownership of pointer SeqBase &operator=( const Object &rhs ) { return *this = *rhs; } SeqBase &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } virtual bool accepts( PyObject *pyob ) const { return pyob && PySequence_Check( pyob ); } size_type length() const { return PySequence_Length( ptr() ); } // Element access const T operator[]( sequence_index_type index ) const { return getItem( index ); } seqref operator[]( sequence_index_type index ) { return seqref( *this, index ); } virtual T getItem( sequence_index_type i ) const { return T( asObject( PySequence_GetItem( ptr(), i ) ) ); } virtual void setItem( sequence_index_type i, const T &ob ) { if( PySequence_SetItem( ptr(), i, *ob ) == -1 ) { throw Exception(); } } SeqBase repeat( int count ) const { return SeqBase( PySequence_Repeat( ptr(), count ), true ); } SeqBase concat( const SeqBase &other ) const { return SeqBase( PySequence_Concat( ptr(), *other ), true ); } // more STL compatability const T front() const { return getItem( 0 ); } seqref front() { return seqref( *this, 0 ); } const T back() const { return getItem( size()-1 ); } seqref back() { return seqref( *this, size()-1 ); } void verify_length( size_type required_size ) const { if( size() != required_size ) throw IndexError( "Unexpected SeqBase length." ); } void verify_length( size_type min_size, size_type max_size ) const { size_type n = size(); if( n < min_size || n > max_size ) throw IndexError( "Unexpected SeqBase length." ); } class iterator : public random_access_iterator_parent( seqref ) { protected: friend class SeqBase; SeqBase *seq; int count; public: ~iterator() {} iterator() : seq( 0 ) , count( 0 ) {} iterator( SeqBase *s, int where ) : seq( s ) , count( where ) {} iterator( const iterator &other ) : seq( other.seq ) , count( other.count ) {} bool eql( const iterator &other ) const { return seq->ptr() == other.seq->ptr() && count == other.count; } bool neq( const iterator &other ) const { return seq->ptr() != other.seq->ptr() || count != other.count; } bool lss( const iterator &other ) const { return count < other.count; } bool gtr( const iterator &other ) const { return count > other.count; } bool leq( const iterator &other ) const { return count <= other.count; } bool geq( const iterator &other ) const { return count >= other.count; } seqref operator*() { return seqref( *seq, count ); } seqref operator[]( sequence_index_type i ) { return seqref( *seq, count + i ); } iterator &operator=( const iterator &other ) { if( this != &other ) { seq = other.seq; count = other.count; } return *this; } iterator operator+( int n ) const { return iterator( seq, count + n ); } iterator operator-( int n ) const { return iterator( seq, count - n ); } iterator &operator+=( int n ) { count = count + n; return *this; } iterator &operator-=( int n ) { count = count - n; return *this; } int operator-( const iterator &other ) const { if( seq->ptr() != other.seq->ptr() ) throw RuntimeError( "SeqBase::iterator comparison error" ); return count - other.count; } // prefix ++ iterator &operator++() { count++; return *this; } // postfix ++ iterator operator++( int ) { return iterator( seq, count++ ); } // prefix -- iterator &operator--() { count--; return *this; } // postfix -- iterator operator--( int ) { return iterator( seq, count-- ); } std::string diagnose() const { std::OSTRSTREAM oss; oss << "iterator diagnosis " << seq << ", " << count << std::ends; return std::string( oss.str() ); } }; // end of class SeqBase::iterator iterator begin() { return iterator( this, 0 ); } iterator end() { return iterator( this, length() ); } class const_iterator : public random_access_iterator_parent( const Object ) { protected: friend class SeqBase; const SeqBase *seq; sequence_index_type count; public: ~const_iterator() {} const_iterator() : seq( 0 ) , count( 0 ) {} const_iterator( const SeqBase *s, int where ) : seq( s ) , count( where ) {} const_iterator( const const_iterator &other ) : seq( other.seq ) , count( other.count ) {} const T operator*() const { return seq->getItem( count ); } const T operator[]( sequence_index_type i ) const { return seq->getItem( count + i ); } const_iterator &operator=( const const_iterator &other ) { if( this != &other ) { seq = other.seq; count = other.count; } return *this; } const_iterator operator+( int n ) const { return const_iterator( seq, count + n ); } bool eql( const const_iterator &other ) const { return seq->ptr() == other.seq->ptr() && count == other.count; } bool neq( const const_iterator &other ) const { return seq->ptr() != other.seq->ptr() || count != other.count; } bool lss( const const_iterator &other ) const { return count < other.count; } bool gtr( const const_iterator &other ) const { return count > other.count; } bool leq( const const_iterator &other ) const { return count <= other.count; } bool geq( const const_iterator &other ) const { return count >= other.count; } const_iterator operator-( int n ) { return const_iterator( seq, count - n ); } const_iterator &operator+=( int n ) { count = count + n; return *this; } const_iterator &operator-=( int n ) { count = count - n; return *this; } int operator-( const const_iterator &other ) const { if( *seq != *other.seq ) throw RuntimeError( "SeqBase::const_iterator::- error" ); return count - other.count; } // prefix ++ const_iterator &operator++() { count++; return *this; } // postfix ++ const_iterator operator++( int ) { return const_iterator( seq, count++ ); } // prefix -- const_iterator &operator--() { count--; return *this; } // postfix -- const_iterator operator--( int ) { return const_iterator( seq, count-- ); } }; // end of class SeqBase::const_iterator const_iterator begin() const { return const_iterator( this, 0 ); } const_iterator end() const { return const_iterator( this, length() ); } }; // Here's an important typedef you might miss if reading too fast... typedef SeqBase Sequence; template bool operator==( const EXPLICIT_TYPENAME SeqBase::iterator &left, const EXPLICIT_TYPENAME SeqBase::iterator &right ); template bool operator!=( const EXPLICIT_TYPENAME SeqBase::iterator &left, const EXPLICIT_TYPENAME SeqBase::iterator &right ); template bool operator< ( const EXPLICIT_TYPENAME SeqBase::iterator &left, const EXPLICIT_TYPENAME SeqBase::iterator &right ); template bool operator> ( const EXPLICIT_TYPENAME SeqBase::iterator &left, const EXPLICIT_TYPENAME SeqBase::iterator &right ); template bool operator<=( const EXPLICIT_TYPENAME SeqBase::iterator &left, const EXPLICIT_TYPENAME SeqBase::iterator &right ); template bool operator>=( const EXPLICIT_TYPENAME SeqBase::iterator &left, const EXPLICIT_TYPENAME SeqBase::iterator &right ); template bool operator==( const EXPLICIT_TYPENAME SeqBase::const_iterator &left, const EXPLICIT_TYPENAME SeqBase::const_iterator &right ); template bool operator!=( const EXPLICIT_TYPENAME SeqBase::const_iterator &left, const EXPLICIT_TYPENAME SeqBase::const_iterator &right ); template bool operator< ( const EXPLICIT_TYPENAME SeqBase::const_iterator &left, const EXPLICIT_TYPENAME SeqBase::const_iterator &right ); template bool operator> ( const EXPLICIT_TYPENAME SeqBase::const_iterator &left, const EXPLICIT_TYPENAME SeqBase::const_iterator &right ); template bool operator<=( const EXPLICIT_TYPENAME SeqBase::const_iterator &left, const EXPLICIT_TYPENAME SeqBase::const_iterator &right ); template bool operator>=( const EXPLICIT_TYPENAME SeqBase::const_iterator &left, const EXPLICIT_TYPENAME SeqBase::const_iterator &right ); extern bool operator==( const Sequence::iterator &left, const Sequence::iterator &right ); extern bool operator!=( const Sequence::iterator &left, const Sequence::iterator &right ); extern bool operator< ( const Sequence::iterator &left, const Sequence::iterator &right ); extern bool operator> ( const Sequence::iterator &left, const Sequence::iterator &right ); extern bool operator<=( const Sequence::iterator &left, const Sequence::iterator &right ); extern bool operator>=( const Sequence::iterator &left, const Sequence::iterator &right ); extern bool operator==( const Sequence::const_iterator &left, const Sequence::const_iterator &right ); extern bool operator!=( const Sequence::const_iterator &left, const Sequence::const_iterator &right ); extern bool operator< ( const Sequence::const_iterator &left, const Sequence::const_iterator &right ); extern bool operator> ( const Sequence::const_iterator &left, const Sequence::const_iterator &right ); extern bool operator<=( const Sequence::const_iterator &left, const Sequence::const_iterator &right ); extern bool operator>=( const Sequence::const_iterator &left, const Sequence::const_iterator &right ); // ================================================== // class Char // Python strings return strings as individual elements. // I'll try having a class Char which is a String of length 1 // typedef std::basic_string unicodestring; extern Py_UNICODE unicode_null_string[1]; class Byte: public Object { public: // Membership virtual bool accepts( PyObject *pyob ) const { return pyob != NULL && Py::_Unicode_Check( pyob ) && PySequence_Length( pyob ) == 1; } explicit Byte( PyObject *pyob, bool owned = false ) : Object( pyob, owned ) { validate(); } Byte( const Object &ob ) : Object( ob ) { validate(); } Byte( const std::string &v = "" ) : Object( PyBytes_FromStringAndSize( const_cast( v.c_str() ), 1 ), true ) { validate(); } Byte( char v ) : Object( PyBytes_FromStringAndSize( &v, 1 ), true ) { validate(); } // Assignment acquires new ownership of pointer Byte &operator=( const Object &rhs ) { return *this = *rhs; } Byte &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } // Assignment from C string Byte &operator=( const std::string &v ) { set( PyBytes_FromStringAndSize( const_cast( v.c_str() ),1 ), true ); return *this; } Byte &operator=( char v ) { set( PyUnicode_FromStringAndSize( &v, 1 ), true ); return *this; } // Conversion operator Bytes() const; }; class Bytes: public SeqBase { public: // Membership virtual bool accepts( PyObject *pyob ) const { return pyob != NULL && Py::_Bytes_Check( pyob ); } virtual size_type capacity() const { return max_size(); } explicit Bytes( PyObject *pyob, bool owned = false ) : SeqBase( pyob, owned ) { validate(); } Bytes( const Object &ob ) : SeqBase( ob ) { validate(); } Bytes() : SeqBase( PyBytes_FromStringAndSize( "", 0 ), true ) { validate(); } Bytes( const std::string &v ) : SeqBase( PyBytes_FromStringAndSize( const_cast( v.data() ), static_cast( v.length() ) ), true ) { validate(); } Bytes( const std::string &v, Py_ssize_t vsize ) : SeqBase( PyBytes_FromStringAndSize( const_cast( v.data() ), static_cast( vsize ) ), true ) { validate(); } Bytes( const char *v ) : SeqBase( PyBytes_FromString( v ), true ) { validate(); } Bytes( const char *v, Py_ssize_t vsize ) : SeqBase( PyBytes_FromStringAndSize( const_cast( v ), vsize ), true ) { validate(); } // Assignment acquires new ownership of pointer Bytes &operator=( const Object &rhs ) { return *this = *rhs; } Bytes &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } // Assignment from C string Bytes &operator=( const std::string &v ) { set( PyBytes_FromStringAndSize( const_cast( v.data() ), static_cast( v.length() ) ), true ); return *this; } String decode( const char *encoding, const char *error="strict" ); // Queries virtual size_type size() const { return static_cast( PyBytes_Size( ptr() ) ); } operator std::string() const { return as_std_string(); } std::string as_std_string() const { return std::string( PyBytes_AsString( ptr() ), static_cast( PyBytes_Size( ptr() ) ) ); } }; class Char: public Object { public: // Membership virtual bool accepts( PyObject *pyob ) const { return pyob != 0 &&( Py::_Unicode_Check( pyob ) ) && PySequence_Length( pyob ) == 1; } explicit Char( PyObject *pyob, bool owned = false ) : Object( pyob, owned ) { validate(); } Char( const Object &ob ) : Object( ob ) { validate(); } Char( int v ) : Object( PyUnicode_FromOrdinal( v ), true ) { validate(); } Char( Py_UNICODE v ) : Object( PyUnicode_FromOrdinal( v ), true ) { validate(); } Char( const unicodestring &v ) : Object( PyUnicode_FromUnicode( const_cast( v.data() ),1 ), true ) { validate(); } // Assignment acquires new ownership of pointer Char &operator=( const Object &rhs ) { return *this = *rhs; } Char &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } Char &operator=( const unicodestring &v ) { set( PyUnicode_FromUnicode( const_cast( v.data() ), 1 ), true ); return *this; } Char &operator=( int v_ ) { Py_UNICODE v( v_ ); set( PyUnicode_FromUnicode( &v, 1 ), true ); return *this; } Char &operator=( Py_UNICODE v ) { set( PyUnicode_FromUnicode( &v, 1 ), true ); return *this; } // Conversion operator String() const; }; class String: public SeqBase { public: virtual size_type capacity() const { return max_size(); } // Membership virtual bool accepts( PyObject *pyob ) const { return pyob != NULL && Py::_Unicode_Check( pyob ); } explicit String( PyObject *pyob, bool owned = false ) : SeqBase( pyob, owned ) { validate(); } String( const Object &ob ) : SeqBase( ob ) { validate(); } String() : SeqBase( PyUnicode_FromString( "" ) ) { validate(); } String( const char *latin1 ) : SeqBase( PyUnicode_FromString( latin1 ) ) { validate(); } String( const std::string &latin1 ) : SeqBase( PyUnicode_FromStringAndSize( latin1.c_str(), latin1.size() ) ) { validate(); } String( const char *latin1, Py_ssize_t size ) : SeqBase( PyUnicode_FromStringAndSize( latin1, size ) ) { validate(); } /* [Taken from Pythons's unicode.h] Many of these APIs take two arguments encoding and errors. These parameters encoding and errors have the same semantics as the ones of the builtin unicode() API. Setting encoding to NULL causes the default encoding to be used. Error handling is set by errors which may also be set to NULL meaning to use the default handling defined for the codec. Default error handling for all builtin codecs is "strict" (ValueErrors are raised). The codecs all use a similar interface. Only deviation from the generic ones are documented. */ String( const std::string &s, const char *encoding, const char *errors=NULL ) : SeqBase( PyUnicode_Decode( s.c_str(), s.size(), encoding, errors ), true ) { validate(); } String( const char *s, const char *encoding, const char *errors=NULL ) : SeqBase( PyUnicode_Decode( s, strlen(s), encoding, errors ), true ) { validate(); } String( const char *s, Py_ssize_t size, const char *encoding, const char *errors=NULL ) : SeqBase( PyUnicode_Decode( s, size, encoding, errors ), true ) { validate(); } String( const Py_UNICODE *s, int length ) : SeqBase( PyUnicode_FromUnicode( s, length ), true ) { validate(); } // Assignment acquires new ownership of pointer String &operator=( const Object &rhs ) { return *this = *rhs; } String &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } String &operator=( const unicodestring &v ) { set( PyUnicode_FromUnicode( const_cast( v.data() ), static_cast( v.length() ) ), true ); return *this; } // Encode Bytes encode( const char *encoding, const char *error="strict" ) const { return Bytes( PyUnicode_AsEncodedString( ptr(), encoding, error ), true ); } // Queries virtual size_type size() const { return static_cast( PyUnicode_GET_SIZE( ptr() ) ); } unicodestring as_unicodestring() const { return unicodestring( PyUnicode_AS_UNICODE( ptr() ), static_cast( PyUnicode_GET_SIZE( ptr() ) ) ); } operator std::string() const { // use the default encoding return as_std_string( NULL ); } std::string as_std_string( const char *encoding=NULL, const char *error="strict" ) const { Bytes b( encode( encoding, error ) ); return b.as_std_string(); } const Py_UNICODE *unicode_data() const { return PyUnicode_AS_UNICODE( ptr() ); } }; // ================================================== // class Tuple class Tuple: public Sequence { public: virtual void setItem( sequence_index_type offset, const Object&ob ) { // note PyTuple_SetItem is a thief... if( PyTuple_SetItem( ptr(), offset, new_reference_to( ob ) ) == -1 ) { throw Exception(); } } // Constructor explicit Tuple( PyObject *pyob, bool owned = false ) : Sequence( pyob, owned ) { validate(); } Tuple( const Object &ob ) : Sequence( ob ) { validate(); } // New tuple of a given size explicit Tuple( int size = 0 ) { set( PyTuple_New( size ), true ); validate(); for( sequence_index_type i=0; i < size; i++ ) { if( PyTuple_SetItem( ptr(), i, new_reference_to( Py::_None() ) ) == -1 ) { throw Exception(); } } } // Tuple from any sequence explicit Tuple( const Sequence &s ) { sequence_index_type limit( sequence_index_type( s.length() ) ); set( PyTuple_New( limit ), true ); validate(); for( sequence_index_type i=0; i < limit; i++ ) { if( PyTuple_SetItem( ptr(), i, new_reference_to( s[i] ) ) == -1 ) { throw Exception(); } } } // Assignment acquires new ownership of pointer Tuple &operator=( const Object &rhs ) { return *this = *rhs; } Tuple &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } // Membership virtual bool accepts( PyObject *pyob ) const { return pyob && Py::_Tuple_Check( pyob ); } Tuple getSlice( int i, int j ) const { return Tuple( PySequence_GetSlice( ptr(), i, j ), true ); } }; class TupleN: public Tuple { public: TupleN() : Tuple( 0 ) { } TupleN( const Object &obj1 ) : Tuple( 1 ) { setItem( 0, obj1 ); } TupleN( const Object &obj1, const Object &obj2 ) : Tuple( 2 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3 ) : Tuple( 3 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3, const Object &obj4 ) : Tuple( 4 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); setItem( 3, obj4 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3, const Object &obj4, const Object &obj5 ) : Tuple( 5 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); setItem( 3, obj4 ); setItem( 4, obj5 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3, const Object &obj4, const Object &obj5, const Object &obj6 ) : Tuple( 6 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); setItem( 3, obj4 ); setItem( 4, obj5 ); setItem( 5, obj6 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3, const Object &obj4, const Object &obj5, const Object &obj6, const Object &obj7 ) : Tuple( 7 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); setItem( 3, obj4 ); setItem( 4, obj5 ); setItem( 5, obj6 ); setItem( 6, obj7 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3, const Object &obj4, const Object &obj5, const Object &obj6, const Object &obj7, const Object &obj8 ) : Tuple( 8 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); setItem( 3, obj4 ); setItem( 4, obj5 ); setItem( 5, obj6 ); setItem( 6, obj7 ); setItem( 7, obj8 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3, const Object &obj4, const Object &obj5, const Object &obj6, const Object &obj7, const Object &obj8, const Object &obj9 ) : Tuple( 9 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); setItem( 3, obj4 ); setItem( 4, obj5 ); setItem( 5, obj6 ); setItem( 6, obj7 ); setItem( 7, obj8 ); setItem( 8, obj9 ); } virtual ~TupleN() { } }; // ================================================== // class List class List: public Sequence { public: // Constructor explicit List( PyObject *pyob, bool owned = false ) : Sequence( pyob, owned ) { validate(); } List( const Object &ob ) : Sequence( ob ) { validate(); } // Creation at a fixed size List( int size = 0 ) { set( PyList_New( size ), true ); validate(); for( sequence_index_type i=0; i < size; i++ ) { if( PyList_SetItem( ptr(), i, new_reference_to( Py::_None() ) ) == -1 ) { throw Exception(); } } } // List from a sequence List( const Sequence &s ) : Sequence() { int n =( int )s.length(); set( PyList_New( n ), true ); validate(); for( sequence_index_type i=0; i < n; i++ ) { if( PyList_SetItem( ptr(), i, new_reference_to( s[i] ) ) == -1 ) { throw Exception(); } } } virtual size_type capacity() const { return max_size(); } // Assignment acquires new ownership of pointer List &operator=( const Object &rhs ) { return *this = *rhs; } List &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } // Membership virtual bool accepts( PyObject *pyob ) const { return pyob && Py::_List_Check( pyob ); } List getSlice( int i, int j ) const { return List( PyList_GetSlice( ptr(), i, j ), true ); } void setSlice( int i, int j, const Object &v ) { if( PyList_SetSlice( ptr(), i, j, *v ) == -1 ) { throw Exception(); } } void append( const Object &ob ) { if( PyList_Append( ptr(), *ob ) == -1 ) { throw Exception(); } } void extend( const Object &ob ) { setSlice( size(), size(), ob ); } void insert( int i, const Object &ob ) { if( PyList_Insert( ptr(), i, *ob ) == -1 ) { throw Exception(); } } void sort() { if( PyList_Sort( ptr() ) == -1 ) { throw Exception(); } } void reverse() { if( PyList_Reverse( ptr() ) == -1 ) { throw Exception(); } } }; // Mappings // ================================================== template class mapref { protected: MapBase &s; // the map Object key; // item key T the_item; public: mapref( MapBase &map, const std::string &k ) : s( map ), the_item() { key = String( k ); if( map.hasKey( key ) ) the_item = map.getItem( key ); } mapref( MapBase &map, const Object &k ) : s( map ), key( k ), the_item() { if( map.hasKey( key ) ) the_item = map.getItem( key ); } virtual ~mapref() {} // MapBase stuff // lvalue mapref &operator=( const mapref &other ) { if( this != &other ) { the_item = other.the_item; s.setItem( key, other.the_item ); } return *this; } mapref &operator=( const T &ob ) { the_item = ob; s.setItem( key, ob ); return *this; } // rvalue operator T() const { return the_item; } // forward everything else to the_item PyObject *ptr() const { return the_item.ptr(); } int reference_count() const { // the mapref count return the_item.reference_count(); } Type type() const { return the_item.type(); } String str() const { return the_item.str(); } String repr() const { return the_item.repr(); } bool hasAttr( const std::string &attr_name ) const { return the_item.hasAttr( attr_name ); } Object getAttr( const std::string &attr_name ) const { return the_item.getAttr( attr_name ); } Object getItem( const Object &k ) const { return the_item.getItem( k ); } long hashValue() const { return the_item.hashValue(); } bool isCallable() const { return the_item.isCallable(); } bool isInstance() const { return the_item.isInstance(); } bool isList() const { return the_item.isList(); } bool isMapping() const { return the_item.isMapping(); } bool isNumeric() const { return the_item.isNumeric(); } bool isSequence() const { return the_item.isSequence(); } bool isTrue() const { return the_item.isTrue(); } bool isType( const Type &t ) const { return the_item.isType( t ); } bool isTuple() const { return the_item.isTuple(); } bool isString() const { return the_item.isString(); } // Commands void setAttr( const std::string &attr_name, const Object &value ) { the_item.setAttr( attr_name, value ); } void delAttr( const std::string &attr_name ) { the_item.delAttr( attr_name ); } void delItem( const Object &k ) { the_item.delItem( k ); } }; // end of mapref #if 0 // TMM: now for mapref template< class T > bool operator==( const mapref &left, const mapref &right ) { return true; // NOT completed. } template< class T > bool operator!=( const mapref &left, const mapref &right ) { return true; // not completed. } #endif template class MapBase: public Object { protected: explicit MapBase() {} public: // reference: proxy class for implementing [] // TMM: 26Jun'01 - the types // If you assume that Python mapping is a hash_map... // hash_map::value_type is not assignable, but //( *it ).second = data must be a valid expression typedef size_t size_type; typedef Object key_type; typedef mapref data_type; typedef std::pair< const T, T > value_type; typedef std::pair< const T, mapref > reference; typedef const std::pair< const T, const T > const_reference; typedef std::pair< const T, mapref > pointer; // Constructor explicit MapBase( PyObject *pyob, bool owned = false ) : Object( pyob, owned ) { validate(); } // TMM: 02Jul'01 - changed MapBase to Object in next line MapBase( const Object &ob ) : Object( ob ) { validate(); } // Assignment acquires new ownership of pointer MapBase &operator=( const Object &rhs ) { return *this = *rhs; } MapBase &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } // Membership virtual bool accepts( PyObject *pyob ) const { return pyob && PyMapping_Check( pyob ); } // Clear -- PyMapping Clear is missing // void clear() { List k = keys(); for( List::iterator i = k.begin(); i != k.end(); i++ ) { delItem( *i ); } } virtual size_type size() const { return PyMapping_Length( ptr() ); } // Element Access T operator[]( const std::string &key ) const { return getItem( key ); } T operator[]( const Object &key ) const { return getItem( key ); } mapref operator[]( const char *key ) { return mapref( *this, key ); } mapref operator[]( const std::string &key ) { return mapref( *this, key ); } mapref operator[]( const Object &key ) { return mapref( *this, key ); } int length() const { return PyMapping_Length( ptr() ); } bool hasKey( const std::string &s ) const { return PyMapping_HasKeyString( ptr(),const_cast( s.c_str() ) ) != 0; } bool hasKey( const Object &s ) const { return PyMapping_HasKey( ptr(), s.ptr() ) != 0; } T getItem( const std::string &s ) const { return T( asObject( PyMapping_GetItemString( ptr(),const_cast( s.c_str() ) ) ) ); } T getItem( const Object &s ) const { return T( asObject( PyObject_GetItem( ptr(), s.ptr() ) ) ); } virtual void setItem( const char *s, const Object &ob ) { if( PyMapping_SetItemString( ptr(), const_cast( s ), *ob ) == -1 ) { throw Exception(); } } virtual void setItem( const std::string &s, const Object &ob ) { if( PyMapping_SetItemString( ptr(), const_cast( s.c_str() ), *ob ) == -1 ) { throw Exception(); } } virtual void setItem( const Object &s, const Object &ob ) { if( PyObject_SetItem( ptr(), s.ptr(), ob.ptr() ) == -1 ) { throw Exception(); } } void delItem( const std::string &s ) { if( PyMapping_DelItemString( ptr(), const_cast( s.c_str() ) ) == -1 ) { throw Exception(); } } void delItem( const Object &s ) { if( PyMapping_DelItem( ptr(), *s ) == -1 ) { throw Exception(); } } // Queries List keys() const { return List( PyMapping_Keys( ptr() ), true ); } List values() const { // each returned item is a (key, value) pair return List( PyMapping_Values( ptr() ), true ); } List items() const { return List( PyMapping_Items( ptr() ), true ); } class iterator { // : public forward_iterator_parent( std::pair ) { protected: typedef std::forward_iterator_tag iterator_category; typedef std::pair< const T, T > value_type; typedef int difference_type; typedef std::pair< const T, mapref > pointer; typedef std::pair< const T, mapref > reference; friend class MapBase; // MapBase *map; List keys; // for iterating over the map int pos; // index into the keys public: ~iterator() {} iterator() : map( 0 ) , keys() , pos( 0 ) {} iterator( MapBase *m, bool end = false ) : map( m ) , keys( m->keys() ) , pos( end ? keys.length() : 0 ) {} iterator( const iterator &other ) : map( other.map ) , keys( other.keys ) , pos( other.pos ) {} iterator( MapBase *map_, List keys_, int pos_ ) : map( map_ ) , keys( keys_ ) , pos( pos_ ) {} reference operator*() { Object key = keys[ pos ]; return std::make_pair( key, mapref( *map, key ) ); } iterator &operator=( const iterator &other ) { if( this != &other ) { map = other.map; keys = other.keys; pos = other.pos; } return *this; } bool eql( const iterator &other ) const { return map->ptr() == other.map->ptr() && pos == other.pos; } bool neq( const iterator &other ) const { return map->ptr() != other.map->ptr() || pos != other.pos; } // pointer operator->() { // return ; // } // prefix ++ iterator &operator++() { pos++; return *this; } // postfix ++ iterator operator++( int ) { return iterator( map, keys, pos++ ); } // prefix -- iterator &operator--() { pos--; return *this; } // postfix -- iterator operator--( int ) { return iterator( map, keys, pos-- ); } std::string diagnose() const { std::OSTRSTREAM oss; oss << "iterator diagnosis " << map << ", " << pos << std::ends; return std::string( oss.str() ); } }; // end of class MapBase::iterator iterator begin() { return iterator( this, false ); } iterator end() { return iterator( this, true ); } class const_iterator { protected: typedef std::forward_iterator_tag iterator_category; typedef const std::pair< const T, T > value_type; typedef int difference_type; typedef const std::pair< const T, T > pointer; typedef const std::pair< const T, T > reference; friend class MapBase; const MapBase *map; List keys; // for iterating over the map int pos; // index into the keys public: ~const_iterator() {} const_iterator() : map( 0 ) , keys() , pos() {} const_iterator( const MapBase *m, List k, int p ) : map( m ) , keys( k ) , pos( p ) {} const_iterator( const const_iterator &other ) : map( other.map ) , keys( other.keys ) , pos( other.pos ) {} bool eql( const const_iterator &other ) const { return map->ptr() == other.map->ptr() && pos == other.pos; } bool neq( const const_iterator &other ) const { return map->ptr() != other.map->ptr() || pos != other.pos; } // const_reference operator*() { // Object key = *pos; // return std::make_pair( key, map->[key] ); // GCC < 3 barfes on this line at the '['. // } const_reference operator*() { Object key = keys[ pos ]; return std::make_pair( key, mapref( *map, key ) ); } const_iterator &operator=( const const_iterator &other ) { if( this != &other ) { map = other.map; keys = other.keys; pos = other.pos; } return *this; } // prefix ++ const_iterator &operator++() { pos++; return *this; } // postfix ++ const_iterator operator++( int ) { return const_iterator( map, keys, pos++ ); } // prefix -- const_iterator &operator--() { pos--; return *this; } // postfix -- const_iterator operator--( int ) { return const_iterator( map, keys, pos-- ); } }; // end of class MapBase::const_iterator const_iterator begin() const { return const_iterator( this, keys(), 0 ); } const_iterator end() const { return const_iterator( this, keys(), length() ); } }; // end of MapBase typedef MapBase Mapping; template bool operator==( const EXPLICIT_TYPENAME MapBase::iterator &left, const EXPLICIT_TYPENAME MapBase::iterator &right ); template bool operator!=( const EXPLICIT_TYPENAME MapBase::iterator &left, const EXPLICIT_TYPENAME MapBase::iterator &right ); template bool operator==( const EXPLICIT_TYPENAME MapBase::const_iterator &left, const EXPLICIT_TYPENAME MapBase::const_iterator &right ); template bool operator!=( const EXPLICIT_TYPENAME MapBase::const_iterator &left, const EXPLICIT_TYPENAME MapBase::const_iterator &right ); extern bool operator==( const Mapping::iterator &left, const Mapping::iterator &right ); extern bool operator!=( const Mapping::iterator &left, const Mapping::iterator &right ); extern bool operator==( const Mapping::const_iterator &left, const Mapping::const_iterator &right ); extern bool operator!=( const Mapping::const_iterator &left, const Mapping::const_iterator &right ); // ================================================== // class Dict class Dict: public Mapping { public: // Constructor explicit Dict( PyObject *pyob, bool owned=false ) : Mapping( pyob, owned ) { validate(); } Dict( const Object &ob ) : Mapping( ob ) { validate(); } // Creation Dict() { set( PyDict_New(), true ); validate(); } // Assignment acquires new ownership of pointer Dict &operator=( const Object &rhs ) { return *this = *rhs; } Dict &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } // Membership virtual bool accepts( PyObject *pyob ) const { return pyob && Py::_Dict_Check( pyob ); } }; class Callable: public Object { public: // Constructor explicit Callable() : Object() {} explicit Callable( PyObject *pyob, bool owned = false ) : Object( pyob, owned ) { validate(); } Callable( const Object &ob ) : Object( ob ) { validate(); } // Assignment acquires new ownership of pointer Callable &operator=( const Object &rhs ) { return *this = *rhs; } Callable &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } // Membership virtual bool accepts( PyObject *pyob ) const { return pyob && PyCallable_Check( pyob ); } // Call Object apply( const Tuple &args ) const { return asObject( PyObject_CallObject( ptr(), args.ptr() ) ); } // Call with keywords Object apply( const Tuple &args, const Dict &kw ) const { return asObject( PyEval_CallObjectWithKeywords( ptr(), args.ptr(), kw.ptr() ) ); } Object apply( PyObject *pargs = 0 ) const { return apply( Tuple( pargs ) ); } }; class Module: public Object { public: explicit Module( PyObject *pyob, bool owned = false ) : Object( pyob, owned ) { validate(); } // Construct from module name explicit Module( const std::string &s ) : Object() { PyObject *m = PyImport_AddModule( const_cast( s.c_str() ) ); set( m, false ); validate(); } // Copy constructor acquires new ownership of pointer Module( const Module &ob ) : Object( *ob ) { validate(); } Module &operator=( const Object &rhs ) { return *this = *rhs; } Module &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } Dict getDict() const { return Dict( PyModule_GetDict( ptr() ) ); // Caution -- PyModule_GetDict returns borrowed reference! } }; // Call function helper inline Object Object::callMemberFunction( const std::string &function_name ) const { Callable target( getAttr( function_name ) ); Tuple args( 0 ); return target.apply( args ); } inline Object Object::callMemberFunction( const std::string &function_name, const Tuple &args ) const { Callable target( getAttr( function_name ) ); return target.apply( args ); } inline Object Object::callMemberFunction( const std::string &function_name, const Tuple &args, const Dict &kw ) const { Callable target( getAttr( function_name ) ); return target.apply( args, kw ); } // Numeric interface inline Object operator+( const Object &a ) { return asObject( PyNumber_Positive( *a ) ); } inline Object operator-( const Object &a ) { return asObject( PyNumber_Negative( *a ) ); } inline Object abs( const Object &a ) { return asObject( PyNumber_Absolute( *a ) ); } //------------------------------------------------------------ // operator + inline Object operator+( const Object &a, const Object &b ) { return asObject( PyNumber_Add( *a, *b ) ); } inline Object operator+( const Object &a, int j ) { return asObject( PyNumber_Add( *a, *Long( j ) ) ); } inline Object operator+( const Object &a, long j ) { return asObject( PyNumber_Add( *a, *Long( j ) ) ); } inline Object operator+( const Object &a, double v ) { return asObject( PyNumber_Add( *a, *Float( v ) ) ); } inline Object operator+( int j, const Object &b ) { return asObject( PyNumber_Add( *Long( j ), *b ) ); } inline Object operator+( long j, const Object &b ) { return asObject( PyNumber_Add( *Long( j ), *b ) ); } inline Object operator+( double v, const Object &b ) { return asObject( PyNumber_Add( *Float( v ), *b ) ); } //------------------------------------------------------------ // operator - inline Object operator-( const Object &a, const Object &b ) { return asObject( PyNumber_Subtract( *a, *b ) ); } inline Object operator-( const Object &a, int j ) { return asObject( PyNumber_Subtract( *a, *Long( j ) ) ); } inline Object operator-( const Object &a, double v ) { return asObject( PyNumber_Subtract( *a, *Float( v ) ) ); } inline Object operator-( int j, const Object &b ) { return asObject( PyNumber_Subtract( *Long( j ), *b ) ); } inline Object operator-( double v, const Object &b ) { return asObject( PyNumber_Subtract( *Float( v ), *b ) ); } //------------------------------------------------------------ // operator * inline Object operator*( const Object &a, const Object &b ) { return asObject( PyNumber_Multiply( *a, *b ) ); } inline Object operator*( const Object &a, int j ) { return asObject( PyNumber_Multiply( *a, *Long( j ) ) ); } inline Object operator*( const Object &a, double v ) { return asObject( PyNumber_Multiply( *a, *Float( v ) ) ); } inline Object operator*( int j, const Object &b ) { return asObject( PyNumber_Multiply( *Long( j ), *b ) ); } inline Object operator*( double v, const Object &b ) { return asObject( PyNumber_Multiply( *Float( v ), *b ) ); } //------------------------------------------------------------ // operator / inline Object operator/( const Object &a, const Object &b ) { return asObject( PyNumber_TrueDivide( *a, *b ) ); } inline Object operator/( const Object &a, int j ) { return asObject( PyNumber_TrueDivide( *a, *Long( j ) ) ); } inline Object operator/( const Object &a, double v ) { return asObject( PyNumber_TrueDivide( *a, *Float( v ) ) ); } inline Object operator/( int j, const Object &b ) { return asObject( PyNumber_TrueDivide( *Long( j ), *b ) ); } inline Object operator/( double v, const Object &b ) { return asObject( PyNumber_TrueDivide( *Float( v ), *b ) ); } //------------------------------------------------------------ // operator % inline Object operator%( const Object &a, const Object &b ) { return asObject( PyNumber_Remainder( *a, *b ) ); } inline Object operator%( const Object &a, int j ) { return asObject( PyNumber_Remainder( *a, *Long( j ) ) ); } inline Object operator%( const Object &a, double v ) { return asObject( PyNumber_Remainder( *a, *Float( v ) ) ); } inline Object operator%( int j, const Object &b ) { return asObject( PyNumber_Remainder( *Long( j ), *b ) ); } inline Object operator%( double v, const Object &b ) { return asObject( PyNumber_Remainder( *Float( v ), *b ) ); } //------------------------------------------------------------ // type inline Object type( const Exception &) // return the type of the error { PyObject *ptype, *pvalue, *ptrace; PyErr_Fetch( &ptype, &pvalue, &ptrace ); Object result; if( ptype ) result = ptype; PyErr_Restore( ptype, pvalue, ptrace ); return result; } inline Object value( const Exception &) // return the value of the error { PyObject *ptype, *pvalue, *ptrace; PyErr_Fetch( &ptype, &pvalue, &ptrace ); Object result; if( pvalue ) result = pvalue; PyErr_Restore( ptype, pvalue, ptrace ); return result; } inline Object trace( const Exception &) // return the traceback of the error { PyObject *ptype, *pvalue, *ptrace; PyErr_Fetch( &ptype, &pvalue, &ptrace ); Object result; if( ptrace ) result = ptrace; PyErr_Restore( ptype, pvalue, ptrace ); return result; } template String seqref::str() const { return the_item.str(); } template String seqref::repr() const { return the_item.repr(); } } // namespace Py #endif // __CXX_Objects__h pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python3/PythonType.hxx000644 000771 000771 00000010766 11146615306 023203 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_PythonType__h #define __CXX_PythonType__h namespace Py { class PythonType { public: // if you define one sequence method you must define // all of them except the assigns PythonType( size_t base_size, int itemsize, const char *default_name ); virtual ~PythonType(); const char *getName() const; const char *getDoc() const; PyTypeObject *type_object() const; PythonType &name( const char *nam ); PythonType &doc( const char *d ); PythonType &supportClass( void ); #ifdef PYCXX_PYTHON_2TO3 PythonType &supportPrint( void ); #endif PythonType &supportGetattr( void ); PythonType &supportSetattr( void ); PythonType &supportGetattro( void ); PythonType &supportSetattro( void ); #ifdef PYCXX_PYTHON_2TO3 PythonType &supportCompare( void ); #endif PythonType &supportRichCompare( void ); PythonType &supportRepr( void ); PythonType &supportStr( void ); PythonType &supportHash( void ); PythonType &supportCall( void ); PythonType &supportIter( void ); PythonType &supportSequenceType( void ); PythonType &supportMappingType( void ); PythonType &supportNumberType( void ); PythonType &supportBufferType( void ); PythonType &set_tp_dealloc( void (*tp_dealloc)( PyObject * ) ); PythonType &set_tp_init( int (*tp_init)( PyObject *self, PyObject *args, PyObject *kwds ) ); PythonType &set_tp_new( PyObject *(*tp_new)( PyTypeObject *subtype, PyObject *args, PyObject *kwds ) ); PythonType &set_methods( PyMethodDef *methods ); // call once all support functions have been called to ready the type bool readyType(); protected: void init_sequence(); void init_mapping(); void init_number(); void init_buffer(); PyTypeObject *table; PySequenceMethods *sequence_table; PyMappingMethods *mapping_table; PyNumberMethods *number_table; PyBufferProcs *buffer_table; private: // // prevent the compiler generating these unwanted functions // PythonType( const PythonType &tb ); // unimplemented void operator=( const PythonType &t ); // unimplemented }; } // Namespace Py // End of __CXX_PythonType__h #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python2/Config.hxx000644 000771 000771 00000010022 11230627123 022237 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __PyCXX_config_hh__ #define __PyCXX_config_hh__ // // Microsoft VC++ 6.0 has no traits // #if defined( _MSC_VER ) # define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 1 #elif defined( __GNUC__ ) # if __GNUC__ >= 3 # define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 1 # else # define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 0 #endif // // Assume all other compilers do // #else // Macros to deal with deficiencies in compilers # define STANDARD_LIBRARY_HAS_ITERATOR_TRAITS 1 #endif #if STANDARD_LIBRARY_HAS_ITERATOR_TRAITS # define random_access_iterator_parent(itemtype) std::iterator #else # define random_access_iterator_parent(itemtype) std::random_access_iterator #endif // // Which C++ standard is in use? // #if defined( _MSC_VER ) # if _MSC_VER <= 1200 // MSVC++ 6.0 # define PYCXX_ISO_CPP_LIB 0 # define STR_STREAM # define TEMPLATE_TYPENAME class # else # define PYCXX_ISO_CPP_LIB 1 # define STR_STREAM # define TEMPLATE_TYPENAME typename # endif #elif defined( __GNUC__ ) # if __GNUC__ >= 3 # define PYCXX_ISO_CPP_LIB 1 # define STR_STREAM # define TEMPLATE_TYPENAME typename # else # define PYCXX_ISO_CPP_LIB 0 # define STR_STREAM # define TEMPLATE_TYPENAME class # endif #endif #if PYCXX_ISO_CPP_LIB # define STR_STREAM # define OSTRSTREAM ostringstream # define EXPLICIT_TYPENAME typename # define EXPLICIT_CLASS class # define TEMPLATE_TYPENAME typename #else # define STR_STREAM # define OSTRSTREAM ostrstream # define EXPLICIT_TYPENAME # define EXPLICIT_CLASS # define TEMPLATE_TYPENAME class #endif // before 2.5 Py_ssize_t was missing #ifndef PY_MAJOR_VERSION #error not defined PY_MAJOR_VERSION #endif #if PY_MAJOR_VERSION < 2 || (PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 5) typedef int Py_ssize_t; #endif #endif // __PyCXX_config_hh__ pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python2/CxxDebug.hxx000644 000771 000771 00000000402 11150315604 022543 0ustar00barrybarry000000 000000 // // CxxDebug.hxx // // Copyright (c) 2008 Barry A. Scott // #ifndef __CXX_Debug_hxx #define __CXX_Debug_hxx // // Functions useful when debugging PyCXX // #ifdef PYCXX_DEBUG extern void bpt(); extern void printRefCount( PyObject *obj ); #endif #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python2/Exception.hxx000644 000771 000771 00000016152 11400430272 022776 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_Exception_h #define __CXX_Exception_h #include "CXX/WrapPython.h" #include "CXX/Version.hxx" #include "CXX/Config.hxx" #include "CXX/IndirectPythonInterface.hxx" #include #include // This mimics the Python structure, in order to minimize confusion namespace Py { class ExtensionExceptionType; class Object; class Exception { public: Exception( ExtensionExceptionType &exception, const std::string& reason ); Exception( ExtensionExceptionType &exception, Object &reason ); explicit Exception () {} Exception (const std::string& reason) { PyErr_SetString (Py::_Exc_RuntimeError(), reason.c_str()); } Exception (PyObject* exception, const std::string& reason) { PyErr_SetString (exception, reason.c_str()); } Exception (PyObject* exception, Object &reason); void clear() // clear the error // technically but not philosophically const { PyErr_Clear(); } }; // Abstract class StandardError: public Exception { protected: explicit StandardError() {} }; class LookupError: public StandardError { protected: explicit LookupError() {} }; class ArithmeticError: public StandardError { protected: explicit ArithmeticError() {} }; class EnvironmentError: public StandardError { protected: explicit EnvironmentError() {} }; // Concrete class TypeError: public StandardError { public: TypeError (const std::string& reason) : StandardError() { PyErr_SetString (Py::_Exc_TypeError(),reason.c_str()); } }; class IndexError: public LookupError { public: IndexError (const std::string& reason) : LookupError() { PyErr_SetString (Py::_Exc_IndexError(), reason.c_str()); } }; class AttributeError: public StandardError { public: AttributeError (const std::string& reason) : StandardError() { PyErr_SetString (Py::_Exc_AttributeError(), reason.c_str()); } }; class NameError: public StandardError { public: NameError (const std::string& reason) : StandardError() { PyErr_SetString (Py::_Exc_NameError(), reason.c_str()); } }; class RuntimeError: public StandardError { public: RuntimeError (const std::string& reason) : StandardError() { PyErr_SetString (Py::_Exc_RuntimeError(), reason.c_str()); } }; class NotImplementedError: public StandardError { public: NotImplementedError (const std::string& reason) : StandardError() { PyErr_SetString (Py::_Exc_NotImplementedError(), reason.c_str()); } }; class SystemError: public StandardError { public: SystemError (const std::string& reason) : StandardError() { PyErr_SetString (Py::_Exc_SystemError(),reason.c_str()); } }; class KeyError: public LookupError { public: KeyError (const std::string& reason) : LookupError() { PyErr_SetString (Py::_Exc_KeyError(),reason.c_str()); } }; class ValueError: public StandardError { public: ValueError (const std::string& reason) : StandardError() { PyErr_SetString (Py::_Exc_ValueError(), reason.c_str()); } }; class OverflowError: public ArithmeticError { public: OverflowError (const std::string& reason) : ArithmeticError() { PyErr_SetString (Py::_Exc_OverflowError(), reason.c_str()); } }; class ZeroDivisionError: public ArithmeticError { public: ZeroDivisionError (const std::string& reason) : ArithmeticError() { PyErr_SetString (Py::_Exc_ZeroDivisionError(), reason.c_str()); } }; class FloatingPointError: public ArithmeticError { public: FloatingPointError (const std::string& reason) : ArithmeticError() { PyErr_SetString (Py::_Exc_FloatingPointError(), reason.c_str()); } }; class MemoryError: public StandardError { public: MemoryError (const std::string& reason) : StandardError() { PyErr_SetString (Py::_Exc_MemoryError(), reason.c_str()); } }; class SystemExit: public StandardError { public: SystemExit (const std::string& reason) : StandardError() { PyErr_SetString (Py::_Exc_SystemExit(),reason.c_str()); } }; }// Py #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python2/ExtensionModule.hxx000644 000771 000771 00000021035 11722441226 024166 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_ExtensionModule__h #define __CXX_ExtensionModule__h namespace Py { class ExtensionModuleBase { public: ExtensionModuleBase( const char *name ); virtual ~ExtensionModuleBase(); Module module( void ) const; // only valid after initialize() has been called Dict moduleDictionary( void ) const; // only valid after initialize() has been called virtual Object invoke_method_noargs( void *method_def ) = 0; virtual Object invoke_method_keyword( void *method_def, const Tuple &_args, const Dict &_keywords ) = 0; virtual Object invoke_method_varargs( void *method_def, const Tuple &_args ) = 0; const std::string &name() const; const std::string &fullName() const; // what is returned from PyInit_ function Object moduleObject( void ) const; protected: // Initialize the module void initialize( const char *module_doc ); const std::string m_module_name; const std::string m_full_module_name; MethodTable m_method_table; PyObject *m_module; private: // // prevent the compiler generating these unwanted functions // ExtensionModuleBase( const ExtensionModuleBase & ); //unimplemented void operator=( const ExtensionModuleBase & ); //unimplemented }; // Note: Python calls noargs as varargs buts args==NULL extern "C" PyObject *method_noargs_call_handler( PyObject *_self_and_name_tuple, PyObject * ); extern "C" PyObject *method_varargs_call_handler( PyObject *_self_and_name_tuple, PyObject *_args ); extern "C" PyObject *method_keyword_call_handler( PyObject *_self_and_name_tuple, PyObject *_args, PyObject *_keywords ); extern "C" void do_not_dealloc( void * ); template class ExtensionModule : public ExtensionModuleBase { public: ExtensionModule( const char *name ) : ExtensionModuleBase( name ) {} virtual ~ExtensionModule() {} protected: typedef Object (T::*method_noargs_function_t)(); typedef Object (T::*method_varargs_function_t)( const Tuple &args ); typedef Object (T::*method_keyword_function_t)( const Tuple &args, const Dict &kws ); typedef std::map *> method_map_t; static void add_noargs_method( const char *name, method_noargs_function_t function, const char *doc="" ) { method_map_t &mm = methods(); mm[ std::string( name ) ] = new MethodDefExt( name, function, method_noargs_call_handler, doc ); } static void add_varargs_method( const char *name, method_varargs_function_t function, const char *doc="" ) { method_map_t &mm = methods(); mm[ std::string( name ) ] = new MethodDefExt( name, function, method_varargs_call_handler, doc ); } static void add_keyword_method( const char *name, method_keyword_function_t function, const char *doc="" ) { method_map_t &mm = methods(); mm[ std::string( name ) ] = new MethodDefExt( name, function, method_keyword_call_handler, doc ); } void initialize( const char *module_doc="" ) { ExtensionModuleBase::initialize( module_doc ); Dict dict( moduleDictionary() ); // // put each of the methods into the modules dictionary // so that we get called back at the function in T. // method_map_t &mm = methods(); EXPLICIT_TYPENAME method_map_t::const_iterator i = mm.begin(); EXPLICIT_TYPENAME method_map_t::const_iterator i_end = mm.end(); for ( ; i != i_end; ++i ) { MethodDefExt *method_def = (*i).second; static PyObject *self = PyCObject_FromVoidPtr( this, do_not_dealloc ); Tuple args( 2 ); args[0] = Object( self, true ); args[1] = Object( PyCObject_FromVoidPtr( method_def, do_not_dealloc ), true ); PyObject *func = PyCFunction_New ( &method_def->ext_meth_def, new_reference_to( args ) ); method_def->py_method = Object( func, true ); dict[ (*i).first ] = method_def->py_method; } } protected: // Tom Malcolmson reports that derived classes need access to these static method_map_t &methods( void ) { static method_map_t *map_of_methods = NULL; if( map_of_methods == NULL ) map_of_methods = new method_map_t; return *map_of_methods; } // this invoke function must be called from within a try catch block virtual Object invoke_method_noargs( void *method_def ) { // cast up to the derived class, method_def and call T *self = static_cast( this ); MethodDefExt *meth_def = reinterpret_cast *>( method_def ); return (self->*meth_def->ext_noargs_function)(); } // this invoke function must be called from within a try catch block virtual Object invoke_method_varargs( void *method_def, const Tuple &args ) { // cast up to the derived class, method_def and call T *self = static_cast( this ); MethodDefExt *meth_def = reinterpret_cast *>( method_def ); return (self->*meth_def->ext_varargs_function)( args ); } // this invoke function must be called from within a try catch block virtual Object invoke_method_keyword( void *method_def, const Tuple &args, const Dict &keywords ) { // cast up to the derived class, method_def and call T *self = static_cast( this ); MethodDefExt *meth_def = reinterpret_cast *>( method_def ); return (self->*meth_def->ext_keyword_function)( args, keywords ); } private: // // prevent the compiler generating these unwanted functions // ExtensionModule( const ExtensionModule & ); //unimplemented void operator=( const ExtensionModule & ); //unimplemented }; } // Namespace Py // End of __CXX_ExtensionModule__h #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python2/ExtensionOldType.hxx000644 000771 000771 00000031612 11615064135 024324 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_ExtensionOldType__h #define __CXX_ExtensionOldType__h namespace Py { template class PythonExtension : public PythonExtensionBase { public: static PyTypeObject *type_object() { return behaviors().type_object(); } static bool check( PyObject *p ) { // is p like me? return p->ob_type == type_object(); } static bool check( const Object &ob ) { return check( ob.ptr() ); } // // every object needs getattr implemented // to support methods // virtual Object getattr( const char *name ) { return getattr_methods( name ); } PyObject *selfPtr() { return this; } Object self() { return asObject( this ); } protected: explicit PythonExtension() : PythonExtensionBase() { PyObject_Init( this, type_object() ); // every object must support getattr behaviors().supportGetattr(); } virtual ~PythonExtension() {} static PythonType &behaviors() { static PythonType* p; if( p == NULL ) { #if defined( _CPPRTTI ) || defined( __GNUG__ ) const char *default_name =( typeid( T ) ).name(); #else const char *default_name = "unknown"; #endif p = new PythonType( sizeof( T ), 0, default_name ); p->set_tp_dealloc( extension_object_deallocator ); } return *p; } typedef Object (T::*method_noargs_function_t)(); typedef Object (T::*method_varargs_function_t)( const Tuple &args ); typedef Object (T::*method_keyword_function_t)( const Tuple &args, const Dict &kws ); typedef std::map *> method_map_t; // support the default attributes, __name__, __doc__ and methods virtual Object getattr_default( const char *_name ) { std::string name( _name ); if( name == "__name__" && type_object()->tp_name != NULL ) { return Py::String( type_object()->tp_name ); } if( name == "__doc__" && type_object()->tp_doc != NULL ) { return Py::String( type_object()->tp_doc ); } // trying to fake out being a class for help() // else if( name == "__bases__" ) // { // return Py::Tuple( 0 ); // } // else if( name == "__module__" ) // { // return Py::Nothing(); // } // else if( name == "__dict__" ) // { // return Py::Dict(); // } return getattr_methods( _name ); } // turn a name into function object virtual Object getattr_methods( const char *_name ) { std::string name( _name ); method_map_t &mm = methods(); // see if name exists and get entry with method EXPLICIT_TYPENAME method_map_t::const_iterator i = mm.find( name ); if( i == mm.end() ) { if( name == "__methods__" ) { List methods; i = mm.begin(); EXPLICIT_TYPENAME method_map_t::const_iterator i_end = mm.end(); for( ; i != i_end; ++i ) methods.append( String( (*i).first ) ); return methods; } throw AttributeError( name ); } MethodDefExt *method_def = i->second; Tuple self( 2 ); self[0] = Object( this ); self[1] = Object( PyCObject_FromVoidPtr( method_def, do_not_dealloc ), true ); PyObject *func = PyCFunction_New( &method_def->ext_meth_def, self.ptr() ); return Object(func, true); } // check that all methods added are unique static void check_unique_method_name( const char *name ) { method_map_t &mm = methods(); EXPLICIT_TYPENAME method_map_t::const_iterator i; i = mm.find( name ); if( i != mm.end() ) throw AttributeError( name ); } static void add_noargs_method( const char *name, method_noargs_function_t function, const char *doc="" ) { check_unique_method_name( name ); method_map_t &mm = methods(); mm[ std::string( name ) ] = new MethodDefExt( name, function, method_noargs_call_handler, doc ); } static void add_varargs_method( const char *name, method_varargs_function_t function, const char *doc="" ) { check_unique_method_name( name ); method_map_t &mm = methods(); mm[ std::string( name ) ] = new MethodDefExt( name, function, method_varargs_call_handler, doc ); } static void add_keyword_method( const char *name, method_keyword_function_t function, const char *doc="" ) { check_unique_method_name( name ); method_map_t &mm = methods(); mm[ std::string( name ) ] = new MethodDefExt( name, function, method_keyword_call_handler, doc ); } private: static method_map_t &methods( void ) { static method_map_t *map_of_methods = NULL; if( map_of_methods == NULL ) map_of_methods = new method_map_t; return *map_of_methods; } // Note: Python calls noargs as varargs buts args==NULL static PyObject *method_noargs_call_handler( PyObject *_self_and_name_tuple, PyObject * ) { try { Tuple self_and_name_tuple( _self_and_name_tuple ); PyObject *self_in_cobject = self_and_name_tuple[0].ptr(); T *self = static_cast( self_in_cobject ); MethodDefExt *meth_def = reinterpret_cast *>( PyCObject_AsVoidPtr( self_and_name_tuple[1].ptr() ) ); Object result; // Adding try & catch in case of STL debug-mode exceptions. #ifdef _STLP_DEBUG try { result = (self->*meth_def->ext_noargs_function)(); } catch( std::__stl_debug_exception ) { // throw cxx::RuntimeError( sErrMsg ); throw RuntimeError( "Error message not set yet." ); } #else result = (self->*meth_def->ext_noargs_function)(); #endif // _STLP_DEBUG return new_reference_to( result.ptr() ); } catch( Exception & ) { return 0; } } static PyObject *method_varargs_call_handler( PyObject *_self_and_name_tuple, PyObject *_args ) { try { Tuple self_and_name_tuple( _self_and_name_tuple ); PyObject *self_in_cobject = self_and_name_tuple[0].ptr(); T *self = static_cast( self_in_cobject ); MethodDefExt *meth_def = reinterpret_cast *>( PyCObject_AsVoidPtr( self_and_name_tuple[1].ptr() ) ); Tuple args( _args ); Object result; // Adding try & catch in case of STL debug-mode exceptions. #ifdef _STLP_DEBUG try { result = (self->*meth_def->ext_varargs_function)( args ); } catch( std::__stl_debug_exception ) { throw RuntimeError( "Error message not set yet." ); } #else result = (self->*meth_def->ext_varargs_function)( args ); #endif // _STLP_DEBUG return new_reference_to( result.ptr() ); } catch( Exception & ) { return 0; } } static PyObject *method_keyword_call_handler( PyObject *_self_and_name_tuple, PyObject *_args, PyObject *_keywords ) { try { Tuple self_and_name_tuple( _self_and_name_tuple ); PyObject *self_in_cobject = self_and_name_tuple[0].ptr(); T *self = static_cast( self_in_cobject ); MethodDefExt *meth_def = reinterpret_cast *>( PyCObject_AsVoidPtr( self_and_name_tuple[1].ptr() ) ); Tuple args( _args ); // _keywords may be NULL so be careful about the way the dict is created Dict keywords; if( _keywords != NULL ) keywords = Dict( _keywords ); Object result( ( self->*meth_def->ext_keyword_function )( args, keywords ) ); return new_reference_to( result.ptr() ); } catch( Exception & ) { return 0; } } static void extension_object_deallocator( PyObject* t ) { delete (T *)( t ); } // // prevent the compiler generating these unwanted functions // explicit PythonExtension( const PythonExtension &other ); void operator=( const PythonExtension &rhs ); }; // // ExtensionObject is an Object that will accept only T's. // template class ExtensionObject: public Object { public: explicit ExtensionObject( PyObject *pyob ) : Object( pyob ) { validate(); } ExtensionObject( const ExtensionObject &other ) : Object( *other ) { validate(); } ExtensionObject( const Object &other ) : Object( *other ) { validate(); } ExtensionObject &operator=( const Object &rhs ) { return( *this = *rhs ); } ExtensionObject &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } virtual bool accepts( PyObject *pyob ) const { return( pyob && T::check( pyob ) ); } // // Obtain a pointer to the PythonExtension object // T *extensionObject( void ) { return static_cast( ptr() ); } }; } // Namespace Py // End of __CXX_ExtensionOldType__h #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python2/Extensions.hxx000644 000771 000771 00000015652 11230627123 023207 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_Extensions__h #define __CXX_Extensions__h #ifdef _MSC_VER // disable warning C4786: symbol greater than 255 character, // okay to ignore #pragma warning( disable: 4786 ) #endif #include "CXX/WrapPython.h" #include "CXX/Version.hxx" #include "CXX/Python2/Config.hxx" #include "CXX/Python2/CxxDebug.hxx" #include "CXX/Python2/Objects.hxx" extern "C" { extern PyObject py_object_initializer; } #include #include // ---------------------------------------------------------------------- namespace Py { class ExtensionModuleBase; // Make an Exception Type for use in raising custom exceptions class ExtensionExceptionType : public Object { public: ExtensionExceptionType(); virtual ~ExtensionExceptionType(); // call init to create the type void init( ExtensionModuleBase &module, const std::string &name, ExtensionExceptionType &parent ); void init( ExtensionModuleBase &module, const std::string &name ); }; class MethodTable { public: MethodTable(); virtual ~MethodTable(); void add( const char *method_name, PyCFunction f, const char *doc="", int flag=1 ); PyMethodDef *table(); protected: std::vector t; // accumulator of PyMethodDef's PyMethodDef *mt; // Actual method table produced when full static PyMethodDef method( const char* method_name, PyCFunction f, int flags=1, const char* doc="" ); private: // // prevent the compiler generating these unwanted functions // MethodTable( const MethodTable &m ); //unimplemented void operator=( const MethodTable &m ); //unimplemented }; // end class MethodTable // Note: Python calls noargs as varargs buts args==NULL extern "C" typedef PyObject *(*method_noargs_call_handler_t)( PyObject *_self, PyObject * ); extern "C" typedef PyObject *(*method_varargs_call_handler_t)( PyObject *_self, PyObject *_args ); extern "C" typedef PyObject *(*method_keyword_call_handler_t)( PyObject *_self, PyObject *_args, PyObject *_dict ); template class MethodDefExt : public PyMethodDef { public: typedef Object (T::*method_noargs_function_t)(); typedef Object (T::*method_varargs_function_t)( const Tuple &args ); typedef Object (T::*method_keyword_function_t)( const Tuple &args, const Dict &kws ); // NOARGS MethodDefExt ( const char *_name, method_noargs_function_t _function, method_noargs_call_handler_t _handler, const char *_doc ) { ext_meth_def.ml_name = const_cast( _name ); ext_meth_def.ml_meth = reinterpret_cast( _handler ); ext_meth_def.ml_flags = METH_NOARGS; ext_meth_def.ml_doc = const_cast( _doc ); ext_noargs_function = _function; ext_varargs_function = NULL; ext_keyword_function = NULL; } // VARARGS MethodDefExt ( const char *_name, method_varargs_function_t _function, method_varargs_call_handler_t _handler, const char *_doc ) { ext_meth_def.ml_name = const_cast( _name ); ext_meth_def.ml_meth = reinterpret_cast( _handler ); ext_meth_def.ml_flags = METH_VARARGS; ext_meth_def.ml_doc = const_cast( _doc ); ext_noargs_function = NULL; ext_varargs_function = _function; ext_keyword_function = NULL; } // VARARGS + KEYWORD MethodDefExt ( const char *_name, method_keyword_function_t _function, method_keyword_call_handler_t _handler, const char *_doc ) { ext_meth_def.ml_name = const_cast( _name ); ext_meth_def.ml_meth = reinterpret_cast( _handler ); ext_meth_def.ml_flags = METH_VARARGS|METH_KEYWORDS; ext_meth_def.ml_doc = const_cast( _doc ); ext_noargs_function = NULL; ext_varargs_function = NULL; ext_keyword_function = _function; } ~MethodDefExt() {} PyMethodDef ext_meth_def; method_noargs_function_t ext_noargs_function; method_varargs_function_t ext_varargs_function; method_keyword_function_t ext_keyword_function; Object py_method; }; } // Namespace Py #include "CXX/Python2/ExtensionModule.hxx" #include "CXX/Python2/PythonType.hxx" #include "CXX/Python2/ExtensionTypeBase.hxx" #include "CXX/Python2/ExtensionOldType.hxx" #include "CXX/Python2/ExtensionType.hxx" // End of CXX_Extensions.h #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python2/ExtensionType.hxx000644 000771 000771 00000033144 11367330334 023670 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_ExtensionClass__h #define __CXX_ExtensionClass__h #define PYCXX_NOARGS_METHOD_NAME( NAME ) _callNoArgsMethod__##NAME #define PYCXX_VARARGS_METHOD_NAME( NAME ) _callVarArgsMethod__##NAME #define PYCXX_KEYWORDS_METHOD_NAME( NAME ) _callKeywordsMethod__##NAME #define PYCXX_NOARGS_METHOD_DECL( CLS, NAME ) \ static PyObject *PYCXX_NOARGS_METHOD_NAME( NAME )( PyObject *_self, PyObject *, PyObject * ) \ { \ try \ { \ Py::PythonClassInstance *self_python = reinterpret_cast< Py::PythonClassInstance * >( _self ); \ CLS *self = reinterpret_cast< CLS * >( self_python->m_pycxx_object ); \ Py::Object r( (self->NAME)() ); \ return Py::new_reference_to( r.ptr() ); \ } \ catch( Py::Exception & ) \ { \ return 0; \ } \ } #define PYCXX_VARARGS_METHOD_DECL( CLS, NAME ) \ static PyObject *PYCXX_VARARGS_METHOD_NAME( NAME )( PyObject *_self, PyObject *_a, PyObject * ) \ { \ try \ { \ Py::PythonClassInstance *self_python = reinterpret_cast< Py::PythonClassInstance * >( _self ); \ CLS *self = reinterpret_cast< CLS * >( self_python->m_pycxx_object ); \ Py::Tuple a( _a ); \ Py::Object r( (self->NAME)( a ) ); \ return Py::new_reference_to( r.ptr() ); \ } \ catch( Py::Exception & ) \ { \ return 0; \ } \ } #define PYCXX_KEYWORDS_METHOD_DECL( CLS, NAME ) \ static PyObject *PYCXX_KEYWORDS_METHOD_NAME( NAME )( PyObject *_self, PyObject *_a, PyObject *_k ) \ { \ try \ { \ Py::PythonClassInstance *self_python = reinterpret_cast< Py::PythonClassInstance * >( _self ); \ CLS *self = reinterpret_cast< CLS * >( self_python->m_pycxx_object ); \ Py::Tuple a( _a ); \ Py::Dict k; \ if( _k != NULL ) \ k = _k; \ Py::Object r( (self->NAME)( a, k ) ); \ return Py::new_reference_to( r.ptr() ); \ } \ catch( Py::Exception & ) \ { \ return 0; \ } \ } // need to support METH_STATIC and METH_CLASS #define PYCXX_ADD_NOARGS_METHOD( PYNAME, NAME, docs ) \ add_method( #PYNAME, (PyCFunction)PYCXX_NOARGS_METHOD_NAME( NAME ), METH_NOARGS, docs ) #define PYCXX_ADD_VARARGS_METHOD( PYNAME, NAME, docs ) \ add_method( #PYNAME, (PyCFunction)PYCXX_VARARGS_METHOD_NAME( NAME ), METH_VARARGS, docs ) #define PYCXX_ADD_KEYWORDS_METHOD( PYNAME, NAME, docs ) \ add_method( #PYNAME, (PyCFunction)PYCXX_KEYWORDS_METHOD_NAME( NAME ), METH_VARARGS | METH_KEYWORDS, docs ) namespace Py { extern PythonExtensionBase *getPythonExtensionBase( PyObject *self ); struct PythonClassInstance { PyObject_HEAD PythonExtensionBase *m_pycxx_object; }; class ExtensionClassMethodsTable { public: ExtensionClassMethodsTable() : m_methods_table( new PyMethodDef[ METHOD_TABLE_SIZE_INCREMENT ] ) , m_methods_used( 0 ) , m_methods_size( METHOD_TABLE_SIZE_INCREMENT ) { } ~ExtensionClassMethodsTable() { delete m_methods_table; } // check that all methods added are unique void check_unique_method_name( const char *_name ) { std::string name( _name ); for( int i=0; iml_name = const_cast( name ); p->ml_meth = function; p->ml_flags = flags; p->ml_doc = const_cast( doc ); m_methods_used++; p++; // add the sentinel marking the table end p->ml_name = NULL; p->ml_meth = NULL; p->ml_flags = 0; p->ml_doc = NULL; return m_methods_table; } private: enum {METHOD_TABLE_SIZE_INCREMENT = 1}; PyMethodDef *m_methods_table; int m_methods_used; int m_methods_size; }; template class PythonClass : public PythonExtensionBase { protected: explicit PythonClass( PythonClassInstance *self, Tuple &args, Dict &kwds ) : PythonExtensionBase() , m_class_instance( self ) { } virtual ~PythonClass() {} static ExtensionClassMethodsTable &methodTable() { static ExtensionClassMethodsTable *method_table; if( method_table == NULL ) method_table = new ExtensionClassMethodsTable; return *method_table; } static void add_method( const char *name, PyCFunction function, int flags, const char *doc=NULL ) { behaviors().set_methods( methodTable().add_method( name, function, flags, doc ) ); } static PythonType &behaviors() { static PythonType *p; if( p == NULL ) { #if defined( _CPPRTTI ) || defined( __GNUG__ ) const char *default_name = (typeid( T )).name(); #else const char *default_name = "unknown"; #endif p = new PythonType( sizeof( T ), 0, default_name ); p->set_tp_new( extension_object_new ); p->set_tp_init( extension_object_init ); p->set_tp_dealloc( extension_object_deallocator ); // we are a class p->supportClass(); // always support get and set attr p->supportGetattro(); p->supportSetattro(); } return *p; } static PyObject *extension_object_new( PyTypeObject *subtype, PyObject *args, PyObject *kwds ) { #ifdef PYCXX_DEBUG std::cout << "extension_object_new()" << std::endl; #endif PythonClassInstance *o = reinterpret_cast( subtype->tp_alloc( subtype, 0 ) ); if( o == NULL ) return NULL; o->m_pycxx_object = NULL; PyObject *self = reinterpret_cast( o ); #ifdef PYCXX_DEBUG std::cout << "extension_object_new() => self=0x" << std::hex << reinterpret_cast< unsigned int >( self ) << std::dec << std::endl; #endif return self; } static int extension_object_init( PyObject *_self, PyObject *args_, PyObject *kwds_ ) { try { Py::Tuple args( args_ ); Py::Dict kwds; if( kwds_ != NULL ) kwds = kwds_; PythonClassInstance *self = reinterpret_cast( _self ); #ifdef PYCXX_DEBUG std::cout << "extension_object_init( self=0x" << std::hex << reinterpret_cast< unsigned int >( self ) << std::dec << " )" << std::endl; std::cout << " self->m_pycxx_object=0x" << std::hex << reinterpret_cast< unsigned int >( self->m_pycxx_object ) << std::dec << std::endl; #endif if( self->m_pycxx_object == NULL ) { self->m_pycxx_object = new T( self, args, kwds ); #ifdef PYCXX_DEBUG std::cout << " self->m_pycxx_object=0x" << std::hex << reinterpret_cast< unsigned int >( self->m_pycxx_object ) << std::dec << std::endl; #endif } else { #ifdef PYCXX_DEBUG std::cout << " reinit - self->m_pycxx_object=0x" << std::hex << reinterpret_cast< unsigned int >( self->m_pycxx_object ) << std::dec << std::endl; #endif self->m_pycxx_object->reinit( args, kwds ); } } catch( Exception & ) { return -1; } return 0; } static void extension_object_deallocator( PyObject *_self ) { PythonClassInstance *self = reinterpret_cast< PythonClassInstance * >( _self ); #ifdef PYCXX_DEBUG std::cout << "extension_object_deallocator( self=0x" << std::hex << reinterpret_cast< unsigned int >( self ) << std::dec << " )" << std::endl; std::cout << " self->m_pycxx_object=0x" << std::hex << reinterpret_cast< unsigned int >( self->m_pycxx_object ) << std::dec << std::endl; #endif delete self->m_pycxx_object; _self->ob_type->tp_free( _self ); } public: static PyTypeObject *type_object() { return behaviors().type_object(); } static Object type() { return Object( reinterpret_cast( behaviors().type_object() ) ); } static bool check( PyObject *p ) { // is p like me? return p->ob_type == type_object(); } static bool check( const Object &ob ) { return check( ob.ptr() ); } virtual PyObject *selfPtr() { return reinterpret_cast( m_class_instance ); } virtual Object self() { return Object( reinterpret_cast( m_class_instance ) ); } protected: private: PythonClassInstance *m_class_instance; private: // // prevent the compiler generating these unwanted functions // explicit PythonClass( const PythonClass &other ); void operator=( const PythonClass &rhs ); }; // // ExtensionObject is an Object that will accept only T's. // template class PythonClassObject: public Object { public: explicit PythonClassObject( PyObject *pyob ) : Object( pyob ) { validate(); } PythonClassObject( const PythonClassObject &other ) : Object( *other ) { validate(); } PythonClassObject( const Object &other ) : Object( *other ) { validate(); } PythonClassObject &operator=( const Object &rhs ) { *this = *rhs; return *this; } PythonClassObject &operator=( PyObject *rhsp ) { if( ptr() != rhsp ) set( rhsp ); return *this; } virtual bool accepts( PyObject *pyob ) const { return( pyob && T::check( pyob ) ); } // // Obtain a pointer to the PythonExtension object // T *getCxxObject( void ) { return dynamic_cast< T * >( getPythonExtensionBase( ptr() ) ); } }; } // Namespace Py // End of __CXX_ExtensionClass__h #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python2/ExtensionTypeBase.hxx000644 000771 000771 00000020342 11722441226 024455 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_ExtensionTypeBase__h #define __CXX_ExtensionTypeBase__h namespace Py { // Class PythonExtension is what you inherit from to create // a new Python extension type. You give your class itself // as the template paramter. // There are two ways that extension objects can get destroyed. // 1. Their reference count goes to zero // 2. Someone does an explicit delete on a pointer. // In(1) the problem is to get the destructor called // We register a special deallocator in the Python type object // (see behaviors()) to do this. // In(2) there is no problem, the dtor gets called. // PythonExtension does not use the usual Python heap allocator, // instead using new/delete. We do the setting of the type object // and reference count, usually done by PyObject_New, in the // base class ctor. // This special deallocator does a delete on the pointer. class PythonExtensionBase : public PyObject { public: PythonExtensionBase(); virtual ~PythonExtensionBase(); public: // object virtual void reinit( Tuple &args, Dict &kwds ); // object basics virtual int print( FILE *, int ); virtual Object getattr( const char * ); virtual int setattr( const char *, const Object & ); virtual Object getattro( const String & ); Object genericGetAttro( const String & ); virtual int setattro( const String &, const Object & ); int genericSetAttro( const String &, const Object & ); virtual int compare( const Object & ); virtual Object rich_compare( const Object &, int ); virtual Object repr(); virtual Object str(); virtual long hash(); virtual Object call( const Object &, const Object & ); virtual Object iter(); virtual PyObject *iternext(); // Sequence methods virtual int sequence_length(); virtual Object sequence_concat( const Object & ); virtual Object sequence_repeat( Py_ssize_t ); virtual Object sequence_item( Py_ssize_t ); virtual Object sequence_slice( Py_ssize_t, Py_ssize_t ); virtual int sequence_ass_item( Py_ssize_t, const Object & ); virtual int sequence_ass_slice( Py_ssize_t, Py_ssize_t, const Object & ); // Mapping virtual int mapping_length(); virtual Object mapping_subscript( const Object & ); virtual int mapping_ass_subscript( const Object &, const Object & ); // Number virtual int number_nonzero(); virtual Object number_negative(); virtual Object number_positive(); virtual Object number_absolute(); virtual Object number_invert(); virtual Object number_int(); virtual Object number_float(); virtual Object number_long(); virtual Object number_oct(); virtual Object number_hex(); virtual Object number_add( const Object & ); virtual Object number_subtract( const Object & ); virtual Object number_multiply( const Object & ); virtual Object number_divide( const Object & ); virtual Object number_remainder( const Object & ); virtual Object number_divmod( const Object & ); virtual Object number_lshift( const Object & ); virtual Object number_rshift( const Object & ); virtual Object number_and( const Object & ); virtual Object number_xor( const Object & ); virtual Object number_or( const Object & ); virtual Object number_power( const Object &, const Object & ); // Buffer virtual Py_ssize_t buffer_getreadbuffer( Py_ssize_t, void** ); virtual Py_ssize_t buffer_getwritebuffer( Py_ssize_t, void** ); virtual Py_ssize_t buffer_getsegcount( Py_ssize_t* ); public: // helper functions to call function fn_name with 0 to 9 args Object callOnSelf( const std::string &fn_name ); Object callOnSelf( const std::string &fn_name, const Object &arg1 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3, const Object &arg4 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3, const Object &arg4, const Object &arg5 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3, const Object &arg4, const Object &arg5, const Object &arg6 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3, const Object &arg4, const Object &arg5, const Object &arg6, const Object &arg7 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3, const Object &arg4, const Object &arg5, const Object &arg6, const Object &arg7, const Object &arg8 ); Object callOnSelf( const std::string &fn_name, const Object &arg1, const Object &arg2, const Object &arg3, const Object &arg4, const Object &arg5, const Object &arg6, const Object &arg7, const Object &arg8, const Object &arg9 ); public: virtual PyObject *selfPtr() = 0; virtual Object self() = 0; private: void missing_method( void ); static PyObject *method_call_handler( PyObject *self, PyObject *args ); }; } // Namespace Py // End of __CXX_ExtensionTypeBase__h #endif pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python2/IndirectPythonInterface.hxx000644 000771 000771 00000013214 11205075152 025625 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_INDIRECT_PYTHON_INTERFACE__HXX__ #define __CXX_INDIRECT_PYTHON_INTERFACE__HXX__ #include "CXX/WrapPython.h" namespace Py { bool InitialisePythonIndirectInterface(); // // Wrap Exception variables as function calls // PyObject * _Exc_Exception(); PyObject * _Exc_StandardError(); PyObject * _Exc_ArithmeticError(); PyObject * _Exc_LookupError(); PyObject * _Exc_AssertionError(); PyObject * _Exc_AttributeError(); PyObject * _Exc_EOFError(); PyObject * _Exc_FloatingPointError(); PyObject * _Exc_EnvironmentError(); PyObject * _Exc_IOError(); PyObject * _Exc_OSError(); PyObject * _Exc_ImportError(); PyObject * _Exc_IndexError(); PyObject * _Exc_KeyError(); PyObject * _Exc_KeyboardInterrupt(); PyObject * _Exc_MemoryError(); PyObject * _Exc_NameError(); PyObject * _Exc_OverflowError(); PyObject * _Exc_RuntimeError(); PyObject * _Exc_NotImplementedError(); PyObject * _Exc_SyntaxError(); PyObject * _Exc_SystemError(); PyObject * _Exc_SystemExit(); PyObject * _Exc_TypeError(); PyObject * _Exc_ValueError(); PyObject * _Exc_ZeroDivisionError(); #ifdef MS_WINDOWS PyObject * _Exc_WindowsError(); #endif PyObject * _Exc_MemoryErrorInst(); #if PY_MAJOR_VERSION >= 2 PyObject * _Exc_IndentationError(); PyObject * _Exc_TabError(); PyObject * _Exc_UnboundLocalError(); PyObject * _Exc_UnicodeError(); #endif // // Wrap Object variables as function calls // PyObject * _None(); PyObject * _False(); PyObject * _True(); // // Wrap Type variables as function calls // PyTypeObject * _List_Type(); bool _List_Check( PyObject *o ); PyTypeObject * _Buffer_Type(); bool _Buffer_Check( PyObject *op ); PyTypeObject * _Class_Type(); bool _Class_Check( PyObject *op ); PyTypeObject * _Instance_Type(); bool _Instance_Check( PyObject *op ); PyTypeObject * _Method_Type(); bool _Method_Check( PyObject *op ); PyTypeObject * _CObject_Type(); bool _CObject_Check( PyObject *op ); PyTypeObject * _Complex_Type(); bool _Complex_Check( PyObject *op ); PyTypeObject * _Dict_Type(); bool _Dict_Check( PyObject *op ); PyTypeObject * _File_Type(); bool _File_Check( PyObject *op ); PyTypeObject * _Float_Type(); bool _Float_Check( PyObject *op ); PyTypeObject * _Frame_Type(); bool _Frame_Check( PyObject *op ); PyTypeObject * _Function_Type(); bool _Function_Check( PyObject *op ); PyTypeObject * _Bool_Type(); bool _Boolean_Check( PyObject *op ); PyTypeObject * _Int_Type(); bool _Int_Check( PyObject *op ); PyTypeObject * _List_Type(); bool _List_Check( PyObject *op ); PyTypeObject * _Long_Type(); bool _Long_Check( PyObject *op ); PyTypeObject * _CFunction_Type(); bool _CFunction_Check( PyObject *op ); PyTypeObject * _Module_Type(); bool _Module_Check( PyObject *op ); PyTypeObject * _Type_Type(); bool _Type_Check( PyObject *op ); PyTypeObject * _Range_Type(); bool _Range_Check( PyObject *op ); PyTypeObject * _Slice_Type(); bool _Slice_Check( PyObject *op ); PyTypeObject * _String_Type(); bool _String_Check( PyObject *op ); PyTypeObject * _Unicode_Type(); bool _Unicode_Check( PyObject *op ); PyTypeObject * _TraceBack_Type(); bool _TraceBack_Check( PyObject *v ); PyTypeObject * _Tuple_Type(); bool _Tuple_Check( PyObject *op ); #if PY_MAJOR_VERSION >= 2 PyTypeObject * _Unicode_Type(); bool _Unicode_Check( PyObject *op ); #endif int &_Py_DebugFlag(); int &_Py_InteractiveFlag(); int &_Py_OptimizeFlag(); int &_Py_NoSiteFlag(); int &_Py_TabcheckFlag(); int &_Py_VerboseFlag(); #if PY_MAJOR_VERSION >= 2 int &_Py_UnicodeFlag(); #endif void _XINCREF( PyObject *op ); void _XDECREF( PyObject *op ); char *__Py_PackageContext(); } #endif // __CXX_INDIRECT_PYTHON_INTERFACE__HXX__ pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python2/Objects.hxx000644 000771 000771 00000270550 11523511652 022445 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_Objects__h #define __CXX_Objects__h #include "CXX/WrapPython.h" #include "CXX/Version.hxx" #include "CXX/Config.hxx" #include "CXX/Exception.hxx" #include #include STR_STREAM #include #include #include #include namespace Py { typedef int sequence_index_type; // type of an index into a sequence // Forward declarations class Object; class Type; template class SeqBase; class String; class List; template class MapBase; class Tuple; class Dict; // new_reference_to also overloaded below on Object inline PyObject* new_reference_to(PyObject* p) { Py::_XINCREF(p); return p; } // returning Null() from an extension method triggers a // Python exception inline PyObject* Null() { return (static_cast(0)); } //===========================================================================// // class Object // The purpose of this class is to serve as the most general kind of // Python object, for the purpose of writing C++ extensions in Python // Objects hold a PyObject* which they own. This pointer is always a // valid pointer to a Python object. In children we must maintain this behavior. // // Instructions on how to make your own class MyType descended from Object: // (0) Pick a base class, either Object or perhaps SeqBase or MapBase. // This example assumes Object. // (1) Write a routine int MyType_Check (PyObject *) modeled after PyInt_Check, // PyFloat_Check, etc. // (2) Add method accepts: // virtual bool accepts (PyObject *pyob) const { // return pyob && MyType_Check (pyob); // } // (3) Include the following constructor and copy constructor // /* explicit MyType (PyObject *pyob): Object(pyob) { validate(); } MyType(const Object& other): Object(other.ptr()) { validate(); } */ // Alernate version for the constructor to allow for construction from owned pointers: /* explicit MyType (PyObject *pyob): Object(pyob) { validate(); } */ // You may wish to add other constructors; see the classes below for examples. // Each constructor must use "set" to set the pointer // and end by validating the pointer you have created. // (4) Each class needs at least these two assignment operators: /* MyType& operator= (const Object& rhs) { return (*this = *rhs); } Mytype& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set(rhsp); return *this; } */ // Note on accepts: constructors call the base class // version of a virtual when calling the base class constructor, // so the test has to be done explicitly in a descendent. // If you are inheriting from PythonExtension to define an object // note that it contains PythonExtension::check // which you can use in accepts when writing a wrapper class. // See Demo/range.h and Demo/range.cxx for an example. class Object { private: // the pointer to the Python object // Only Object sets this directly. // The default constructor for Object sets it to Py_None and // child classes must use "set" to set it // PyObject* p; protected: void set (PyObject* pyob, bool owned = false) { release(); p = pyob; if (!owned) { Py::_XINCREF (p); } validate(); } void release () { Py::_XDECREF (p); p = 0; } void validate(); public: // Constructor acquires new ownership of pointer unless explicitly told not to. explicit Object (PyObject* pyob=Py::_None(), bool owned = false): p (pyob) { if(!owned) { Py::_XINCREF (p); } validate(); } // Copy constructor acquires new ownership of pointer Object (const Object& ob): p(ob.p) { Py::_XINCREF (p); validate(); } // Assignment acquires new ownership of pointer Object& operator= (const Object& rhs) { set(rhs.p); return *this; } Object& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (rhsp); return *this; } // Destructor virtual ~Object () { release (); } // Loaning the pointer to others, retain ownership PyObject* operator* () const { return p; } // Explicit reference_counting changes void increment_reference_count() { Py::_XINCREF(p); } void decrement_reference_count() { // not allowed to commit suicide, however if(reference_count() == 1) throw RuntimeError("Object::decrement_reference_count error."); Py::_XDECREF(p); } // Would like to call this pointer() but messes up STL in SeqBase PyObject* ptr () const { return p; } // // Queries // // Can pyob be used in this object's constructor? virtual bool accepts (PyObject *pyob) const { return (pyob != 0); } Py_ssize_t reference_count () const { // the reference count return p ? p->ob_refcnt : 0; } Type type () const; // the type object associated with this one String str () const; // the str() representation std::string as_string() const; String repr () const; // the repr () representation List dir () const; // the dir() list bool hasAttr (const std::string& s) const { return PyObject_HasAttrString (p, const_cast(s.c_str())) ? true: false; } Object getAttr (const std::string& s) const { return Object (PyObject_GetAttrString (p, const_cast(s.c_str())), true); } Object callMemberFunction( const std::string &function_name ) const; Object callMemberFunction( const std::string &function_name, const Tuple &args ) const; Object callMemberFunction( const std::string &function_name, const Tuple &args, const Dict &kw ) const; Object getItem (const Object& key) const { return Object (PyObject_GetItem(p, *key), true); } long hashValue () const { return PyObject_Hash (p); } // // int print (FILE* fp, int flags=Py_Print_RAW) //{ // return PyObject_Print (p, fp, flags); //} // bool is(PyObject *pother) const { // identity test return p == pother; } bool is(const Object& other) const { // identity test return p == other.p; } bool isNone() const { return p == _None(); } bool isCallable () const { return PyCallable_Check (p) != 0; } bool isInstance () const { return PyInstance_Check (p) != 0; } bool isDict () const { return Py::_Dict_Check (p); } bool isList () const { return Py::_List_Check (p); } bool isMapping () const { return PyMapping_Check (p) != 0; } bool isNumeric () const { return PyNumber_Check (p) != 0; } bool isSequence () const { return PySequence_Check (p) != 0; } bool isTrue () const { return PyObject_IsTrue (p) != 0; } bool isType (const Type& t) const; bool isTuple() const { return Py::_Tuple_Check(p); } bool isString() const { return Py::_String_Check(p) || Py::_Unicode_Check(p); } bool isUnicode() const { return Py::_Unicode_Check( p ); } bool isBoolean() const { return Py::_Boolean_Check( p ); } // Commands void setAttr (const std::string& s, const Object& value) { if(PyObject_SetAttrString (p, const_cast(s.c_str()), *value) == -1) throw AttributeError ("getAttr failed."); } void delAttr (const std::string& s) { if(PyObject_DelAttrString (p, const_cast(s.c_str())) == -1) throw AttributeError ("delAttr failed."); } // PyObject_SetItem is too weird to be using from C++ // so it is intentionally omitted. void delItem (const Object& key) { //if(PyObject_DelItem(p, *key) == -1) // failed to link on Windows? throw KeyError("delItem failed."); } // Equality and comparison use PyObject_RichCompareBool bool operator==(const Object& o2) const { int k = PyObject_RichCompareBool (p, *o2, Py_EQ); if (PyErr_Occurred()) throw Exception(); return k != 0; } bool operator!=(const Object& o2) const { int k = PyObject_RichCompareBool (p, *o2, Py_NE); if (PyErr_Occurred()) throw Exception(); return k != 0; } bool operator>=(const Object& o2) const { int k = PyObject_RichCompareBool (p, *o2, Py_GE); if (PyErr_Occurred()) throw Exception(); return k != 0; } bool operator<=(const Object& o2) const { int k = PyObject_RichCompareBool (p, *o2, Py_LE); if (PyErr_Occurred()) throw Exception(); return k != 0; } bool operator<(const Object& o2) const { int k = PyObject_RichCompareBool (p, *o2, Py_LT); if (PyErr_Occurred()) throw Exception(); return k != 0; } bool operator>(const Object& o2) const { int k = PyObject_RichCompareBool (p, *o2, Py_GT); if (PyErr_Occurred()) throw Exception(); return k != 0; } }; // End of class Object inline PyObject* new_reference_to(const Object& g) { PyObject* p = g.ptr(); Py::_XINCREF(p); return p; } // Nothing() is what an extension method returns if // there is no other return value. inline Object Nothing() { return Object(Py::_None()); } // Python special None value inline Object None() { return Object(Py::_None()); } // Python special Boolean values inline Object False() { return Object(Py::_False()); } inline Object True() { return Object(Py::_True()); } // TMM: 31May'01 - Added the #ifndef so I can exlude iostreams. #ifndef CXX_NO_IOSTREAMS std::ostream& operator<< (std::ostream& os, const Object& ob); #endif // Class Type class Type: public Object { public: explicit Type (PyObject* pyob, bool owned = false): Object(pyob, owned) { validate(); } Type (const Object& ob): Object(*ob) { validate(); } Type(const Type& t): Object(t) { validate(); } Type& operator= (const Object& rhs) { return (*this = *rhs); } Type& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (rhsp); return *this; } virtual bool accepts (PyObject *pyob) const { return pyob && Py::_Type_Check (pyob); } }; // // Convert an owned Python pointer into a CXX Object // inline Object asObject (PyObject *p) { return Object(p, true); } // =============================================== // class boolean class Boolean: public Object { public: // Constructor Boolean (PyObject *pyob, bool owned = false) : Object (pyob, owned) { validate(); } Boolean (const Boolean& ob): Object(*ob) { validate(); } // create from bool Boolean (bool v=false) { set(PyBool_FromLong(v ? 1 : 0), true); validate(); } explicit Boolean (const Object& ob) : Object( *ob ) { validate(); } // Assignment increases reference count on pointer Boolean& operator= (const Object& rhs) { return (*this = *rhs); } Boolean& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (rhsp); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && PyObject_IsTrue(pyob) != -1; } // convert to long operator bool() const { return PyObject_IsTrue (ptr()) != 0; } Boolean& operator= (bool v) { set (PyBool_FromLong (v ? 1 : 0), true); return *this; } }; // =============================================== // class Int class Int: public Object { public: // Constructor Int (PyObject *pyob, bool owned = false): Object (pyob, owned) { validate(); } Int (const Int& ob): Object(*ob) { validate(); } // create from long Int (long v = 0L): Object(PyInt_FromLong(v), true) { validate(); } // create from int Int (int v) { long w = v; set(PyInt_FromLong(w), true); validate(); } // create from bool Int (bool v) { long w = v ? 1 : 0; set(PyInt_FromLong(w), true); validate(); } explicit Int (const Object& ob) { set(PyNumber_Int(*ob), true); validate(); } // Assignment acquires new ownership of pointer Int& operator= (const Object& rhs) { return (*this = *rhs); } Int& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (PyNumber_Int(rhsp), true); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && Py::_Int_Check (pyob); } // convert to long operator long() const { return PyInt_AsLong (ptr()); } #ifdef HAVE_LONG_LONG // convert to long long PY_LONG_LONG asLongLong() const { return PyLong_AsLongLong (ptr()); } // convert to unsigned long long unsigned PY_LONG_LONG asUnsignedLongLong() const { return PyLong_AsUnsignedLongLong (ptr()); } #endif // assign from an int Int& operator= (int v) { set (PyInt_FromLong (long(v)), true); return *this; } // assign from long Int& operator= (long v) { set (PyInt_FromLong (v), true); return *this; } #ifdef HAVE_LONG_LONG // assign from long long Int& operator= (PY_LONG_LONG v) { set (PyLong_FromLongLong (v), true); return *this; } // assign from unsigned long long Int& operator= (unsigned PY_LONG_LONG v) { set (PyLong_FromUnsignedLongLong (v), true); return *this; } #endif }; // =============================================== // class Long class Long: public Object { public: // Constructor explicit Long (PyObject *pyob, bool owned = false): Object (pyob, owned) { validate(); } Long (const Long& ob): Object(ob.ptr()) { validate(); } // create from long explicit Long (long v = 0L) : Object(PyLong_FromLong(v), true) { validate(); } // create from unsigned long explicit Long (unsigned long v) : Object(PyLong_FromUnsignedLong(v), true) { validate(); } // create from int explicit Long (int v) : Object(PyLong_FromLong(static_cast(v)), true) { validate(); } // try to create from any object Long (const Object& ob) : Object(PyNumber_Long(*ob), true) { validate(); } // Assignment acquires new ownership of pointer Long& operator= (const Object& rhs) { return (*this = *rhs); } Long& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (PyNumber_Long(rhsp), true); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && Py::_Long_Check (pyob); } // convert to long long as_long() const { return PyLong_AsLong( ptr() ); } // convert to long operator long() const { return as_long(); } // convert to unsigned operator unsigned long() const { return PyLong_AsUnsignedLong (ptr()); } operator double() const { return PyLong_AsDouble (ptr()); } // assign from an int Long& operator= (int v) { set(PyLong_FromLong (long(v)), true); return *this; } // assign from long Long& operator= (long v) { set(PyLong_FromLong (v), true); return *this; } // assign from unsigned long Long& operator= (unsigned long v) { set(PyLong_FromUnsignedLong (v), true); return *this; } }; #ifdef HAVE_LONG_LONG // =============================================== // class LongLong class LongLong: public Object { public: // Constructor explicit LongLong (PyObject *pyob, bool owned = false): Object (pyob, owned) { validate(); } LongLong (const LongLong& ob): Object(ob.ptr()) { validate(); } // create from long long explicit LongLong (PY_LONG_LONG v = 0L) : Object(PyLong_FromLongLong(v), true) { validate(); } // create from unsigned long long explicit LongLong (unsigned PY_LONG_LONG v) : Object(PyLong_FromUnsignedLongLong(v), true) { validate(); } // create from long explicit LongLong (long v) : Object(PyLong_FromLongLong(v), true) { validate(); } // create from unsigned long explicit LongLong (unsigned long v) : Object(PyLong_FromUnsignedLongLong(v), true) { validate(); } // create from int explicit LongLong (int v) : Object(PyLong_FromLongLong(static_cast(v)), true) { validate(); } // try to create from any object LongLong (const Object& ob) : Object(PyNumber_Long(*ob), true) { validate(); } // Assignment acquires new ownership of pointer LongLong& operator= (const Object& rhs) { return (*this = *rhs); } LongLong& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (PyNumber_Long(rhsp), true); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && Py::_Long_Check (pyob); } // convert to long long operator PY_LONG_LONG() const { return PyLong_AsLongLong (ptr()); } // convert to unsigned long operator unsigned PY_LONG_LONG() const { return PyLong_AsUnsignedLongLong (ptr()); } // convert to long operator long() const { return PyLong_AsLong (ptr()); } // convert to unsigned operator unsigned long() const { return PyLong_AsUnsignedLong (ptr()); } operator double() const { return PyLong_AsDouble (ptr()); } // assign from an int LongLong& operator= (int v) { set(PyLong_FromLongLong (long(v)), true); return *this; } // assign from long long LongLong& operator= (PY_LONG_LONG v) { set(PyLong_FromLongLong (v), true); return *this; } // assign from unsigned long long LongLong& operator= (unsigned PY_LONG_LONG v) { set(PyLong_FromUnsignedLongLong (v), true); return *this; } // assign from long LongLong& operator= (long v) { set(PyLong_FromLongLong (v), true); return *this; } // assign from unsigned long LongLong& operator= (unsigned long v) { set(PyLong_FromUnsignedLongLong (v), true); return *this; } }; #endif // =============================================== // class Float // class Float: public Object { public: // Constructor explicit Float (PyObject *pyob, bool owned = false): Object(pyob, owned) { validate(); } Float (const Float& f): Object(f) { validate(); } // make from double explicit Float (double v=0.0) : Object(PyFloat_FromDouble (v), true) { validate(); } // try to make from any object Float (const Object& ob) : Object(PyNumber_Float(*ob), true) { validate(); } Float& operator= (const Object& rhs) { return (*this = *rhs); } Float& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (PyNumber_Float(rhsp), true); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && Py::_Float_Check (pyob); } // convert to double operator double () const { return PyFloat_AsDouble (ptr()); } // assign from a double Float& operator= (double v) { set(PyFloat_FromDouble (v), true); return *this; } // assign from an int Float& operator= (int v) { set(PyFloat_FromDouble (double(v)), true); return *this; } // assign from long Float& operator= (long v) { set(PyFloat_FromDouble (double(v)), true); return *this; } // assign from an Int Float& operator= (const Int& iob) { set(PyFloat_FromDouble (double(long(iob))), true); return *this; } }; // =============================================== // class Complex class Complex: public Object { public: // Constructor explicit Complex (PyObject *pyob, bool owned = false): Object(pyob, owned) { validate(); } Complex (const Complex& f): Object(f) { validate(); } // make from double explicit Complex (double v=0.0, double w=0.0) :Object(PyComplex_FromDoubles (v, w), true) { validate(); } Complex& operator= (const Object& rhs) { return (*this = *rhs); } Complex& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (rhsp); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && Py::_Complex_Check (pyob); } // convert to Py_complex operator Py_complex () const { return PyComplex_AsCComplex (ptr()); } // assign from a Py_complex Complex& operator= (const Py_complex& v) { set(PyComplex_FromCComplex (v), true); return *this; } // assign from a double Complex& operator= (double v) { set(PyComplex_FromDoubles (v, 0.0), true); return *this; } // assign from an int Complex& operator= (int v) { set(PyComplex_FromDoubles (double(v), 0.0), true); return *this; } // assign from long Complex& operator= (long v) { set(PyComplex_FromDoubles (double(v), 0.0), true); return *this; } // assign from an Int Complex& operator= (const Int& iob) { set(PyComplex_FromDoubles (double(long(iob)), 0.0), true); return *this; } double real() const { return PyComplex_RealAsDouble(ptr()); } double imag() const { return PyComplex_ImagAsDouble(ptr()); } }; // Sequences // Sequences are here represented as sequences of items of type T. // The base class SeqBase represents that. // In basic Python T is always "Object". // seqref is what you get if you get elements from a non-const SeqBase. // Note: seqref could probably be a nested class in SeqBase but that might stress // some compilers needlessly. Simlarly for mapref later. // While this class is not intended for enduser use, it needs some public // constructors for the benefit of the STL. // See Scott Meyer's More Essential C++ for a description of proxies. // This application is even more complicated. We are doing an unusual thing // in having a double proxy. If we want the STL to work // properly we have to compromise by storing the rvalue inside. The // entire Object API is repeated so that things like s[i].isList() will // work properly. // Still, once in a while a weird compiler message may occur using expressions like x[i] // Changing them to Object(x[i]) helps the compiler to understand that the // conversion of a seqref to an Object is wanted. template class seqref { protected: SeqBase& s; // the sequence int offset; // item number T the_item; // lvalue public: seqref (SeqBase& seq, sequence_index_type j) : s(seq), offset(j), the_item (s.getItem(j)) {} seqref (const seqref& range) : s(range.s), offset(range.offset), the_item(range.the_item) {} // TMM: added this seqref ctor for use with STL algorithms seqref (Object& obj) : s(dynamic_cast< SeqBase&>(obj)) , offset( NULL ) , the_item(s.getItem(offset)) {} ~seqref() {} operator T() const { // rvalue return the_item; } seqref& operator=(const seqref& rhs) { //used as lvalue the_item = rhs.the_item; s.setItem(offset, the_item); return *this; } seqref& operator=(const T& ob) { // used as lvalue the_item = ob; s.setItem(offset, ob); return *this; } // forward everything else to the item PyObject* ptr () const { return the_item.ptr(); } int reference_count () const { // the reference count return the_item.reference_count(); } Type type () const { return the_item.type(); } String str () const; String repr () const; bool hasAttr (const std::string& attr_name) const { return the_item.hasAttr(attr_name); } Object getAttr (const std::string& attr_name) const { return the_item.getAttr(attr_name); } Object getItem (const Object& key) const { return the_item.getItem(key); } long hashValue () const { return the_item.hashValue(); } bool isCallable () const { return the_item.isCallable(); } bool isInstance () const { return the_item.isInstance(); } bool isDict () const { return the_item.isDict(); } bool isList () const { return the_item.isList(); } bool isMapping () const { return the_item.isMapping(); } bool isNumeric () const { return the_item.isNumeric(); } bool isSequence () const { return the_item.isSequence(); } bool isTrue () const { return the_item.isTrue(); } bool isType (const Type& t) const { return the_item.isType (t); } bool isTuple() const { return the_item.isTuple(); } bool isString() const { return the_item.isString(); } // Commands void setAttr (const std::string& attr_name, const Object& value) { the_item.setAttr(attr_name, value); } void delAttr (const std::string& attr_name) { the_item.delAttr(attr_name); } void delItem (const Object& key) { the_item.delItem(key); } bool operator==(const Object& o2) const { return the_item == o2; } bool operator!=(const Object& o2) const { return the_item != o2; } bool operator>=(const Object& o2) const { return the_item >= o2; } bool operator<=(const Object& o2) const { return the_item <= o2; } bool operator<(const Object& o2) const { return the_item < o2; } bool operator>(const Object& o2) const { return the_item > o2; } }; // end of seqref // class SeqBase // ...the base class for all sequence types template class SeqBase: public Object { public: // STL definitions typedef size_t size_type; typedef seqref reference; typedef T const_reference; typedef seqref* pointer; typedef int difference_type; typedef T value_type; // TMM: 26Jun'01 virtual size_type max_size() const { return std::string::npos; // ? } virtual size_type capacity() const { return size(); } virtual void swap(SeqBase& c) { SeqBase temp = c; c = ptr(); set(temp.ptr()); } virtual size_type size () const { return PySequence_Length (ptr()); } explicit SeqBase () :Object(PyTuple_New(0), true) { validate(); } explicit SeqBase (PyObject* pyob, bool owned=false) : Object(pyob, owned) { validate(); } SeqBase (const Object& ob): Object(ob) { validate(); } // Assignment acquires new ownership of pointer SeqBase& operator= (const Object& rhs) { return (*this = *rhs); } SeqBase& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (rhsp); return *this; } virtual bool accepts (PyObject *pyob) const { return pyob && PySequence_Check (pyob); } size_type length () const { return PySequence_Length (ptr()); } // Element access const T operator[](sequence_index_type index) const { return getItem(index); } seqref operator[](sequence_index_type index) { return seqref(*this, index); } virtual T getItem (sequence_index_type i) const { return T(asObject(PySequence_GetItem (ptr(), i))); } virtual void setItem (sequence_index_type i, const T& ob) { if (PySequence_SetItem (ptr(), i, *ob) == -1) { throw Exception(); } } SeqBase repeat (int count) const { return SeqBase (PySequence_Repeat (ptr(), count), true); } SeqBase concat (const SeqBase& other) const { return SeqBase (PySequence_Concat(ptr(), *other), true); } // more STL compatability const T front () const { return getItem(0); } seqref front() { return seqref(*this, 0); } const T back() const { return getItem(size()-1); } seqref back() { return seqref(*this, size()-1); } void verify_length(size_type required_size) const { if (size() != required_size) throw IndexError ("Unexpected SeqBase length."); } void verify_length(size_type min_size, size_type max_size) const { size_type n = size(); if (n < min_size || n > max_size) throw IndexError ("Unexpected SeqBase length."); } class iterator : public random_access_iterator_parent(seqref) { protected: friend class SeqBase; SeqBase* seq; int count; public: ~iterator () {} iterator () : seq( 0 ) , count( 0 ) {} iterator (SeqBase* s, int where) : seq( s ) , count( where ) {} iterator (const iterator& other) : seq( other.seq ) , count( other.count ) {} bool eql (const iterator& other) const { return (seq->ptr() == other.seq->ptr()) && (count == other.count); } bool neq (const iterator& other) const { return (seq->ptr() != other.seq->ptr()) || (count != other.count); } bool lss (const iterator& other) const { return (count < other.count); } bool gtr (const iterator& other) const { return (count > other.count); } bool leq (const iterator& other) const { return (count <= other.count); } bool geq (const iterator& other) const { return (count >= other.count); } seqref operator*() { return seqref(*seq, count); } seqref operator[] (sequence_index_type i) { return seqref(*seq, count + i); } iterator& operator=(const iterator& other) { if (this == &other) return *this; seq = other.seq; count = other.count; return *this; } iterator operator+(int n) const { return iterator(seq, count + n); } iterator operator-(int n) const { return iterator(seq, count - n); } iterator& operator+=(int n) { count = count + n; return *this; } iterator& operator-=(int n) { count = count - n; return *this; } int operator-(const iterator& other) const { if (*seq != *other.seq) throw RuntimeError ("SeqBase::iterator comparison error"); return count - other.count; } // prefix ++ iterator& operator++ () { count++; return *this;} // postfix ++ iterator operator++ (int) { return iterator(seq, count++);} // prefix -- iterator& operator-- () { count--; return *this;} // postfix -- iterator operator-- (int) { return iterator(seq, count--);} std::string diagnose() const { std::OSTRSTREAM oss; oss << "iterator diagnosis " << seq << ", " << count << std::ends; return std::string(oss.str()); } }; // end of class SeqBase::iterator iterator begin () { return iterator(this, 0); } iterator end () { return iterator(this, length()); } class const_iterator : public random_access_iterator_parent(const Object) { protected: friend class SeqBase; const SeqBase* seq; sequence_index_type count; private: const_iterator (const SeqBase* s, int where) : seq( s ) , count( where ) {} public: ~const_iterator () {} const_iterator () : seq( 0 ) , count( 0 ) {} const_iterator(const const_iterator& other) : seq( other.seq ) , count( other.count ) {} const T operator*() const { return seq->getItem(count); } const T operator[] (sequence_index_type i) const { return seq->getItem(count + i); } const_iterator& operator=(const const_iterator& other) { if (this == &other) return *this; seq = other.seq; count = other.count; return *this; } const_iterator operator+(int n) const { return const_iterator(seq, count + n); } bool eql (const const_iterator& other) const { return (seq->ptr() == other.seq->ptr()) && (count == other.count); } bool neq (const const_iterator& other) const { return (seq->ptr() != other.seq->ptr()) || (count != other.count); } bool lss (const const_iterator& other) const { return (count < other.count); } bool gtr (const const_iterator& other) const { return (count > other.count); } bool leq (const const_iterator& other) const { return (count <= other.count); } bool geq (const const_iterator& other) const { return (count >= other.count); } const_iterator operator-(int n) { return const_iterator(seq, count - n); } const_iterator& operator+=(int n) { count = count + n; return *this; } const_iterator& operator-=(int n) { count = count - n; return *this; } int operator-(const const_iterator& other) const { if (*seq != *other.seq) throw RuntimeError ("SeqBase::const_iterator::- error"); return count - other.count; } // prefix ++ const_iterator& operator++ () { count++; return *this;} // postfix ++ const_iterator operator++ (int) { return const_iterator(seq, count++);} // prefix -- const_iterator& operator-- () { count--; return *this;} // postfix -- const_iterator operator-- (int) { return const_iterator(seq, count--);} }; // end of class SeqBase::const_iterator const_iterator begin () const { return const_iterator(this, 0); } const_iterator end () const { return const_iterator(this, length()); } }; // Here's an important typedef you might miss if reading too fast... typedef SeqBase Sequence; template bool operator==(const EXPLICIT_TYPENAME SeqBase::iterator& left, const EXPLICIT_TYPENAME SeqBase::iterator& right); template bool operator!=(const EXPLICIT_TYPENAME SeqBase::iterator& left, const EXPLICIT_TYPENAME SeqBase::iterator& right); template bool operator< (const EXPLICIT_TYPENAME SeqBase::iterator& left, const EXPLICIT_TYPENAME SeqBase::iterator& right); template bool operator> (const EXPLICIT_TYPENAME SeqBase::iterator& left, const EXPLICIT_TYPENAME SeqBase::iterator& right); template bool operator<=(const EXPLICIT_TYPENAME SeqBase::iterator& left, const EXPLICIT_TYPENAME SeqBase::iterator& right); template bool operator>=(const EXPLICIT_TYPENAME SeqBase::iterator& left, const EXPLICIT_TYPENAME SeqBase::iterator& right); template bool operator==(const EXPLICIT_TYPENAME SeqBase::const_iterator& left, const EXPLICIT_TYPENAME SeqBase::const_iterator& right); template bool operator!=(const EXPLICIT_TYPENAME SeqBase::const_iterator& left, const EXPLICIT_TYPENAME SeqBase::const_iterator& right); template bool operator< (const EXPLICIT_TYPENAME SeqBase::const_iterator& left, const EXPLICIT_TYPENAME SeqBase::const_iterator& right); template bool operator> (const EXPLICIT_TYPENAME SeqBase::const_iterator& left, const EXPLICIT_TYPENAME SeqBase::const_iterator& right); template bool operator<=(const EXPLICIT_TYPENAME SeqBase::const_iterator& left, const EXPLICIT_TYPENAME SeqBase::const_iterator& right); template bool operator>=(const EXPLICIT_TYPENAME SeqBase::const_iterator& left, const EXPLICIT_TYPENAME SeqBase::const_iterator& right); extern bool operator==(const Sequence::iterator& left, const Sequence::iterator& right); extern bool operator!=(const Sequence::iterator& left, const Sequence::iterator& right); extern bool operator< (const Sequence::iterator& left, const Sequence::iterator& right); extern bool operator> (const Sequence::iterator& left, const Sequence::iterator& right); extern bool operator<=(const Sequence::iterator& left, const Sequence::iterator& right); extern bool operator>=(const Sequence::iterator& left, const Sequence::iterator& right); extern bool operator==(const Sequence::const_iterator& left, const Sequence::const_iterator& right); extern bool operator!=(const Sequence::const_iterator& left, const Sequence::const_iterator& right); extern bool operator< (const Sequence::const_iterator& left, const Sequence::const_iterator& right); extern bool operator> (const Sequence::const_iterator& left, const Sequence::const_iterator& right); extern bool operator<=(const Sequence::const_iterator& left, const Sequence::const_iterator& right); extern bool operator>=(const Sequence::const_iterator& left, const Sequence::const_iterator& right); // ================================================== // class Char // Python strings return strings as individual elements. // I'll try having a class Char which is a String of length 1 // typedef std::basic_string unicodestring; extern Py_UNICODE unicode_null_string[1]; class Char: public Object { public: explicit Char (PyObject *pyob, bool owned = false): Object(pyob, owned) { validate(); } Char (const Object& ob): Object(ob) { validate(); } Char (const std::string& v = "") :Object(PyString_FromStringAndSize (const_cast(v.c_str()),1), true) { validate(); } Char (char v) : Object(PyString_FromStringAndSize (&v, 1), true) { validate(); } Char (Py_UNICODE v) : Object(PyUnicode_FromUnicode (&v, 1), true) { validate(); } // Assignment acquires new ownership of pointer Char& operator= (const Object& rhs) { return (*this = *rhs); } Char& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (rhsp); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && (Py::_String_Check(pyob) || Py::_Unicode_Check(pyob)) && PySequence_Length (pyob) == 1; } // Assignment from C string Char& operator= (const std::string& v) { set(PyString_FromStringAndSize (const_cast(v.c_str()),1), true); return *this; } Char& operator= (char v) { set(PyString_FromStringAndSize (&v, 1), true); return *this; } Char& operator= (const unicodestring& v) { set(PyUnicode_FromUnicode (const_cast(v.data()),1), true); return *this; } Char& operator= (Py_UNICODE v) { set(PyUnicode_FromUnicode (&v, 1), true); return *this; } // Conversion operator String() const; operator std::string () const { return std::string(PyString_AsString (ptr())); } }; #ifdef PYCXX_PYTHON_2TO3 // String and Bytes compatible with Python3 version in 6.0.0 PyCXX class Bytes; class String: public SeqBase { public: virtual size_type capacity() const { return max_size(); } explicit String( PyObject *pyob, bool owned = false) : SeqBase( pyob, owned ) { validate(); } String( const Object& ob): SeqBase(ob) { validate(); } String() : SeqBase( PyString_FromStringAndSize( "", 0 ), true ) { validate(); } String( const std::string& v ) : SeqBase( PyString_FromStringAndSize( const_cast(v.data()), static_cast( v.length() ) ), true ) { validate(); } String( const Py_UNICODE *s, int length ) : SeqBase( PyUnicode_FromUnicode( s, length ), true ) { validate(); } String( const char *s, const char *encoding, const char *error="strict" ) : SeqBase( PyUnicode_Decode( s, strlen( s ), encoding, error ), true ) { validate(); } String( const char *s, int len, const char *encoding, const char *error="strict" ) : SeqBase( PyUnicode_Decode( s, len, encoding, error ), true ) { validate(); } String( const std::string &s, const char *encoding, const char *error="strict" ) : SeqBase( PyUnicode_Decode( s.c_str(), s.length(), encoding, error ), true ) { validate(); } String( const char *v, int vsize ) : SeqBase(PyString_FromStringAndSize( const_cast(v), vsize ), true ) { validate(); } String( const char *v ) : SeqBase( PyString_FromString( v ), true ) { validate(); } // Assignment acquires new ownership of pointer String &operator=( const Object &rhs ) { return *this = *rhs; } String& operator= (PyObject *rhsp) { if( ptr() == rhsp ) return *this; set (rhsp); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && (Py::_String_Check(pyob) || Py::_Unicode_Check(pyob)); } // Assignment from C string String& operator=( const std::string &v ) { set( PyString_FromStringAndSize( const_cast( v.data() ), static_cast( v.length() ) ), true ); return *this; } String& operator=( const unicodestring &v ) { set( PyUnicode_FromUnicode( const_cast( v.data() ), static_cast( v.length() ) ), true ); return *this; } // Encode Bytes encode( const char *encoding, const char *error="strict" ) const; // Queries virtual size_type size() const { if( isUnicode() ) { return static_cast( PyUnicode_GET_SIZE (ptr()) ); } else { return static_cast( PyString_Size (ptr()) ); } } operator std::string() const { return as_std_string( "utf-8" ); } std::string as_std_string( const char *encoding, const char *error="strict" ) const; unicodestring as_unicodestring() const { if( isUnicode() ) { return unicodestring( PyUnicode_AS_UNICODE( ptr() ), static_cast( PyUnicode_GET_SIZE( ptr() ) ) ); } else { throw TypeError("can only return unicodestring from Unicode object"); } } const Py_UNICODE *unicode_data() const { if( isUnicode() ) { return PyUnicode_AS_UNICODE( ptr() ); } else { throw TypeError("can only return unicode_data from Unicode object"); } } }; class Bytes: public SeqBase { public: virtual size_type capacity() const { return max_size(); } explicit Bytes (PyObject *pyob, bool owned = false): SeqBase(pyob, owned) { validate(); } Bytes (const Object& ob): SeqBase(ob) { validate(); } Bytes() : SeqBase( PyString_FromStringAndSize( "", 0 ), true ) { validate(); } Bytes( const std::string& v ) : SeqBase( PyString_FromStringAndSize( const_cast(v.data()), static_cast( v.length() ) ), true ) { validate(); } Bytes( const char *v, int vsize ) : SeqBase(PyString_FromStringAndSize( const_cast(v), vsize ), true ) { validate(); } Bytes( const char *v ) : SeqBase( PyString_FromString( v ), true ) { validate(); } // Assignment acquires new ownership of pointer Bytes &operator= ( const Object& rhs ) { return *this = *rhs; } Bytes &operator= (PyObject *rhsp) { if( ptr() == rhsp ) return *this; set (rhsp); return *this; } // Membership virtual bool accepts( PyObject *pyob ) const { return pyob && (Py::_String_Check( pyob ) || Py::_Unicode_Check( pyob )); } // Assignment from C string Bytes &operator= (const std::string& v) { set( PyString_FromStringAndSize( const_cast( v.data() ), static_cast( v.length() ) ), true ); return *this; } Bytes &operator= (const unicodestring& v) { set( PyUnicode_FromUnicode( const_cast( v.data() ), static_cast( v.length() ) ), true ); return *this; } String decode( const char *encoding, const char *error="strict" ) { return Object( PyString_AsDecodedObject( ptr(), encoding, error ), true ); } // Queries virtual size_type size () const { if( isUnicode() ) { return static_cast( PyUnicode_GET_SIZE (ptr()) ); } else { return static_cast( PyString_Size (ptr()) ); } } operator std::string () const { return as_std_string(); } std::string as_std_string() const { if( isUnicode() ) { throw TypeError("cannot return std::string from Unicode object"); } else { return std::string( PyString_AsString( ptr() ), static_cast( PyString_Size( ptr() ) ) ); } } unicodestring as_unicodestring() const { if( isUnicode() ) { return unicodestring( PyUnicode_AS_UNICODE( ptr() ), static_cast( PyUnicode_GET_SIZE( ptr() ) ) ); } else { throw TypeError("can only return unicodestring from Unicode object"); } } }; #else // original PyCXX 5.4.x version of String class String: public SeqBase { public: virtual size_type capacity() const { return max_size(); } explicit String (PyObject *pyob, bool owned = false): SeqBase(pyob, owned) { validate(); } String (const Object& ob): SeqBase(ob) { validate(); } String() : SeqBase( PyString_FromStringAndSize( "", 0 ), true ) { validate(); } String( const std::string& v ) : SeqBase( PyString_FromStringAndSize( const_cast(v.data()), static_cast( v.length() ) ), true ) { validate(); } String( const char *s, const char *encoding, const char *error="strict" ) : SeqBase( PyUnicode_Decode( s, strlen( s ), encoding, error ), true ) { validate(); } String( const char *s, int len, const char *encoding, const char *error="strict" ) : SeqBase( PyUnicode_Decode( s, len, encoding, error ), true ) { validate(); } String( const std::string &s, const char *encoding, const char *error="strict" ) : SeqBase( PyUnicode_Decode( s.c_str(), s.length(), encoding, error ), true ) { validate(); } String( const char *v, int vsize ) : SeqBase(PyString_FromStringAndSize( const_cast(v), vsize ), true ) { validate(); } String( const char* v ) : SeqBase( PyString_FromString( v ), true ) { validate(); } // Assignment acquires new ownership of pointer String& operator= ( const Object& rhs ) { return *this = *rhs; } String& operator= (PyObject* rhsp) { if( ptr() == rhsp ) return *this; set (rhsp); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && (Py::_String_Check(pyob) || Py::_Unicode_Check(pyob)); } // Assignment from C string String& operator= (const std::string& v) { set( PyString_FromStringAndSize( const_cast( v.data() ), static_cast( v.length() ) ), true ); return *this; } String& operator= (const unicodestring& v) { set( PyUnicode_FromUnicode( const_cast( v.data() ), static_cast( v.length() ) ), true ); return *this; } // Encode String encode( const char *encoding, const char *error="strict" ) const { if( isUnicode() ) { return String( PyUnicode_AsEncodedString( ptr(), encoding, error ), true ); } else { return String( PyString_AsEncodedObject( ptr(), encoding, error ), true ); } } String decode( const char *encoding, const char *error="strict" ) { return Object( PyString_AsDecodedObject( ptr(), encoding, error ), true ); } // Queries virtual size_type size () const { if( isUnicode() ) { return static_cast( PyUnicode_GET_SIZE (ptr()) ); } else { return static_cast( PyString_Size (ptr()) ); } } operator std::string () const { return as_std_string(); } std::string as_std_string() const { if( isUnicode() ) { throw TypeError("cannot return std::string from Unicode object"); } else { return std::string( PyString_AsString( ptr() ), static_cast( PyString_Size( ptr() ) ) ); } } std::string as_std_string( const char *encoding, const char *error="strict" ) const; unicodestring as_unicodestring() const { if( isUnicode() ) { return unicodestring( PyUnicode_AS_UNICODE( ptr() ), static_cast( PyUnicode_GET_SIZE( ptr() ) ) ); } else { throw TypeError("can only return unicodestring from Unicode object"); } } }; #endif // ================================================== // class Tuple class Tuple: public Sequence { public: virtual void setItem (sequence_index_type offset, const Object&ob) { // note PyTuple_SetItem is a thief... if(PyTuple_SetItem (ptr(), offset, new_reference_to(ob)) == -1) { throw Exception(); } } // Constructor explicit Tuple (PyObject *pyob, bool owned = false): Sequence (pyob, owned) { validate(); } Tuple (const Object& ob): Sequence(ob) { validate(); } // New tuple of a given size explicit Tuple (int size = 0) { set(PyTuple_New (size), true); validate (); for (sequence_index_type i=0; i < size; i++) { if(PyTuple_SetItem (ptr(), i, new_reference_to(Py::_None())) == -1) { throw Exception(); } } } // Tuple from any sequence explicit Tuple (const Sequence& s) { sequence_index_type limit( sequence_index_type( s.length() ) ); set(PyTuple_New (limit), true); validate(); for(sequence_index_type i=0; i < limit; i++) { if(PyTuple_SetItem (ptr(), i, new_reference_to(s[i])) == -1) { throw Exception(); } } } // Assignment acquires new ownership of pointer Tuple& operator= (const Object& rhs) { return (*this = *rhs); } Tuple& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (rhsp); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && Py::_Tuple_Check (pyob); } Tuple getSlice (int i, int j) const { return Tuple (PySequence_GetSlice (ptr(), i, j), true); } }; class TupleN: public Tuple { public: TupleN() : Tuple( 0 ) { } TupleN( const Object &obj1 ) : Tuple( 1 ) { setItem( 0, obj1 ); } TupleN( const Object &obj1, const Object &obj2 ) : Tuple( 2 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3 ) : Tuple( 3 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3, const Object &obj4 ) : Tuple( 4 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); setItem( 3, obj4 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3, const Object &obj4, const Object &obj5 ) : Tuple( 5 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); setItem( 3, obj4 ); setItem( 4, obj5 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3, const Object &obj4, const Object &obj5, const Object &obj6 ) : Tuple( 6 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); setItem( 3, obj4 ); setItem( 4, obj5 ); setItem( 5, obj6 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3, const Object &obj4, const Object &obj5, const Object &obj6, const Object &obj7 ) : Tuple( 7 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); setItem( 3, obj4 ); setItem( 4, obj5 ); setItem( 5, obj6 ); setItem( 6, obj7 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3, const Object &obj4, const Object &obj5, const Object &obj6, const Object &obj7, const Object &obj8 ) : Tuple( 8 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); setItem( 3, obj4 ); setItem( 4, obj5 ); setItem( 5, obj6 ); setItem( 6, obj7 ); setItem( 7, obj8 ); } TupleN( const Object &obj1, const Object &obj2, const Object &obj3, const Object &obj4, const Object &obj5, const Object &obj6, const Object &obj7, const Object &obj8, const Object &obj9 ) : Tuple( 9 ) { setItem( 0, obj1 ); setItem( 1, obj2 ); setItem( 2, obj3 ); setItem( 3, obj4 ); setItem( 4, obj5 ); setItem( 5, obj6 ); setItem( 6, obj7 ); setItem( 7, obj8 ); setItem( 8, obj9 ); } virtual ~TupleN() { } }; // ================================================== // class List class List: public Sequence { public: // Constructor explicit List (PyObject *pyob, bool owned = false): Sequence(pyob, owned) { validate(); } List (const Object& ob): Sequence(ob) { validate(); } // Creation at a fixed size List (int size = 0) { set(PyList_New (size), true); validate(); for (sequence_index_type i=0; i < size; i++) { if(PyList_SetItem (ptr(), i, new_reference_to(Py::_None())) == -1) { throw Exception(); } } } // List from a sequence List (const Sequence& s): Sequence() { int n = (int)s.length(); set(PyList_New (n), true); validate(); for (sequence_index_type i=0; i < n; i++) { if(PyList_SetItem (ptr(), i, new_reference_to(s[i])) == -1) { throw Exception(); } } } virtual size_type capacity() const { return max_size(); } // Assignment acquires new ownership of pointer List& operator= (const Object& rhs) { return (*this = *rhs); } List& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (rhsp); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && Py::_List_Check (pyob); } List getSlice (int i, int j) const { return List (PyList_GetSlice (ptr(), i, j), true); } void setSlice (int i, int j, const Object& v) { if(PyList_SetSlice (ptr(), i, j, *v) == -1) { throw Exception(); } } void append (const Object& ob) { if(PyList_Append (ptr(), *ob) == -1) { throw Exception(); } } void insert (int i, const Object& ob) { if(PyList_Insert (ptr(), i, *ob) == -1) { throw Exception(); } } void sort () { if(PyList_Sort(ptr()) == -1) { throw Exception(); } } void reverse () { if(PyList_Reverse(ptr()) == -1) { throw Exception(); } } }; // Mappings // ================================================== template class mapref { protected: MapBase& s; // the map Object key; // item key T the_item; public: mapref (MapBase& map, const std::string& k) : s(map), the_item() { key = String(k); if(map.hasKey(key)) the_item = map.getItem(key); } mapref (MapBase& map, const Object& k) : s(map), key(k), the_item() { if(map.hasKey(key)) the_item = map.getItem(key); } virtual ~mapref() {} // MapBase stuff // lvalue mapref& operator=(const mapref& other) { if(this == &other) return *this; the_item = other.the_item; s.setItem(key, other.the_item); return *this; } mapref& operator= (const T& ob) { the_item = ob; s.setItem (key, ob); return *this; } // rvalue operator T() const { return the_item; } // forward everything else to the_item PyObject* ptr () const { return the_item.ptr(); } int reference_count () const { // the mapref count return the_item.reference_count(); } Type type () const { return the_item.type(); } String str () const { return the_item.str(); } String repr () const { return the_item.repr(); } bool hasAttr (const std::string& attr_name) const { return the_item.hasAttr(attr_name); } Object getAttr (const std::string& attr_name) const { return the_item.getAttr(attr_name); } Object getItem (const Object& k) const { return the_item.getItem(k); } long hashValue () const { return the_item.hashValue(); } bool isCallable () const { return the_item.isCallable(); } bool isInstance () const { return the_item.isInstance(); } bool isList () const { return the_item.isList(); } bool isMapping () const { return the_item.isMapping(); } bool isNumeric () const { return the_item.isNumeric(); } bool isSequence () const { return the_item.isSequence(); } bool isTrue () const { return the_item.isTrue(); } bool isType (const Type& t) const { return the_item.isType (t); } bool isTuple() const { return the_item.isTuple(); } bool isString() const { return the_item.isString(); } // Commands void setAttr (const std::string& attr_name, const Object& value) { the_item.setAttr(attr_name, value); } void delAttr (const std::string& attr_name) { the_item.delAttr(attr_name); } void delItem (const Object& k) { the_item.delItem(k); } }; // end of mapref // TMM: now for mapref template< class T > bool operator==(const mapref& left, const mapref& right) { return true; // NOT completed. } template< class T > bool operator!=(const mapref& left, const mapref& right) { return true; // not completed. } template class MapBase: public Object { protected: explicit MapBase() {} public: // reference: proxy class for implementing [] // TMM: 26Jun'01 - the types // If you assume that Python mapping is a hash_map... // hash_map::value_type is not assignable, but // (*it).second = data must be a valid expression typedef size_t size_type; typedef Object key_type; typedef mapref data_type; typedef std::pair< const T, T > value_type; typedef std::pair< const T, mapref > reference; typedef const std::pair< const T, const T > const_reference; typedef std::pair< const T, mapref > pointer; // Constructor explicit MapBase (PyObject *pyob, bool owned = false): Object(pyob, owned) { validate(); } // TMM: 02Jul'01 - changed MapBase to Object in next line MapBase (const Object& ob): Object(ob) { validate(); } // Assignment acquires new ownership of pointer MapBase& operator= (const Object& rhs) { return (*this = *rhs); } MapBase& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (rhsp); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && PyMapping_Check(pyob); } // Clear -- PyMapping Clear is missing // void clear () { List k = keys(); for(List::iterator i = k.begin(); i != k.end(); i++) { delItem(*i); } } virtual size_type size() const { return PyMapping_Length (ptr()); } // Element Access T operator[](const std::string& key) const { return getItem(key); } T operator[](const Object& key) const { return getItem(key); } mapref operator[](const std::string& key) { return mapref(*this, key); } mapref operator[](const Object& key) { return mapref(*this, key); } int length () const { return PyMapping_Length (ptr()); } bool hasKey (const std::string& s) const { return PyMapping_HasKeyString (ptr(),const_cast(s.c_str())) != 0; } bool hasKey (const Object& s) const { return PyMapping_HasKey (ptr(), s.ptr()) != 0; } T getItem (const std::string& s) const { return T( asObject(PyMapping_GetItemString (ptr(),const_cast(s.c_str()))) ); } T getItem (const Object& s) const { return T( asObject(PyObject_GetItem (ptr(), s.ptr())) ); } virtual void setItem (const char *s, const Object& ob) { if (PyMapping_SetItemString (ptr(), const_cast(s), *ob) == -1) { throw Exception(); } } virtual void setItem (const std::string& s, const Object& ob) { if (PyMapping_SetItemString (ptr(), const_cast(s.c_str()), *ob) == -1) { throw Exception(); } } virtual void setItem (const Object& s, const Object& ob) { if (PyObject_SetItem (ptr(), s.ptr(), ob.ptr()) == -1) { throw Exception(); } } void delItem (const std::string& s) { if (PyMapping_DelItemString (ptr(), const_cast(s.c_str())) == -1) { throw Exception(); } } void delItem (const Object& s) { if (PyMapping_DelItem (ptr(), *s) == -1) { throw Exception(); } } // Queries List keys () const { return List(PyMapping_Keys(ptr()), true); } List values () const { // each returned item is a (key, value) pair return List(PyMapping_Values(ptr()), true); } List items () const { return List(PyMapping_Items(ptr()), true); } class iterator { // : public forward_iterator_parent( std::pair ) { protected: typedef std::forward_iterator_tag iterator_category; typedef std::pair< const T, T > value_type; typedef int difference_type; typedef std::pair< const T, mapref > pointer; typedef std::pair< const T, mapref > reference; friend class MapBase; // MapBase* map; List keys; // for iterating over the map int pos; // index into the keys private: iterator( MapBase* m, List k, int p ) : map( m ) , keys( k ) , pos( p ) {} public: ~iterator () {} iterator () : map( 0 ) , keys() , pos() {} iterator (MapBase* m, bool end = false ) : map( m ) , keys( m->keys() ) , pos( end ? keys.length() : 0 ) {} iterator (const iterator& other) : map( other.map ) , keys( other.keys ) , pos( other.pos ) {} reference operator*() { Object key = keys[ pos ]; return std::make_pair(key, mapref(*map,key)); } iterator& operator=(const iterator& other) { if (this == &other) return *this; map = other.map; keys = other.keys; pos = other.pos; return *this; } bool eql(const iterator& right) const { return map->ptr() == right.map->ptr() && pos == right.pos; } bool neq( const iterator& right ) const { return map->ptr() != right.map->ptr() || pos != right.pos; } // pointer operator->() { // return ; // } // prefix ++ iterator& operator++ () { pos++; return *this;} // postfix ++ iterator operator++ (int) { return iterator(map, keys, pos++);} // prefix -- iterator& operator-- () { pos--; return *this;} // postfix -- iterator operator-- (int) { return iterator(map, keys, pos--);} std::string diagnose() const { std::OSTRSTREAM oss; oss << "iterator diagnosis " << map << ", " << pos << std::ends; return std::string(oss.str()); } }; // end of class MapBase::iterator iterator begin () { return iterator(this); } iterator end () { return iterator(this, true); } class const_iterator { protected: typedef std::forward_iterator_tag iterator_category; typedef const std::pair< const T, T > value_type; typedef int difference_type; typedef const std::pair< const T, T > pointer; typedef const std::pair< const T, T > reference; friend class MapBase; const MapBase* map; List keys; // for iterating over the map int pos; // index into the keys private: const_iterator( const MapBase* m, List k, int p ) : map( m ) , keys( k ) , pos( p ) {} public: ~const_iterator () {} const_iterator () : map( 0 ) , keys() , pos() {} const_iterator (const MapBase* m, bool end = false ) : map( m ) , keys( m->keys() ) , pos( end ? keys.length() : 0 ) {} const_iterator(const const_iterator& other) : map( other.map ) , keys( other.keys ) , pos( other.pos ) {} bool eql(const const_iterator& right) const { return map->ptr() == right.map->ptr() && pos == right.pos; } bool neq( const const_iterator& right ) const { return map->ptr() != right.map->ptr() || pos != right.pos; } const_reference operator*() { Object key = keys[ pos ]; return std::make_pair( key, mapref( *map, key ) ); } const_iterator& operator=(const const_iterator& other) { if (this == &other) return *this; map = other.map; keys = other.keys; pos = other.pos; return *this; } // prefix ++ const_iterator& operator++ () { pos++; return *this;} // postfix ++ const_iterator operator++ (int) { return const_iterator(map, keys, pos++);} // prefix -- const_iterator& operator-- () { pos--; return *this;} // postfix -- const_iterator operator-- (int) { return const_iterator(map, keys, pos--);} }; // end of class MapBase::const_iterator const_iterator begin () const { return const_iterator(this); } const_iterator end () const { return const_iterator(this, true); } }; // end of MapBase typedef MapBase Mapping; template bool operator==(const EXPLICIT_TYPENAME MapBase::iterator& left, const EXPLICIT_TYPENAME MapBase::iterator& right); template bool operator!=(const EXPLICIT_TYPENAME MapBase::iterator& left, const EXPLICIT_TYPENAME MapBase::iterator& right); template bool operator==(const EXPLICIT_TYPENAME MapBase::const_iterator& left, const EXPLICIT_TYPENAME MapBase::const_iterator& right); template bool operator!=(const EXPLICIT_TYPENAME MapBase::const_iterator& left, const EXPLICIT_TYPENAME MapBase::const_iterator& right); extern bool operator==(const Mapping::iterator& left, const Mapping::iterator& right); extern bool operator!=(const Mapping::iterator& left, const Mapping::iterator& right); extern bool operator==(const Mapping::const_iterator& left, const Mapping::const_iterator& right); extern bool operator!=(const Mapping::const_iterator& left, const Mapping::const_iterator& right); // ================================================== // class Dict class Dict: public Mapping { public: // Constructor explicit Dict (PyObject *pyob, bool owned=false): Mapping (pyob, owned) { validate(); } Dict (const Object& ob): Mapping(ob) { validate(); } // Creation Dict () { set(PyDict_New (), true); validate(); } // Assignment acquires new ownership of pointer Dict& operator= (const Object& rhs) { return (*this = *rhs); } Dict& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set(rhsp); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && Py::_Dict_Check (pyob); } }; class Callable: public Object { public: // Constructor explicit Callable (): Object() {} explicit Callable (PyObject *pyob, bool owned = false): Object (pyob, owned) { validate(); } Callable (const Object& ob): Object(ob) { validate(); } // Assignment acquires new ownership of pointer Callable& operator= (const Object& rhs) { return (*this = *rhs); } Callable& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set (rhsp); return *this; } // Membership virtual bool accepts (PyObject *pyob) const { return pyob && PyCallable_Check (pyob); } // Call Object apply(const Tuple& args) const { return asObject(PyObject_CallObject(ptr(), args.ptr())); } // Call with keywords Object apply(const Tuple& args, const Dict& kw) const { return asObject( PyEval_CallObjectWithKeywords( ptr(), args.ptr(), kw.ptr() ) ); } Object apply(PyObject* pargs = 0) const { return apply (Tuple(pargs)); } }; class Module: public Object { public: explicit Module (PyObject* pyob, bool owned = false): Object (pyob, owned) { validate(); } // Construct from module name explicit Module (const std::string&s): Object() { PyObject *m = PyImport_AddModule( const_cast(s.c_str()) ); set( m, false ); validate (); } // Copy constructor acquires new ownership of pointer Module (const Module& ob): Object(*ob) { validate(); } Module& operator= (const Object& rhs) { return (*this = *rhs); } Module& operator= (PyObject* rhsp) { if(ptr() == rhsp) return *this; set(rhsp); return *this; } Dict getDict() { return Dict(PyModule_GetDict(ptr())); // Caution -- PyModule_GetDict returns borrowed reference! } }; // Call function helper inline Object Object::callMemberFunction( const std::string &function_name ) const { Callable target( getAttr( function_name ) ); Tuple args( 0 ); return target.apply( args ); } inline Object Object::callMemberFunction( const std::string &function_name, const Tuple &args ) const { Callable target( getAttr( function_name ) ); return target.apply( args ); } inline Object Object::callMemberFunction( const std::string &function_name, const Tuple &args, const Dict &kw ) const { Callable target( getAttr( function_name ) ); return target.apply( args, kw ); } // Numeric interface inline Object operator+ (const Object& a) { return asObject(PyNumber_Positive(*a)); } inline Object operator- (const Object& a) { return asObject(PyNumber_Negative(*a)); } inline Object abs(const Object& a) { return asObject(PyNumber_Absolute(*a)); } inline std::pair coerce(const Object& a, const Object& b) { PyObject *p1, *p2; p1 = *a; p2 = *b; if(PyNumber_Coerce(&p1,&p2) == -1) { throw Exception(); } return std::pair(asObject(p1), asObject(p2)); } inline Object operator+ (const Object& a, const Object& b) { return asObject(PyNumber_Add(*a, *b)); } inline Object operator+ (const Object& a, int j) { return asObject(PyNumber_Add(*a, *Int(j))); } inline Object operator+ (const Object& a, double v) { return asObject(PyNumber_Add(*a, *Float(v))); } inline Object operator+ (int j, const Object& b) { return asObject(PyNumber_Add(*Int(j), *b)); } inline Object operator+ (double v, const Object& b) { return asObject(PyNumber_Add(*Float(v), *b)); } inline Object operator- (const Object& a, const Object& b) { return asObject(PyNumber_Subtract(*a, *b)); } inline Object operator- (const Object& a, int j) { return asObject(PyNumber_Subtract(*a, *Int(j))); } inline Object operator- (const Object& a, double v) { return asObject(PyNumber_Subtract(*a, *Float(v))); } inline Object operator- (int j, const Object& b) { return asObject(PyNumber_Subtract(*Int(j), *b)); } inline Object operator- (double v, const Object& b) { return asObject(PyNumber_Subtract(*Float(v), *b)); } inline Object operator* (const Object& a, const Object& b) { return asObject(PyNumber_Multiply(*a, *b)); } inline Object operator* (const Object& a, int j) { return asObject(PyNumber_Multiply(*a, *Int(j))); } inline Object operator* (const Object& a, double v) { return asObject(PyNumber_Multiply(*a, *Float(v))); } inline Object operator* (int j, const Object& b) { return asObject(PyNumber_Multiply(*Int(j), *b)); } inline Object operator* (double v, const Object& b) { return asObject(PyNumber_Multiply(*Float(v), *b)); } inline Object operator/ (const Object& a, const Object& b) { return asObject(PyNumber_Divide(*a, *b)); } inline Object operator/ (const Object& a, int j) { return asObject(PyNumber_Divide(*a, *Int(j))); } inline Object operator/ (const Object& a, double v) { return asObject(PyNumber_Divide(*a, *Float(v))); } inline Object operator/ (int j, const Object& b) { return asObject(PyNumber_Divide(*Int(j), *b)); } inline Object operator/ (double v, const Object& b) { return asObject(PyNumber_Divide(*Float(v), *b)); } inline Object operator% (const Object& a, const Object& b) { return asObject(PyNumber_Remainder(*a, *b)); } inline Object operator% (const Object& a, int j) { return asObject(PyNumber_Remainder(*a, *Int(j))); } inline Object operator% (const Object& a, double v) { return asObject(PyNumber_Remainder(*a, *Float(v))); } inline Object operator% (int j, const Object& b) { return asObject(PyNumber_Remainder(*Int(j), *b)); } inline Object operator% (double v, const Object& b) { return asObject(PyNumber_Remainder(*Float(v), *b)); } inline Object type(const Exception&) // return the type of the error { PyObject *ptype, *pvalue, *ptrace; PyErr_Fetch(&ptype, &pvalue, &ptrace); Object result; if(ptype) result = ptype; PyErr_Restore(ptype, pvalue, ptrace); return result; } inline Object value(const Exception&) // return the value of the error { PyObject *ptype, *pvalue, *ptrace; PyErr_Fetch(&ptype, &pvalue, &ptrace); Object result; if(pvalue) result = pvalue; PyErr_Restore(ptype, pvalue, ptrace); return result; } inline Object trace(const Exception&) // return the traceback of the error { PyObject *ptype, *pvalue, *ptrace; PyErr_Fetch(&ptype, &pvalue, &ptrace); Object result; if(ptrace) result = ptrace; PyErr_Restore(ptype, pvalue, ptrace); return result; } template String seqref::str () const { return the_item.str(); } template String seqref::repr () const { return the_item.repr(); } } // namespace Py #endif // __CXX_Objects__h pysvn-1.7.8/Import/pycxx-6.2.4/CXX/Python2/PythonType.hxx000644 000771 000771 00000011075 11722441226 023172 0ustar00barrybarry000000 000000 //----------------------------------------------------------------------------- // // Copyright (c) 1998 - 2007, The Regents of the University of California // Produced at the Lawrence Livermore National Laboratory // All rights reserved. // // This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The // full copyright notice is contained in the file COPYRIGHT located at the root // of the PyCXX distribution. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // - Redistributions of source code must retain the above copyright notice, // this list of conditions and the disclaimer below. // - Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the disclaimer (as noted below) in the // documentation and/or materials provided with the distribution. // - Neither the name of the UC/LLNL nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF // CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR // ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // //----------------------------------------------------------------------------- #ifndef __CXX_PythonType__h #define __CXX_PythonType__h namespace Py { class PythonType { public: // if you define one sequence method you must define // all of them except the assigns PythonType( size_t base_size, int itemsize, const char *default_name ); virtual ~PythonType(); const char *getName() const; const char *getDoc() const; PyTypeObject *type_object() const; PythonType &name( const char *nam ); PythonType &doc( const char *d ); PythonType &supportClass( void ); PythonType &dealloc( void (*f)( PyObject* ) ); #if defined( PYCXX_PYTHON_2TO3 ) PythonType &supportPrint( void ); #endif PythonType &supportGetattr( void ); PythonType &supportSetattr( void ); PythonType &supportGetattro( void ); PythonType &supportSetattro( void ); #if defined( PYCXX_PYTHON_2TO3 ) PythonType &supportCompare( void ); #endif PythonType &supportRichCompare( void ); PythonType &supportRepr( void ); PythonType &supportStr( void ); PythonType &supportHash( void ); PythonType &supportCall( void ); PythonType &supportIter( void ); PythonType &supportSequenceType( void ); PythonType &supportMappingType( void ); PythonType &supportNumberType( void ); PythonType &supportBufferType( void ); PythonType &set_tp_dealloc( void (*tp_dealloc)( PyObject * ) ); PythonType &set_tp_init( int (*tp_init)( PyObject *self, PyObject *args, PyObject *kwds ) ); PythonType &set_tp_new( PyObject *(*tp_new)( PyTypeObject *subtype, PyObject *args, PyObject *kwds ) ); PythonType &set_methods( PyMethodDef *methods ); // call once all support functions have been called to ready the type bool readyType(); protected: void init_sequence(); void init_mapping(); void init_number(); void init_buffer(); PyTypeObject *table; PySequenceMethods *sequence_table; PyMappingMethods *mapping_table; PyNumberMethods *number_table; PyBufferProcs *buffer_table; private: // // prevent the compiler generating these unwanted functions // PythonType( const PythonType &tb ); // unimplemented void operator=( const PythonType &t ); // unimplemented }; } // Namespace Py // End of __CXX_PythonType__h #endif pysvn-1.7.8/Examples/Client/000755 000771 000771 00000000000 12204167354 016212 5ustar00barrybarry000000 000000 pysvn-1.7.8/Examples/Client/parse_datetime.py000644 000771 000771 00000030112 11654776730 021563 0ustar00barrybarry000000 000000 ''' ==================================================================== Copyright (c) 2003-2009 Barry A Scott. All rights reserved. This software is licensed as described in the file LICENSE.txt, which you should have received as part of this distribution. ==================================================================== ''' _debug_parse_time = 0 class DateTimeSyntaxError( Exception ): def __init__( self, reason ): Exception.__init__( self ) self._reason = reason def reason( self ): return self._reason def __str__( self ): return self._reason class DateSyntaxError( DateTimeSyntaxError ): def __init__( self, reason ): DateTimeSyntaxError.__init__( self, reason ) class TimeSyntaxError( DateTimeSyntaxError ): def __init__( self, reason ): DateTimeSyntaxError.__init__( self, reason ) def parse_time( time_string ): """parse_time( time_string ) returns the UTC time represented by time_string british locale defaults used formats understood for a date are: dayname - today, yesterday, monday, tuesday... dd/mm/yy[yy] - numeric date dd-mmm-yy[yy] - month as jan,feb,etc... n units - n units of time ago where units are: seconds minutes hours days weeks months years formats understood for time are: HH:MM - absolute time in hours and minutes HH:MM:SS - absolute time in hours, minutes and seconds formats understood for data and time are: adate atime - absolute date followed by absolute time rdate atime - relative date followed by absolute time atime adate - absolute time followed by absolute date atime rdate - absolute time followed by relative date """ if _debug_parse_time: print( '* parse_time: time_string=',time_string ) date = DateConversions() have_date = 0 have_time = 0 table = string.maketrans("-/"," ") time_list = string.split( string.translate( time_string, table ) ) try: day_time = convert_time( time_list[0] ) time_list = time_list[1:] if _debug_parse_time: print( '* parse_time: Time_list[0] is a time' ) except TimeSyntaxError: try: day_time = convert_time( time_list[-1] ) time_list = time_list[:-1] if _debug_parse_time: print( '* parse_time: Time_list[-1] is a time' ) except TimeSyntaxError: day_time = 0 if len(time_list) == 0: # default to today at time result = date.midnight + day_time if _debug_parse_time: print( '* parse_time: 1 return',format_time(result) ) return result match_type = date.numeric_type matches = [] for word in time_list: day_matches = date.findMatchingDateName( word ) if len(day_matches) == 0: raise DateSyntaxError( "%s unknown date word" % word ) if date.isAmbiguous( day_matches ): raise DateSyntaxError( date.reportAmbiguity( word, day_matches ) ) this_type = date.typeOfMatch( day_matches ) if this_type != date.numeric_type: if match_type == date.numeric_type: match_type = this_type elif match_type != this_type: raise DateSyntaxError( "ambiguous mix of unit and month names" ) matches.append( day_matches[0] ) if _debug_parse_time: print( '* parse_time: matches=',matches ) if match_type == date.day_type: if len(matches) != 1: raise DateSyntaxError( "too many day words" ) day_matches = matches[0] result = date.convertDay( day_matches[2] ) + day_time if _debug_parse_time: print( '* parse_time: 2 return',format_time(result) ) return result if match_type == date.unit_type: # expect a set of pair of if _debug_parse_time >= 2: print( 'matches',matches ) if (len(matches)&1) == 1: raise DateSyntaxError( 'must have an even number parameters when using time units' ) time_offset = 0 for index in range( 0, len(matches), 2 ): value_tuple = matches[index] unit_tuple = matches[index+1] if value_tuple[1] != date.numeric_type: raise DateSyntaxError( 'Expecting a number of units' ) if unit_tuple[1] != date.unit_type: raise DateSyntaxError( 'Expecting a unit name' ) value = value_tuple[2] unit = unit_tuple[2] time_offset = time_offset + value*unit result = date.now - time_offset if _debug_parse_time: print( '* parse_time: 3 return',format_time(result) ) return result if match_type == date.month_type: # absolute date if len(matches) < 1 or len(matches) > 3: raise DateSyntaxError( 'too many date parts' ) day = -1 month = -1 year = -1 num_month_types = 0 for entry in matches: if date.isMonth( entry ): num_month_types = num_month_types + 1 if num_month_types != 1: raise DateSyntaxError( 'too many months in the date string' ) if date.isMonth( matches[0] ): month = matches[0][2] day = matches[1][2] if len(matches) == 3: year = matches[2][2] else: day = matches[0][2] if matches[1][1] != date.month_type: raise DateSyntaxError( 'expecting month as first or second part of date' ) month = matches[1][2] if len(matches) == 3: year = matches[2][2] seconds = day_time%60 minutes = (day_time/60)%60 hours = day_time/60/60 result = date.absDate( day, month, year, hours, minutes, seconds ) if _debug_parse_time: print( '* parse_time: 4 return',format_time(result) ) return result if match_type == date.numeric_type and len(matches) == 3: # assume its in locale order - which is assumed to be D M Y day = matches[0][2] month = matches[1][2] year = matches[2][2] seconds = day_time%60 minutes = (day_time/60)%60 hours = day_time/60/60 result = date.absDate( day, month, year, hours, minutes, seconds ) if _debug_parse_time: print( '* parse_time: 4 return',format_time(result) ) return result raise DateSyntaxError( 'cannot understand date and time string ' + time_string ) def convert_time( time_str ): time_list = string.split( time_str, ':' ) if len(time_list) < 2: # not a time - no ":" raise TimeSyntaxError( "Not a time" ) if len(time_list) > 3: raise TimeSyntaxError( "Too many time parts" ) hour = time_list[0] minute = time_list[1] second = '0' if len(time_list) > 2: second = time_list[2] try: hour = string.atoi( hour ) minute = string.atoi( minute ) second = string.atoi( second ) except: return -1 if( hour < 0 or hour > 23 ): raise TimeSyntaxError( "hour value of %d invalid" % hour ) if( minute < 0 or minute > 59 ): raise TimeSyntaxError( "minutes value of %d invalid" % hour ) if( second < 0 or second > 59 ): raise TimeSyntaxError( "seconds value of %d invalid" % hour ) day_time = (hour*60 + minute)*60 + second return day_time class DateConversions: seconds_in_one_day = 24*60*60 day_type = 1 month_type = 2 unit_type = 3 numeric_type = 4 date_names = [ # day names ('today', day_type, 0), ('yesterday', day_type, -1), ('monday', day_type, 1), ('tuesday', day_type, 2), ('wednesday', day_type, 3), ('thursday', day_type, 4), ('friday', day_type, 5), ('saturday', day_type, 6), ('sunday', day_type, 7), # month names ('january', month_type, 1), ('feburary', month_type, 2), ('march', month_type, 3), ('april', month_type, 4), ('may', month_type, 5), ('june', month_type, 6), ('july', month_type, 7), ('august', month_type, 8), ('september', month_type, 9), ('october', month_type, 10), ('november', month_type, 11), ('december', month_type, 12), # unit names ('seconds', unit_type, 1), ('minutes', unit_type, 60), ('hours', unit_type, 60*60), ('days', unit_type, 24*60*60.), ('weeks', unit_type, 7*24*60*60), ('months', unit_type, 30*24*60*60), ('years', unit_type, 365*24*60*60) ] def __init__( self ): self.now = time.time() self.year, self.month, self.day, self.hour, self.minute, self.second, self.weekday, self.julian, self.dst = time.localtime( self.now ) self.midnight = time.mktime( (self.year, self.month, self.day, 0, 0, 0, self.weekday, self.julian, self.dst) ) def convertDay( self, day_offset ): if day_offset == 0: # today return self.midnight elif day_offset == -1: # yesterday return self.midnight - self.seconds_in_one_day else: # day of week offset = day_offset - self.weekday - 1 # make sure its in the past if offset >= 0: offset = offset - 7 return self.midnight + offset*self.seconds_in_one_day def absDate( self, day, month, year, hour=0, minute=0, second=0 ): future_check = 0 if year < 0: year = self.year future_check = 1 elif year < 70: year = year + 2000 elif year < 100: year = year + 1900 try: date = time.mktime( (year, month, day, hour, minute, second, self.weekday, self.julian, -1) ) except OverflowError: raise DateSyntaxError( 'cannot convert date and time year=%d/month=%d/day=%d %d:%d:%d' % (year, month, day, hour, minute, second) ) if date > self.now and future_check: year = year - 1 try: date = time.mktime( (year, month, day, hour, minute, second, self.weekday, self.julian, -1) ) except OverflowError: raise DateSyntaxError( 'cannot convert date and time %d/%d/%d %d:%d:%d' % (year, month, day, hour, minute, second) ) return date def findMatchingDateName( self, name ): try: value = string.atoi( name ) return [(name, self.numeric_type, value )] except: pass matches = [] name_len = len(name) for entry in self.date_names: entry_name = entry[0] if len(entry_name) >= name_len and entry_name[0:name_len] == name: matches.append( entry ) return matches def typeOfMatch( self, matches ): return matches[0][1] def isAmbiguous( self, matches ): return len(matches) > 1 def isDay( self, matches ): return matches[1] == self.day_type def isMonth( self, matches ): return matches[1] == self.month_type def isUnit( self, matches ): return matches[1] == self.unit_type def isNumeric( self, matches ): return matches[1] == self.numeric_type def reportAmbiguity( self, name, tuples ): names = map( lambda t: t[0], tuples ) return "%s is ambiguous, it matches: %s" % (name, string.join( names, ', ' )) pysvn-1.7.8/Examples/Client/pysvn_print_doc.py000644 000771 000771 00000000320 10016223412 021762 0ustar00barrybarry000000 000000 import pysvn print 'pysvn.__doc__' print pysvn.__doc__ print 'dir(pysvn)' print dir(pysvn) print 'pysvn.Client.__doc__' print pysvn.Client.__doc__ print 'pysvn.Revision.__doc__' print pysvn.Revision.__doc__ pysvn-1.7.8/Examples/Client/svn_cmd.py000644 000771 000771 00000151527 12177456426 020242 0ustar00barrybarry000000 000000 ''' ==================================================================== Copyright (c) 2003-2009 Barry A Scott. All rights reserved. This software is licensed as described in the file LICENSE.txt, which you should have received as part of this distribution. ==================================================================== ''' import pysvn import time import sys import os import parse_datetime import glob import locale import types try: sorted( [] ) except NameError: def sorted( list_in ): list_out = list( list_in ) list_out.sort() return list_out if hasattr( types, 'StringTypes' ): StringTypes = types.StringTypes else: StringTypes = [type( '' )] if hasattr( types, 'DictType' ): DictType = types.DictType else: DictType = type( {} ) class CommandError( Exception ): def __init__( self, reason ): Exception.__init__( self ) self._reason = reason def reason( self ): return self._reason def __str__( self ): return self._reason def main( args ): progname = os.path.basename( args[0] ) pause = False if args[1:2] == ['--pause']: del args[1] pause = True # if the locale is not setup SVN can report errors handling non ascii file names initLocale() svn_cmd = SvnCommand( progname ) rc = svn_cmd.dispatch( args[1:] ) if pause: sys.stdin.readline() return rc def initLocale(): # init the locale if sys.platform in ['win32','cygwin']: locale.setlocale( locale.LC_ALL, '' ) else: language_code, encoding = locale.getdefaultlocale() if language_code is None: language_code = 'en_GB' if encoding is None: encoding = 'UTF-8' if encoding.lower() == 'utf': encoding = 'UTF-8' try: # setlocale fails when params it does not understand are passed locale.setlocale( locale.LC_ALL, '%s.%s' % (language_code, encoding) ) except locale.Error: # force a locale that will work locale.setlocale( locale.LC_ALL, 'en_GB.UTF-8' ) def fmtDateTime( t ): return time.strftime( '%d-%b-%Y %H:%M:%S', time.localtime( t ) ) wc_status_kind_map = { pysvn.wc_status_kind.added: 'A', pysvn.wc_status_kind.conflicted: 'C', pysvn.wc_status_kind.deleted: 'D', pysvn.wc_status_kind.external: 'X', pysvn.wc_status_kind.ignored: 'I', pysvn.wc_status_kind.incomplete: '!', pysvn.wc_status_kind.missing: '!', pysvn.wc_status_kind.merged: 'G', pysvn.wc_status_kind.modified: 'M', pysvn.wc_status_kind.none: ' ', pysvn.wc_status_kind.normal: ' ', pysvn.wc_status_kind.obstructed: '~', pysvn.wc_status_kind.replaced: 'R', pysvn.wc_status_kind.unversioned: '?', } wc_notify_action_map = { pysvn.wc_notify_action.add: 'A', pysvn.wc_notify_action.commit_added: 'A', pysvn.wc_notify_action.commit_deleted: 'D', pysvn.wc_notify_action.commit_modified: 'M', pysvn.wc_notify_action.commit_postfix_txdelta: None, pysvn.wc_notify_action.commit_replaced: 'R', pysvn.wc_notify_action.copy: 'c', pysvn.wc_notify_action.delete: 'D', pysvn.wc_notify_action.failed_revert: 'F', pysvn.wc_notify_action.resolved: 'R', pysvn.wc_notify_action.restore: 'R', pysvn.wc_notify_action.revert: 'R', pysvn.wc_notify_action.skip: 'skip', pysvn.wc_notify_action.status_completed: None, pysvn.wc_notify_action.status_external: 'X', pysvn.wc_notify_action.update_add: 'A', pysvn.wc_notify_action.update_completed: None, pysvn.wc_notify_action.update_delete: 'D', pysvn.wc_notify_action.update_external: 'X', pysvn.wc_notify_action.update_update: 'U', pysvn.wc_notify_action.annotate_revision: 'A', } # new in svn 1.4? if hasattr( pysvn.wc_notify_action, 'locked' ): wc_notify_action_map[ pysvn.wc_notify_action.locked ] = 'locked' wc_notify_action_map[ pysvn.wc_notify_action.unlocked ] = 'unlocked' wc_notify_action_map[ pysvn.wc_notify_action.failed_lock ] = 'failed_lock' wc_notify_action_map[ pysvn.wc_notify_action.failed_unlock ] = 'failed_unlock' # new in svn 1.5 if hasattr( pysvn.wc_notify_action, 'exists' ): wc_notify_action_map[ pysvn.wc_notify_action.exists ] = 'exists' wc_notify_action_map[ pysvn.wc_notify_action.changelist_set ] = 'changelist_set' wc_notify_action_map[ pysvn.wc_notify_action.changelist_clear ] = 'changelist_clear' wc_notify_action_map[ pysvn.wc_notify_action.changelist_moved ] = 'changelist_moved' wc_notify_action_map[ pysvn.wc_notify_action.foreign_merge_begin ] = 'foreign_merge_begin' wc_notify_action_map[ pysvn.wc_notify_action.merge_begin ] = 'merge_begin' wc_notify_action_map[ pysvn.wc_notify_action.update_replace ] = 'update_replace' # new in svn 1.6 if hasattr( pysvn.wc_notify_action, 'property_added' ): wc_notify_action_map[ pysvn.wc_notify_action.property_added ] = 'property_added' wc_notify_action_map[ pysvn.wc_notify_action.property_modified ] = 'property_modified' wc_notify_action_map[ pysvn.wc_notify_action.property_deleted ] = 'property_deleted' wc_notify_action_map[ pysvn.wc_notify_action.property_deleted_nonexistent ] = 'property_deleted_nonexistent' wc_notify_action_map[ pysvn.wc_notify_action.revprop_set ] = 'revprop_set' wc_notify_action_map[ pysvn.wc_notify_action.revprop_deleted ] = 'revprop_deleted' wc_notify_action_map[ pysvn.wc_notify_action.merge_completed ] = 'merge_completed' wc_notify_action_map[ pysvn.wc_notify_action.tree_conflict ] = 'tree_conflict' wc_notify_action_map[ pysvn.wc_notify_action.failed_external ] = 'failed_external' # new in svn 1.7 if hasattr( pysvn.wc_notify_action, 'update_started' ): wc_notify_action_map[ pysvn.wc_notify_action.update_started ] = 'update_started' wc_notify_action_map[ pysvn.wc_notify_action.update_skip_obstruction ] = 'update_skip_obstruction' wc_notify_action_map[ pysvn.wc_notify_action.update_skip_working_only ] = 'update_skip_working_only' wc_notify_action_map[ pysvn.wc_notify_action.update_external_removed ] = 'update_external_removed' wc_notify_action_map[ pysvn.wc_notify_action.update_shadowed_add ] = 'update_shadowed_add' wc_notify_action_map[ pysvn.wc_notify_action.update_shadowed_update ] = 'update_shadowed_update' wc_notify_action_map[ pysvn.wc_notify_action.update_shadowed_delete ] = 'update_shadowed_delete' wc_notify_action_map[ pysvn.wc_notify_action.merge_record_info ] = 'merge_record_info' wc_notify_action_map[ pysvn.wc_notify_action.upgraded_path ] = 'upgraded_path' wc_notify_action_map[ pysvn.wc_notify_action.merge_record_info_begin ] = 'merge_record_info_begin' wc_notify_action_map[ pysvn.wc_notify_action.merge_elide_info ] = 'merge_elide_info' wc_notify_action_map[ pysvn.wc_notify_action.patch ] = 'patch' wc_notify_action_map[ pysvn.wc_notify_action.patch_applied_hunk ] = 'patch_applied_hunk' wc_notify_action_map[ pysvn.wc_notify_action.patch_rejected_hunk ] = 'patch_rejected_hunk' wc_notify_action_map[ pysvn.wc_notify_action.patch_hunk_already_applied ] = 'patch_hunk_already_applied' wc_notify_action_map[ pysvn.wc_notify_action.commit_copied ] = 'commit_copied' wc_notify_action_map[ pysvn.wc_notify_action.commit_copied_replaced ] = 'commit_copied_replaced' wc_notify_action_map[ pysvn.wc_notify_action.url_redirect ] = 'url_redirect' wc_notify_action_map[ pysvn.wc_notify_action.path_nonexistent ] = 'path_nonexistent' wc_notify_action_map[ pysvn.wc_notify_action.exclude ] = 'exclude' wc_notify_action_map[ pysvn.wc_notify_action.failed_conflict ] = 'failed_conflict' wc_notify_action_map[ pysvn.wc_notify_action.failed_missing ] = 'failed_missing' wc_notify_action_map[ pysvn.wc_notify_action.failed_out_of_date ] = 'failed_out_of_date' wc_notify_action_map[ pysvn.wc_notify_action.failed_no_parent ] = 'failed_no_parent' # new in svn 1.7.1+? if hasattr( pysvn.wc_notify_action, 'failed_locked' ): wc_notify_action_map[ pysvn.wc_notify_action.failed_locked ] = 'failed_locked' wc_notify_action_map[ pysvn.wc_notify_action.failed_forbidden_by_server ] = 'failed_forbidden_by_server' wc_notify_action_map[ pysvn.wc_notify_action.skip_conflicted ] = 'skip_conflicted' # new in svn 1.8 if hasattr( pysvn.wc_notify_action, 'update_broken_lock' ): wc_notify_action_map[ pysvn.wc_notify_action.update_broken_lock ] = 'update_broken_lock' wc_notify_action_map[ pysvn.wc_notify_action.failed_obstruction ] = 'failed_obstruction' wc_notify_action_map[ pysvn.wc_notify_action.conflict_resolver_starting ] = 'conflict_resolver_starting' wc_notify_action_map[ pysvn.wc_notify_action.conflict_resolver_done ] = 'conflict_resolver_done' wc_notify_action_map[ pysvn.wc_notify_action.left_local_modifications ] = 'left_local_modifications' wc_notify_action_map[ pysvn.wc_notify_action.foreign_copy_begin ] = 'foreign_copy_begin' wc_notify_action_map[ pysvn.wc_notify_action.move_broken ] = 'move_broken' class SvnCommand: def __init__( self, progname ): self.progname = progname self.client = None self.revision_update_complete = None self.notify_message_list = [] self.pysvn_testing = False self.debug_enabled = False def debug( self, msg, args=() ): if self.debug_enabled: print( 'Debug: %s' % (msg % args) ) def initClient( self, config_dir ): self.client = pysvn.Client( config_dir ) self.client.exception_style = 1 self.client.commit_info_style = 1 self.client.callback_get_login = self.callback_getLogin self.client.callback_get_log_message = self.callback_getLogMessage self.client.callback_notify = self.callback_notify self.client.callback_cancel = self.callback_cancel if hasattr( self.client, 'callback_conflict_resolver' ): self.client.callback_conflict_resolver = self.callback_conflict_resolver self.client.callback_cancel = self.callback_cancel self.client.callback_ssl_client_cert_password_prompt = self.callback_ssl_client_cert_password_prompt self.client.callback_ssl_client_cert_prompt = self.callback_ssl_client_cert_prompt self.client.callback_ssl_server_prompt = self.callback_ssl_server_prompt self.client.callback_ssl_server_trust_prompt = self.callback_ssl_server_trust_prompt def callback_ssl_client_cert_password_prompt( self ): print( 'callback_ssl_client_cert_password_prompt' ) def callback_ssl_client_cert_prompt( self ): print( 'callback_ssl_client_cert_prompt' ) def callback_ssl_server_prompt( self ): print( 'callback_ssl_server_prompt' ) def callback_ssl_server_trust_prompt( self, trust_data ): for key,value in trust_data.items(): print( '%s: %s' % (key, value) ) print('') answer = '' while answer.lower() not in ['p','t','r']: sys.stdout.write( '(P)ermanent accept, (T)emporary accept or (R)eject: ' ) answer = sys.stdin.readline().strip() if answer.lower() == 'p': return True, trust_data['failures'], True if answer.lower() == 't': return True, trust_data['failures'], False return False, 0, False def callback_cancel( self ): return False def callback_notify( self, arg_dict ): if arg_dict['action'] == pysvn.wc_notify_action.update_completed: self.revision_update_complete = arg_dict['revision'] elif arg_dict['path'] != '' and wc_notify_action_map[ arg_dict['action'] ] is not None: msg = '%s %s' % (wc_notify_action_map[ arg_dict['action'] ], arg_dict['path']) if self.pysvn_testing != '99.99.99': self.notify_message_list.append( msg ) else: print( msg ) def callback_conflict_resolver( self, arg_dict ): print( 'callback_conflict_resolver' ) for key in sorted( arg_dict.keys() ): value = arg_dict[ key ] if type(value) == DictType: value = '{%s}' % (', '.join( ['%r: %r' % (key, value) for key, value in sorted( value.items() )] ),) elif type(value) not in StringTypes: value = repr(value) print( ' %s: %s' % (key, value) ) return pysvn.wc_conflict_choice.postpone, None, False def callback_getLogin( self, realm, username, may_save ): print( 'May save: %s ' % may_save ) print( 'Realm: %s ' % realm ) if username: print( 'Username: %s' % username ) else: sys.stdout.write( 'Username: ' ) username = sys.stdin.readline().strip() if len(username) == 0: return 0, '', '', False sys.stdout.write( 'Password: ' ) password = sys.stdin.readline().strip() save_password = 'x' while save_password.lower() not in ['y','ye','yes','n', 'no','']: sys.stdout.write( 'Save password? [y/n] ' ) save_password = sys.stdin.readline().strip() return 1, username, password, save_password in ['y','ye','yes'] def getLogMessage( self ): sys.stdout.write( 'Log message\n' ) sys.stdout.write( '--- -------\n' ) message = sys.stdin.read() return message def callback_getLogMessage( self ): return True, self.getLogMessage() def dispatch( self, argv ): try: args = SvnArguments( argv ) cmd_name = 'cmd_%s' % args.getCommandName( 'help' ) self.initClient( args.getOptionalValue( '--config-dir', '' ) ) self.client.set_auth_cache( args.getBooleanOption( '--no-auth-cache', False ) ) self.pysvn_testing = args.getOptionalValue( '--pysvn-testing', '99.99.99' ) self.debug_enabled = args.getBooleanOption( '--debug', True ) getattr( self, cmd_name, self.cmd_help )( args ) self.printNotifyMessages() except pysvn.ClientError as e: self.printNotifyMessages() print( e.args[0] ) return 1 except CommandError as e: self.printNotifyMessages() print( e.reason() ) return 1 return 0 def printNotifyMessages( self ): # different versions of SVN notify messages in different orders # by sorting before printing we hope to have one set of regression # test data for multiple versions of SVN self.notify_message_list.sort() for msg in self.notify_message_list: print( msg ) self.notify_message_list = [] def cmd_version( self, args ): print( 'PYSVN Version: %r' % (pysvn.version,) ) print( 'SVN Version: %r' % (pysvn.svn_version,) ) if hasattr( pysvn, 'svn_api_version' ): print( 'SVN API Version: %r' % (pysvn.svn_api_version,) ) print( 'pysvn._pysvn %r' % (pysvn._pysvn,) ) def cmd_is_url( self, args ): path = args.getPositionalArgs( 1 )[0] is_url = self.client.is_url( path ) if is_url: print( 'url %s' % path ) else: print( 'path %s' % path ) def cmd_add( self, args ): recurse = args.getBooleanOption( '--non-recursive', False ) force = args.getBooleanOption( '--force', False ) self.client.add( args.getPositionalArgs( 1 ), recurse=recurse, force=force ) def cmd_add_to_changelist( self, args ): if not hasattr( self.client, add_to_changelist ): print( 'Error: add_to_changelist is not supported by this version of Subversion' ) return path, changelist = args.getPositionalArgs( 2, 2 ) self.client.add_to_changelist( path, changelist ) def cmd_annotate( self, args ): start_revision, end_revision = args.getOptionalRevisionPair( '--revision', '0', 'head' ) positional_args = args.getPositionalArgs( 1, 1 ) all_lines = self.client.annotate( positional_args[0], revision_start=start_revision, revision_end=end_revision ) self.printNotifyMessages() for line in all_lines: print( '%d| r%d | %s | %s | %s' % (line['number'] ,line['revision'].number ,line['author'] ,line['date'] ,line['line']) ) cmd_ann = cmd_annotate def cmd_cat( self, args ): revision = args.getOptionalRevision( '--revision', 'head' ) text = self.client.cat( args.getPositionalArgs( 1, 1 )[0], revision=revision ) print( text.decode( 'utf-8' ).replace( '\r\n', '\n' ) ) def cmd_checkout( self, args ): recurse = args.getBooleanOption( '--non-recursive', False ) positional_args = args.getPositionalArgs( 1, 2 ) if len(positional_args) == 1: positional_args.append( os.path.basename( positional_args[0] ) ) self.revision_update_complete = None self.client.checkout( positional_args[0], positional_args[1], recurse=recurse ) self.printNotifyMessages() if self.revision_update_complete is not None: print( 'Checked out revision %s' % self.revision_update_complete.number ) else: print( 'Checked out unknown revision - checkout failed?' ) cmd_co = cmd_checkout def cmd_cleanup( self, args ): positional_args = args.getPositionalArgs( 0, 1 ) if len(positional_args) == 0: positional_args.append( '.' ) self.client.cleanup( positional_args[0] ) def cmd_checkin( self, args ): msg = args.getOptionalValue( '--message', '' ) recurse = args.getBooleanOption( '--non-recursive', False ) positional_args = args.getPositionalArgs( 0 ) if len(positional_args) == 0: positional_args.append( '.' ) if msg == '': msg = self.getLogMessage() commit_info = self.client.checkin( positional_args, msg, recurse=recurse ) rev = commit_info["revision"] self.printNotifyMessages() if commit_info['post_commit_err'] is not None: print( commit_info['post_commit_err'] ) if rev is None: print( 'Nothing to commit' ) elif rev.number > 0: print( 'Revision %s' % rev.number ) else: print( 'Commit failed' ) cmd_commit = cmd_checkin cmd_ci = cmd_checkin def cmd_copy( self, args ): positional_args = args.getPositionalArgs( 2, 2 ) self.client.copy( positional_args[0], positional_args[1] ) cmd_cp = cmd_copy def cmd_diff( self, args ): recurse = args.getBooleanOption( '--non-recursive', False ) revision1, revision2 = args.getOptionalRevisionPair( '--revision', 'base', 'working' ) positional_args = args.getPositionalArgs( 0, 1 ) if len(positional_args) == 0: positional_args.append( '.' ) if 'TEMP' in os.environ: tmpdir = os.environ['TEMP'] elif 'TMPDIR' in os.environ: tmpdir = os.environ['TMPDIR'] elif 'TMP' in os.environ: tmpdir = os.environ['TMP'] elif os.path.exists( '/usr/tmp' ): tmpdir = '/usr/tmp' elif os.path.exists( '/tmp' ): tmpdir = '/tmp' else: print( 'No tmp dir!' ) return self.debug( 'cmd_diff %r, %r, %r, %r, %r' % (tmpdir, positional_args[0], recurse, revision1, revision2) ) diff_text = self.client.diff( tmpdir, positional_args[0], recurse=recurse, revision1=revision1, revision2=revision2, diff_options=['-u'] ) print( diff_text.replace( '\r\n', '\n' ) ) def cmd_export( self, args ): force = args.getBooleanOption( '--force', False ) revision_url = args.getOptionalRevision( '--revision', 'head' ) revision_wc = args.getOptionalRevision( '--revision', 'working' ) native_eol = args.getOptionalValue( '--native-eol', None ) positional_args = args.getPositionalArgs( 2, 2 ) if self.client.is_url( positional_args[0] ): revision = revision_url else: revision = revision_wc self.client.export( positional_args[0], positional_args[1], revision=revision, force=force, native_eol=native_eol ) def cmd_info( self, args ): positional_args = args.getPositionalArgs( 0, 1 ) if len(positional_args) == 0: positional_args.append( '.' ) path = positional_args[0] entry = self.client.info( path ) print( 'Path: %s' % path ) if entry.name and entry.name != 'svn:this_dir': print( 'Name: %s' % entry.name ) if entry.url: print( 'Url: %s' % entry.url ) if entry.repos and self.pysvn_testing >= '01.03.00': print( 'Repository: %s' % entry.repos ) if entry.uuid: print( 'Repository UUID: %s' % entry.uuid ) if entry.revision.kind == pysvn.opt_revision_kind.number: print( 'Revision: %s' % entry.revision.number ) if entry.kind == pysvn.node_kind.file: print( 'Node kind: file' ) elif entry.kind == pysvn.node_kind.dir: print( 'Node kind: directory' ) elif entry.kind == pysvn.node_kind.none: print( 'Node kind: none' ) else: print( 'Node kind: unknown' ) if entry.schedule == pysvn.wc_schedule.normal: print( "Schedule: normal" ) elif entry.schedule == pysvn.wc_schedule.add: print( "Schedule: add" ) elif entry.schedule == pysvn.wc_schedule.delete: print( "Schedule: delete" ) elif entry.schedule == pysvn.wc_schedule.replace: print( "Schedule: replace" ) if entry.is_copied: if entry.copyfrom_url: print( 'Copied From URL: %s' % entry.copyfrom_url ) if entry.copyfrom_rev.number: print( 'Copied From Rev: %s' % entry.copyfrom_rev.number ) if entry.commit_author: print( 'Last Changed Author: %s' % entry.commit_author ) if entry.commit_revision.number: print( 'Last Changed Rev: %s' % entry.commit_revision.number ) if entry.commit_time: print( 'Last Changed Date: %s' % fmtDateTime( entry.commit_time ) ) if entry.text_time: print( 'Text Last Updated: %s' % fmtDateTime( entry.text_time ) ) if entry.properties_time and self.pysvn_testing == '99.99.99': print( 'Properties Last Updated: %s' % fmtDateTime( entry.properties_time ) ) if entry.checksum: print( 'Checksum: %s' % entry.checksum ) def cmd_info2( self, args ): recurse = args.getBooleanOption( '--recursive', True ) revision_url = args.getOptionalRevision( '--revision', 'head' ) revision_path = args.getOptionalRevision( '--revision', 'unspecified' ) positional_args = args.getPositionalArgs( 0, 1 ) if len(positional_args) == 0: positional_args.append( '.' ) path = positional_args[0] if self.client.is_url( path ): revision = revision_url else: revision = revision_path all_entries = self.client.info2( path, revision=revision, recurse=recurse ) for path, info in all_entries: print('') print( 'Path: %s' % path ) if info.URL: print( 'Url: %s' % info.URL ) if info.rev: print( 'Revision: %s' % info.rev.number ) if info.repos_root_URL and self.pysvn_testing >= '01.03.00': print( 'Repository root_URL: %s' % info.repos_root_URL ) if info.repos_UUID: print( 'Repository UUID: %s' % info.repos_UUID ) if info.last_changed_author: print( 'Last changed author: %s' % info.last_changed_author ) if info.last_changed_date: print( 'Last Changed Date: %s' % fmtDateTime( info.last_changed_date ) ) if info.last_changed_rev.kind == pysvn.opt_revision_kind.number: print( 'Last changed revision: %s' % info.last_changed_rev.number ) if info.kind == pysvn.node_kind.file: print( 'Node kind: file' ) elif info.kind == pysvn.node_kind.dir: print( 'Node kind: directory' ) elif info.kind == pysvn.node_kind.none: print( 'Node kind: none' ) else: print( 'Node kind: unknown' ) if info.lock: print( 'Lock Owner: %s' % info.lock.owner ) print( 'Lock Creation Date: %s' % fmtDateTime( info.lock.creation_date ) ) if info.lock.expiration_date is not None: print( 'Lock Expiration Date: %s' % fmtDateTime( info.lock.expiration_date ) ) print( 'Lock Token: %s' % info.lock.token ) print( 'Lock Comment:' ) if info.lock.comment not in ['', None]: print( info.lock.comment ) if info.wc_info: wc_info = info.wc_info if wc_info.schedule == pysvn.wc_schedule.normal: print( "Schedule: normal" ) elif wc_info.schedule == pysvn.wc_schedule.add: print( "Schedule: add" ) elif wc_info.schedule == pysvn.wc_schedule.delete: print( "Schedule: delete" ) elif wc_info.schedule == pysvn.wc_schedule.replace: print( "Schedule: replace" ) if wc_info.copyfrom_url: print( 'Copied From URL: %s' % wc_info.copyfrom_url ) print( 'Copied From Rev: %s' % wc_info.copyfrom_rev.number ) if wc_info.text_time: print( 'Text Last Updated: %s' % fmtDateTime( wc_info.text_time ) ) if wc_info.prop_time and self.pysvn_testing == '99.99.99': print( 'Properties Last Updated: %s' % fmtDateTime( wc_info.prop_time ) ) if wc_info.checksum: print( 'Checksum: %s' % wc_info.checksum ) def cmd_import( self, args ): msg = self.getOptionalValue( '--message', '' ) recurse = args.getBooleanOption( '--non-recursive', False ) positional_args = args.getPositionalArgs( 2, 2 ) self.client.import_( positional_args[0], positional_args[1], recurse=recurse ) def cmd_lock( self, args ): msg = args.getOptionalValue( '--message', '' ) force = args.getBooleanOption( '--force', True ) positional_args = args.getPositionalArgs( 1, 1 ) self.client.lock( positional_args[0], msg, force ); def cmd_log( self, args ): start_revision, end_revision = args.getOptionalRevisionPair( '--revision', 'head', '0' ) verbose = args.getBooleanOption( '--verbose', True ) positional_args = args.getPositionalArgs( 1, 1 ) all_logs = self.client.log( positional_args[0], revision_start=start_revision, revision_end=end_revision, discover_changed_paths=verbose ) for log in all_logs: print( '-'*60 ) print( 'rev %d: %s | %s | %d lines' % (log.revision.number ,log.author ,fmtDateTime( log.date ) ,len( log.message.split('\n') )) ) if len( log.changed_paths ) > 0: print( 'Changed paths:' ) for change_info in log.changed_paths: if change_info.copyfrom_path is None: print( ' %s %s' % (change_info.action, change_info.path) ) else: print( ' %s %s (from %s:%d)' % (change_info.action ,change_info.path ,change_info.copyfrom_path ,change_info.copyfrom_revision.number) ) print( log.message ) print( '-'*60 ) def cmd_ls( self, args ): recurse = args.getBooleanOption( '--recursive', True ) revision = args.getOptionalRevision( '--revision', 'head' ) verbose = args.getBooleanOption( '--verbose', True ) positional_args = args.getPositionalArgs( 0 ) if len(positional_args) == 0: positional_args.append( '.' ) for arg in positional_args: all_files = self.client.ls( arg, revision=revision, recurse=recurse ) if verbose: for file in all_files: args = {} args.update( file ) args['name'] = args['name'] args['last_author'] = args['last_author'] args['time_str'] = fmtDateTime( file.time ) args['created_rev_num'] = file.created_rev.number print( '%(created_rev_num)7d %(last_author)-10s %(size)6d %(time_str)s %(name)s' % args ) else: for file in all_files: print( '%(name)s' % file ) def cmd_list( self, args ): recurse = args.getBooleanOption( '--recursive', True ) revision = args.getOptionalRevision( '--revision', 'head' ) verbose = args.getBooleanOption( '--verbose', True ) positional_args = args.getPositionalArgs( 0 ) if len(positional_args) == 0: positional_args.append( '.' ) for arg in positional_args: all_files = self.client.list( arg, revision=revision, recurse=recurse ) if verbose: for file, Q in all_files: args = {} args.update( file ) args['time_str'] = fmtDateTime( file.time ) args['created_rev_num'] = file.created_rev.number print( '%(created_rev_num)7d %(last_author)-10s %(size)6d %(time_str)s %(path)s' % args ) else: for file, Q in all_files: print( '%(path)s' % file ) def cmd_merge( self, args ): recurse = args.getBooleanOption( '--recursive', True ) dry_run = args.getBooleanOption( '--dry-run', False ) notice_ancestry = args.getBooleanOption( '--notice-ancestry', False ) # need to figure out which variaty of the merge command this is if args.haveOption( '--revision' ): # its merge -r N:M SOURCE [WCPATH] revision1, revision2 = args.getMandatoryRevisionPair( '--revision' ) positional_args = args.getPositionalArgs( 1, 2 ) if len(positional_args) == 1: positional_args.append( '.' ) path1 = positional_args[0] path2 = positional_args[0] wcpath = positional_args[1] else: # its merge sourceURL1[@N] sourceURL2[@M] [WCPATH] positional_args = args.getPositionalArgs( 2, 3 ) if len(positional_args) == 2: positional_args.append( '.' ) path1, rev1 = self.parsePathWithRevision( positional_args[0] ) path2, rev2 = self.parsePathWithRevision( positional_args[1] ) wcpath = positional_args[2] self.client.merge( path1, revision1, path2, revision2, wcpath, recurse=recurse, dry_run=dry_run, notice_ancestry=notice_ancestry ) def cmd_mkdir( self, args ): msg = args.getOptionalValue( '--message', '' ) if msg == '': msg = self.getLogMessage() self.client.mkdir( args.getPositionalArgs( 1, 1 )[0], msg ) def cmd_move( self, args ): positional_args = args.getPositionalArgs( 2, 2 ) self.client.move( positional_args[0], positional_args[1] ) cmd_mv = cmd_move def key_props_by_path( self, a ): return a[0] def cmd_proplist( self, args ): recurse = args.getBooleanOption( '--recursive', True ) revision = args.getOptionalRevision( '--revision', 'working' ) verbose = args.getBooleanOption( '--verbose', True ) positional_args = args.getPositionalArgs( 0, 0 ) if len(positional_args) == 0: positional_args.append( '.' ) for arg in positional_args: if self.client.is_url( arg ): revision = args.getOptionalRevision( '--revision', 'head' ) all_props = self.client.proplist( arg, revision=revision, recurse=recurse ) all_props.sort( key=self.key_props_by_path ) for path, props in all_props: print( "Properties on '%s':" % path ) prop_names = sorted( props.keys() ) for name in prop_names: if verbose: print( ' %s: %s' % (name, props[name]) ) else: print( ' %s' % name ) cmd_pl = cmd_proplist def cmd_propget( self, args ): recurse = args.getBooleanOption( '--recursive', True ) revision = args.getOptionalRevision( '--revision', 'working' ) positional_args = args.getPositionalArgs( 1, 2 ) if len(positional_args) == 1: positional_args.append( '.' ) if self.client.is_url( positional_args[0] ): revision = args.getOptionalRevision( '--revision', 'head' ) props = self.client.propget( positional_args[0], positional_args[1], revision=revision, recurse=recurse ) prop_names = sorted( props.keys() ) for name in prop_names: print( '%s: %s' % (name, props[name]) ) cmd_pg = cmd_propget def cmd_propset( self, args ): recurse = args.getBooleanOption( '--recursive', True ) revision = args.getOptionalRevision( '--revision', 'working' ) verbose = args.getBooleanOption( '--verbose', True ) positional_args = args.getPositionalArgs( 2, 3 ) if len(positional_args) == 2: positional_args.append( '.' ) if self.client.is_url( positional_args[0] ): revision = args.getOptionalRevision( '--revision', 'head' ) self.client.propset( positional_args[0], positional_args[1], positional_args[2], revision=revision, recurse=recurse ) cmd_ps = cmd_propset def cmd_propdel( self, args ): recurse = args.getBooleanOption( '--recursive', True ) revision = args.getOptionalRevision( '--revision', 'working' ) verbose = args.getBooleanOption( '--verbose', True ) positional_args = args.getPositionalArgs( 1, 2 ) if len(positional_args) == 1: positional_args.append( '.' ) if self.client.is_url( positional_args[0] ): revision = args.getOptionalRevision( '--revision', 'head' ) self.client.propdel( positional_args[0], positional_args[1], revision=revision, recurse=recurse ) cmd_pd = cmd_propdel def cmd_revproplist( self, args ): revision = args.getOptionalRevision( '--revision', 'head' ) verbose = args.getBooleanOption( '--verbose', False ) positional_args = args.getPositionalArgs( 0, 1 ) if len(positional_args) == 0: positional_args.append( '.' ) rev, prop_dict = self.client.revproplist( positional_args[0], revision=revision ) print( 'Revision: %s' % rev.number ) prop_keys = prop_dict.keys() for key in sorted( prop_keys ): print( '%s: %s' % (key, prop_dict[ key ]) ) cmd_rpl = cmd_revproplist def cmd_revpropget( self, args ): revision = args.getOptionalRevision( '--revision', 'head' ) positional_args = args.getPositionalArgs( 1, 2 ) if len(positional_args) == 1: positional_args.append( '.' ) rev, value = self.client.revpropget( positional_args[0], positional_args[1], revision=revision ) print( 'Revision: %s' % rev.number ) print( '%s: %s' % (positional_args[0], value) ) cmd_rpg = cmd_revpropget def cmd_revpropset( self, args ): force = args.getBooleanOption( '--force', False ) revision = args.getOptionalRevision( '--revision', 'head' ) positional_args = args.getPositionalArgs( 2, 3 ) if len(positional_args) == 2: positional_args.append( '.' ) rev = self.client.revpropset( positional_args[0], positional_args[1], positional_args[2], revision=revision, force=force ) cmd_rps = cmd_revpropset def cmd_revpropdel( self, args ): force = args.getBooleanOption( '--force', False ) revision = args.getOptionalRevision( '--revision', 'head' ) positional_args = args.getPositionalArgs( 1, 2 ) if len(positional_args) == 1: positional_args.append( '.' ) self.client.revpropdel( positional_args[0], positional_args[1], revision=revision, force=force ) cmd_rpd = cmd_revpropdel def cmd_remove( self, args ): force = args.getBooleanOption( '--force', True ) positional_args = args.getPositionalArgs( 1, 0 ) self.client.remove( positional_args, force=force ) cmd_rm = cmd_remove def cmd_remove_from_changelists( self, args ): if not hasattr( self.client, remove_from_changelists ): print( 'Error: remove_from_changelists is not supported by this version of Subversion' ) return path = args.getPositionalArgs( 1, 1 )[0] self.client.remove_from_changelists( path ) def cmd_resolved( self, args ): recurse = args.getBooleanOption( '--recursive', True ) positional_args = args.getPositionalArgs( 1, 1 ) self.client.resolved( positional_args[0], recurse=recurse ) def cmd_revert( self, args ): recurse = args.getBooleanOption( '--recursive', True ) positional_args = args.getPositionalArgs( 1, 1 ) self.client.revert( positional_args[0], recurse=recurse ) def key_by_path( self, a ): return a.path def cmd_status( self, args ): recurse = args.getBooleanOption( '--non-recursive', False ) verbose = args.getBooleanOption( '--verbose', True ) quiet = args.getBooleanOption( '--quiet', True ) ignore = args.getBooleanOption( '--no-ignore', False ) update = args.getBooleanOption( '--show-updates', True ) positional_args = args.getPositionalArgs( 0 ) if len(positional_args) == 0: all_files = self.client.status( '', recurse=recurse, get_all=verbose, ignore=ignore, update=update ) self._cmd_status_print( all_files, verbose, update, ignore, quiet ) else: for arg in positional_args: all_files = self.client.status( arg, recurse=recurse, get_all=verbose, ignore=ignore, update=update ) self._cmd_status_print( all_files, verbose, update, ignore, quiet ) def _cmd_status_print( self, all_files, detailed, update, ignore, quiet ): all_files.sort( key=self.key_by_path ) for file in all_files: if file.text_status == pysvn.wc_status_kind.ignored and ignore: continue if file.text_status == pysvn.wc_status_kind.unversioned and quiet: continue state = '%s%s%s%s%s' % (wc_status_kind_map[ file.text_status ], wc_status_kind_map[ file.prop_status ], ' L'[ file.is_locked ], ' +'[ file.is_copied ], ' S'[ file.is_switched ]) if( file.repos_text_status != pysvn.wc_status_kind.none or file.repos_prop_status != pysvn.wc_status_kind.none ): odd_status = '%s%s' % (wc_status_kind_map[ file.repos_text_status ], wc_status_kind_map[ file.repos_prop_status ]) else: odd_status = ' ' lock_state = ' ' if file.entry is not None and hasattr( file.entry, 'lock_token' ): if file.entry.lock_token is not None: lock_state = 'K' if hasattr( file, 'repos_lock' ) and file.repos_lock is not None: lock_state = 'O' if file.entry is not None and detailed: print( '%s%s %s %6d %6d %-14s %s' % (state, lock_state, odd_status, file.entry.revision.number, file.entry.commit_revision.number, file.entry.commit_author, file.path) ) elif detailed: print( '%s%s %s %6s %6s %-14s %s' % (state, lock_state, odd_status, '', '', '', file.path) ) elif update: print( '%s%s %s %s' % (state, lock_state, odd_status, file.path) ) else: if( file.text_status != pysvn.wc_status_kind.normal or file.prop_status != pysvn.wc_status_kind.normal or lock_state.strip() != ''): print( '%s%s %s' % (state, lock_state, file.path) ) cmd_st = cmd_status cmd_stat = cmd_status def cmd_switch( self, args ): recurse = args.getBooleanOption( '--non-recursive', False ) revision = args.getOptionalRevision( '--revision', 'head' ) positional_args = args.getPositionalArgs( 1, 2 ) if len(positional_args) == 1: positional_args.append( '.' ) self.client.switch( positional_args[0], positional_args[1], recurse=recurse, revision=revision ) def cmd_relocate( self, args ): recurse = args.getBooleanOption( '--non-recursive', False ) positional_args = args.getPositionalArgs( 2, 3 ) if len(positional_args) == 2: positional_args.append( '.' ) self.client.relocate( positional_args[0], positional_args[1], positional_args[2], recurse=recurse ) def cmd_unlock( self, args ): force = args.getBooleanOption( '--force', False ) positional_args = args.getPositionalArgs( 1, 1 ) self.client.unlock( positional_args[0], force ); def cmd_update( self, args ): recurse = args.getBooleanOption( '--non-recursive', False ) positional_args = args.getPositionalArgs( 0 ) if len(positional_args) == 0: positional_args.append( '.' ) rev_list = self.client.update( positional_args[0], recurse=recurse ) self.printNotifyMessages() if type(rev_list) == type([]) and len(rev_list) != 1: print( 'rev_list = %r' % [rev.number for rev in rev_list] ) if self.revision_update_complete is not None: print( 'Updated to revision %s' % self.revision_update_complete.number ) else: print( 'Updated to unknown revision - update failed?' ) cmd_up = cmd_update def cmd_help( self, args ): print( 'Version: pysvn %d.%d.%d-%d' % pysvn.version,'svn %d.%d.%d-%s' % pysvn.svn_version ) valid_cmd_names = [name for name in SvnCommand.__dict__.keys() if name.find('cmd_') == 0] valid_cmd_names.sort() print( 'Available subcommands:' ) index = 0 line = '' for name in valid_cmd_names: line = line + (' %-12s' % name[4:]) if index % 4 == 3: print( line ) line = '' index += 1 # key is long option name, value is 1 if need next arg as value long_opt_info = { '--pause': 0, '--auto-props': 0, # enable automatic properties '--config-dir': 1, # read user configuration files from directory ARG '--diff-cmd': 1, # use ARG as diff command '--diff3-cmd': 1, # use ARG as merge command '--dry-run': 0, # try operation but make no changes '--editor-cmd': 1, # use ARG as external editor '--encoding': 1, # treat value as being in charset encoding ARG '--force': 0, # force operation to run '--force-log': 0, # force validity of log message source '--incremental': 0, # give output suitable for concatenation '--new': 1, # use ARG as the newer target '--no-auth-cache': 0, # do not cache authentication tokens '--no-auto-props': 0, # disable automatic properties '--no-diff-deleted': 0, # do not print differences for deleted files '--no-ignore': 0, # disregard default and svn:ignore property ignores '--non-interactive': 0, # do no interactive prompting '--notice-ancestry': 0, # notice ancestry when calculating differences '--old': 1, # use ARG as the older target '--password': 1, # specify a password ARG '--relocate': 0, # relocate via URL-rewriting '--revprop': 0, # operate on a revision property (use with -r) '--strict': 0, # use strict semantics '--targets': 1, # pass contents of file ARG as additional args '--username': 1, # specify a username ARG '--version': 0, # print client version info '--xml': 0, # output in xml '--file': 1, # read data from file ARG '--native-eol': 1, # native eol ARG '--non-recursive': 0, # operate on single directory only '--recursive': 0, # descend recursively '--message': 1, # specify commit message ARG '--quiet': 0, # print as little as possible '--revision': 1, # revision X or X:Y range. X or Y can be one of: '--show-updates': 0, # display update information '--verbose': 0, # print extra information '--extensions': 1, # pass ARG as bundled options to GNU diff '--pysvn-testing': 1, # modify behaviour to assist testing pysvn '--debug': 0, # do debug stuff } # map short name to long short_opt_info = { '-F': '--file', '-N': '--non-recursive', '-R': '--recursive', '-m': '--message', '-q': '--quiet', '-r': '--revision', '-u': '--show-updates', '-v': '--verbose', '-x': '--extensions', } # # Usage: # Construct with a commnad list # call getCommandName() # call getBooleanOption() and getOptionalValue() as needed # finally call getPositionalArgs() # # class SvnArguments: def __init__( self, all_args ): self.positional_args = [] self.named_options = {} self.used_named_options = {} need_next_arg = 0 name = '' for arg in all_args: if need_next_arg: self.named_options[ name ] = arg need_next_arg = 0 elif self._isOption( arg ): name, need_next_arg = self._optionInfo( arg ) if not need_next_arg: self.named_options[ name ] = None else: expanded_arg = glob.glob( arg ) if len(expanded_arg) > 0: self.positional_args.extend( expanded_arg ) else: self.positional_args.append( arg ) if need_next_arg: raise CommandError( 'Missing arg to option %s' % name ) def _isOption( self, arg ): return arg[0] == '-' def _optionInfo( self, opt ): # return long_name, arg_needed long_opt = short_opt_info.get( opt, opt ) if long_opt in long_opt_info: return long_opt, long_opt_info[ long_opt ] raise CommandError( 'unknown option %s' % opt ) def _checkOptionsUsed( self ): # check all options have been used for opt_name in self.named_options.keys(): if opt_name not in self.used_named_options: raise CommandError( 'unused option %s' % opt_name ) def parsePathWithRevision( self, path_rev, default_rev ): if '@' in path_rev: path = path_rev[:path_rev.find('@')] rev = self._parseRevisionArg( path_rev[path_rev.find('@')+1:] ) else: path = path_rev rev = self._parseRevisionArg( default_rev ) return path, rev def _parseRevisionArg( self, rev_string ): if rev_string.lower() == 'base': return pysvn.Revision( pysvn.opt_revision_kind.base ) if rev_string.lower() == 'head': return pysvn.Revision( pysvn.opt_revision_kind.head ) if rev_string.lower() == 'working': return pysvn.Revision( pysvn.opt_revision_kind.working ) if rev_string.lower() == 'committed': return pysvn.Revision( pysvn.opt_revision_kind.committed ) if rev_string.lower() == 'prev': return pysvn.Revision( pysvn.opt_revision_kind.prev ) if rev_string.lower() == 'unspecified': return pysvn.Revision( pysvn.opt_revision_kind.unspecified ) if rev_string[0] == '{' and rev_string[-1] == '}': try: date = parse_datetime.parse_time( rev_string[1:-2] ) return pysvn.Revision( pysvn.opt_revision_kind.date, date ) except parse_datetime.DateTimeSyntaxError as e: raise CommandError( e.reason() ) # either a rev number or a date try: return pysvn.Revision( pysvn.opt_revision_kind.number, int(rev_string) ) except ValueError: pass raise CommandError( 'Cannot parse %s as a revision value' % rev_string ) def _splitRevisionString( self, rev_string ): # split the string at the first : that is not inside a {} pair if rev_string[0] == '{': # the : may be after the closing } close_paren_index = rev_string.find( '}' ) if close_paren_index == -1: # error leave to others to report return [rev_string] if close_paren_index == len(rev_string ): # its just one revision return [rev_string] if rev_string[close_paren_index+1] == ':': return [rev_string[:close_paren_index+1], rev_string[close_paren_index+2:]] # another error case return [rev_string] else: return rev_string.split(':',1) def getCommandName( self, default_command ): if len(self.positional_args) > 0: return self.positional_args.pop( 0 ) else: return default_command def haveOption( self, opt_name ): return opt_name in self.named_options def getBooleanOption( self, opt_name, present_value=True ): if opt_name in self.named_options: self.used_named_options[ opt_name ] = None return present_value else: return not present_value def getOptionalValue( self, opt_name, default ): if opt_name in self.named_options: self.used_named_options[ opt_name ] = None return self.named_options[ opt_name ] else: return default def getOptionalRevision( self, opt_name, start_default ): if opt_name in self.named_options: self.used_named_options[ opt_name ] = None rev_string = self.named_options[ opt_name ] return self._parseRevisionArg( rev_string ) else: return self._parseRevisionArg( start_default ) def getMandatoryRevisionPair( self, opt_name ): # parse a M:N or M as revision pair if opt_name not in self.named_options: raise CommandError( 'mandatory %s required' % opt_name ) self.used_named_options[ opt_name ] = None rev_strings = self._splitRevisionString( self.named_options[ opt_name ] ) if len(rev_strings) == 1: raise CommandError( 'mandatory %s requires a pair of revisions' % opt_name ) return [self._parseRevisionArg( rev_strings[0] ), self._parseRevisionArg( rev_strings[1] )] def getOptionalRevisionPair( self, opt_name, start_default, end_default=None ): # parse a M:N or M as revision pair if opt_name in self.named_options: self.used_named_options[ opt_name ] = None rev_strings = self._splitRevisionString( self.named_options[ opt_name ] ) if len(rev_strings) == 1: if end_default is None: # M means M:M rev_strings.append( rev_strings[0] ) else: # M means M:end_default rev_strings.append( end_default ) return [self._parseRevisionArg( rev_strings[0] ), self._parseRevisionArg( rev_strings[1] )] else: return (self._parseRevisionArg( start_default ), self._parseRevisionArg( end_default )) def getPositionalArgs( self, min_args, max_args=0 ): # check min and max then return the list if len(self.positional_args) < min_args: raise CommandError( 'too few arguments - need atlease %d' % min_args ) if max_args != 0 and len(self.positional_args) > max_args: raise CommandError( 'too many arguments - need no more then %d' % max_args ) # as this is the last call on the args object we check the option where all used self._checkOptionsUsed() return self.positional_args if __name__ == '__main__': sys.exit( main( sys.argv ) ) pysvn-1.7.8/Docs/generate_cpp_docs_from_html_docs.py000755 000771 000771 00000017112 11101103524 023170 0ustar00barrybarry000000 000000 #!/usr/bin/python import sys import os import xml.dom.minidom def main( argv ): svn_include = argv[1] html_doc = argv[2] cpp_header_filename = argv[3] cpp_module_filename = argv[4] print( 'Info: svn_include %s' % svn_include ) print( 'Info: html_doc %s' % html_doc ) print( 'Info: cpp_header_filename %s' % cpp_header_filename ) print( 'Info: cpp_module_filename %s' % cpp_module_filename ) debug.enable( '--debug' in argv ) try: parser = XhtmlParser( open( html_doc ).read() ) except ParseException as e: print( repr(e) ) print( str(e) ) return 1 parser.setSvnVersion( svn_include ) parser.htmlToCpp() cpp_header = open( cpp_header_filename, 'w' ) cpp_module = open( cpp_module_filename, 'w' ) cpp_header.write( '// Created by %s\n\n' % argv[0] ) cpp_module.write( '// Created by %s\n' % argv[0] ) cpp_module.write( '#include "pysvn_docs.hpp"\n' ) parser.writeCppDocs( cpp_header, cpp_module ) cpp_header.close() cpp_module.close() return 0 class DebugTrace: def __init__( self, enable=False ): self._enable = enable def __call__( self, *args ): if self.isEnabled(): for s in args: print( s, ) print def enable( self, enable ): self._enable = enable def isEnabled( self ): return self._enable debug = DebugTrace() class ParseException(Exception): def __init__(self, msg): Exception.__init__(self) self.msg = msg def __repr__( self ): return '' % self.msg def __str__( self ): return self.msg class XhtmlParser: def __init__( self, definition_text ): self.dom = None self.all_docs = {} self.svn_version = None try: self.dom = xml.dom.minidom.parseString( definition_text ) except xml.parsers.expat.ExpatError as e: raise ParseException( 'Ln:%d Col:%d %s' % (e.lineno, e.offset, e.args[0]) ) def htmlToCpp( self ): all_anchors = self.dom.getElementsByTagName("a") all_named_nodes = [(node.parentNode, node.getAttribute( 'name' )) for node in all_anchors if node.hasAttribute( 'name' )] for node, name in all_named_nodes: self.docsFromNode( node, name ) copyright = ''' Copyright (c) 2003-2007 Barry A Scott. All rights reserved. This software is licensed as described in the file LICENSE.txt, which you should have received as part of this distribution. ============================================================= This product includes software developed by CollabNet (http://www.Collab.Net/). ''' docs = Documentation( 'copyright' ) docs.addText( copyright ) self.all_docs[ docs.getName() ] = docs def writeCppDocs( self, cpp_header, cpp_module ): all_names = list( self.all_docs.keys() ) all_names.sort() for name in all_names: docs = self.all_docs[ name ] cpp_header.write( 'extern const char %s_doc[];\n' % name ) cpp_module.write( '\nconst char %s_doc[] =\n' % name ) for line in docs.getBody().split('\n' ): cpp_module.write( ' "%s\\n"\n' % line ) cpp_module.write( ';\n' ) def docsFromNode( self, node, name ): docs = Documentation( name ) while True: node = node.nextSibling if node is None: break if node.nodeName in ['h1','h2','h3','h4']: break self.__extractText( None, docs, node ) debug( 'docsFromNode adding %s' % name ) self.all_docs[ name ] = docs def __extractText( self, parent, docs, node ): debug( '__extractText( node=',repr(node), ')' ) if node.nodeName == 'p': docs.addText( '\n' ) if node.nodeName == 'li': docs.addText( '* ' ) for child in node.childNodes: debug('__extractText child nodeName=%s' % child.nodeName) if child.nodeType == xml.dom.minidom.Node.TEXT_NODE: debug( '__extractText TEXT_NODE: %r %r' % (node, child.data) ) if node.nodeName in ['p','li','span']: docs.addText( child.data.strip() ) elif node.nodeName in ['a']: docs.addText( '%s ' % child.data.strip() ) elif node.nodeName in ['pre']: docs.addText( child.data ) elif child.nodeType == xml.dom.minidom.Node.DOCUMENT_TYPE_NODE: #debug( '__extractText DOCUMENT_TYPE_NODE' ) pass elif child.nodeType == xml.dom.minidom.Node.PROCESSING_INSTRUCTION_NODE: #debug( '__extractText PROCESSING_INSTRUCTION_NODE' ) pass elif child.nodeType == xml.dom.minidom.Node.COMMENT_NODE: #debug( '__extractText COMMENT_NODE' ) pass elif child.nodeType == xml.dom.minidom.Node.ELEMENT_NODE: debug( '__extractText ELEMENT_NODE %r' % child.nodeName ) if child.nodeName in ['h1','h2','h3','h4']: break include_children = True # check for conditional span and div sections if child.nodeName in ['span','div']: version_class = child.getAttribute( 'class' ) if version_class.startswith( 'svn_' ): encoded_version = int( version_class[len('svn_'):] ) if debug.isEnabled(): docs.addText( '[if %d]' % encoded_version ) if encoded_version > self.svn_version: debug( 'Skipping %r > %r' % (encoded_version, self.svn_version) ) include_children = False else: debug( 'Including %r <= %r' % (encoded_version, self.svn_version) ) if include_children: self.__extractText( node, docs, child ) if node.nodeName == 'p': docs.addText( '\n' ) if node.nodeName == 'li': docs.addText( '\n' ) debug('__extractText done') return def setSvnVersion( self, svn_include ): all_svn_version_lines = open( os.path.join( svn_include, 'svn_version.h' ) ).readlines() major = None minor = None patch = None for line in all_svn_version_lines: words = line.strip().split() if len(words) > 2 and words[0] == '#define': if words[1] == 'SVN_VER_MAJOR': major = int(words[2]) elif words[1] == 'SVN_VER_MINOR': minor = int(words[2]) elif words[1] == 'SVN_VER_PATCH': patch = int(words[2]) self.svn_version = ((major * 1000) + minor) * 1000 + patch # force to the version to test with #self.svn_version = 1001000 print( 'Info: Building against SVN %d.%d.%d code %d' % (major, minor, patch, self.svn_version) ) class Documentation: def __init__( self, name ): self.name = name self.body = [] def addText( self, text ): self.body.append( text ) def getName( self ): return self.name def getBody( self ): body = ''.join( self.body ).strip() body = body.replace( '\\', '\\\\' ) body = body.replace( '"', '\\"' ) return body if __name__ == "__main__": sys.exit( main( sys.argv ) ) pysvn-1.7.8/Docs/pysvn.html000644 000771 000771 00000007240 10557152702 016156 0ustar00barrybarry000000 000000 pysvn - Python interface to Subversion

pysvn - Python interface to Subversion

Documentation

The pysvn Programmer's Guide is the best place to start learning about pysvn. It covers the use of pysvn in a tutorial style with lots of examples.

Use the pysvn Programmer's Reference to look up the detailed descriptions of all the classes, functions and variables of pysvn.

The python-library/site-packages/pysvn/Examples/Client/svn_cmd.py program is a complete replacement for the svn command line written using pysvn. It is a good place to look for working examples of use of all the pysvn module.

pysvn Support

Please use the mailing lists and the issues database on http://pysvn.tigris.org to report problems, suggest improvements or contribute changes.

pysvn License

=================================================================
Copyright (C) 2003-2007 Barry A. Scott. All rights reserved.

=================================================================
The Apache Software License, Version 1.1

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in
   the documentation and/or other materials provided with the
   distribution.

3. The end-user documentation included with the redistribution,
   if any, must include the following acknowledgment:
      "This product includes software developed by 
       Barry A. Scott http://www.barrys-emacs.org."
   Alternately, this acknowledgment may appear in the software itself,
   if and wherever such third-party acknowledgments normally appear.

4. The names "PySVN" must not be used to endorse or promote
   products derived from this software without prior written
   permission. For written permission, please contact
   barry@barrys-emacs.org.

5. Products derived from this software may not be called "PySVN",
   nor may "PySVN" appear in their name, without prior written
   permission of Barry Scott.

THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
=================================================================
pysvn-1.7.8/Docs/pysvn_prog_guide.html000644 000771 000771 00000023247 10557152702 020367 0ustar00barrybarry000000 000000 pysvn Programmer's Guide

pysvn Programmer's Guide

This guide gives an tutorial introduction to the pysvn module.

Complete and detailed infomation on the pysvn API is documented in pysvn Programmer's Reference.

The pysvn module is a python interface to the Subversion version control system. This API exposes client interfaces for managing a working copy, querying a repository, and synchronizing the two.

This API cannot create new repositories; it can only interact with existing repositories. If you need to create a repository, use the svnadmin command from Subversion.

Using the API, you can check out a working copy, add, edit, and remove working files, and check in, compare, or discard your changes. Repository properties such as keyword expansion, end of line characters, and ignore lists can also be examined and manipulated.

Subversion model

Subversion operates on an update-edit-commit model. A local, working copy is created. Changes are made in the working copy, then committed to the central repository (which may be local or remote).

This model allows and in fact expects that multiple people will occasionally edit the same file at the same time. In most cases, Subversion merges these differences without intervention. In the rare case where the differences are ambiguous, one of the commits fails, and the user or application will need to examine and resolve the differences before attempting to commit again.

Common Tasks

This section gives examples of common tasks using the pysvn interface. Operations applied to directories are processed recursively. Add the argument recurse=False to prevent this behavior; for example, you may want to add a directory without adding its contents.

Check out a working copy

import pysvn
client = pysvn.Client()
#check out the current version of the pysvn project
client.checkout('http://localhost/example/trunk',
    './examples/pysvn')
#check out revision 11 of the pysvn project
client.checkout('http://localhost/example/trunk', 
   './examples/pysvn-11',
   revision=pysvn.Revision(pysvn.opt_revision_kind.number, 11))

This example creates a working copy of the example project in the directory examples/pysvn. This project is used in the remaining examples.

Add a file or directory to the repository

import pysvn
# write a file foo.txt
f = file('./examples/pysvn/foo.txt', 'w')
f.write('Sample versioned file via pithon\n')
f.close()
client = pysvn.Client()
#schedule the addition; 
#  the working copy will now track the file as a scheduled change
client.add('./examples/pysvn/foo.txt')
#committing the change actually adds the file to the repository
client.checkin(['./examples/pysvn/foo.txt'], 'Adding a sample file')

This example creates the file 'foo.txt' in the working copy, then adds it to the repository. Note that the Client.import_() command does the addition and commit in a single step. Most applications, however, queue up multiple changes and commit them together at a later time.

Update the working copy

import pysvn
client = pysvn.Client()
client.update('./examples/pysvn')

Updating gets any changes other users have committed to the repository and applies them to your working copy. Most applications do this on a regular basis to prevent conflicts.

Commit changes to the repository

import pysvn
# edit the file foo.txt
f = open('./examples/pysvn/foo.txt', 'w')
f.write('Sample versioned file via python\n')
f.close()
# checkin the change with a log message
client = pysvn.Client()
client.checkin(['./examples/pysvn'], 'Corrected spelling of python in foo.txt')

Commits in Subversion are atomic. Either all scheduled changes are successfully committed, or none are. Most applications either commit all changes in the working copy, as shown in this example, or pass a list of individual files and directories that need to be committed as a unit.

Discard changes in the working copy

import pysvn
# edit the file foo.txt
f = file('./examples/pysvn/foo.txt', 'w')
f.write('This change will never be seen\n')
f.close()
#discard the edits
client = pysvn.Client()
client.revert('./examples/pysvn/foo.txt')

This discards any uncommitted changes in the working copy and restores a file or directory to its unedited state.

Files that are scheduled for addition or removal remain unversioned or are restored to the working copy, respectively.

Rename or move a file

import pysvn
client = pysvn.Client()
#rename the file client side 
client.move('./examples/pysvn/foo.txt', './examples/pysvn/foo2.txt')
#checkin the change removes the file from the repository
client.checkin(['./examples/pysvn/foo.txt', './examples/pysvn/foo2.txt'], 'Foo has become Foo2')

Moving or renaming a file removes the file under the old path or name and adds it in the new location while preserving information about previous versions.

In this example, we passed both filenames to Client.checkin(). Passing the parent directory would also have been effective.

The move and checkin can be done in a single step on the server side; see the example in the Respository Tasks section.

Remove a file or directory from the repository

import pysvn
client = pysvn.Client()
#schedule the removal; 
#  the file will be removed from the working copy
client.remove('./examples/pysvn/foo2.txt')
#committing the change removes the file from the repository
client.checkin(['./examples/pysvn/foo2.txt'], 'Removing sample file')

Some people confuse removing a file or directory from the repository with purging it completely. The file still exists in previous versions and can be retrieved by checking out or otherwise examining the contents of a previous revision.

Files are typically removed from the working copy immediately, while directories usually remain in the working copy until the removal is committed.

Determine pending changes

import pysvn
client = pysvn.Client()
changes = client.status('./examples/pysvn')
print 'files to be added:'
print [f.path for f in changes if f.text_status == pysvn.wc_status_kind.added]
print 'files to be removed:'
print [f.path for f in changes if f.text_status == pysvn.wc_status_kind.deleted]
print 'files that have changed:'
print [f.path for f in changes if f.text_status == pysvn.wc_status_kind.modified]
print 'files with merge conflicts:'
print [f.path for f in changes if f.text_status == pysvn.wc_status_kind.conflicted]
print 'unversioned files:'
print [f.path for f in changes if f.text_status == pysvn.wc_status_kind.unversioned]

Generating a diff or patch

import pysvn
client = pysvn.Client()
diff_text = client.diff('./tmp-file-prefix-', '.')

Determining the repository URL

import pysvn
client = pysvn.Client()
entry = client.info('.')
print 'Url:',entry.url

Repository Tasks

This section shows examples of tasks that manipulate or examine the repository. While the common tasks schedule changes through a local working copy, these tasks affect the repository directly.

List the contents of a repository directory

import pysvn
client = pysvn.Client()
entry_list = client.ls('.')

Get the contents of a file from the repository

import pysvn
client = pysvn.Client()
file_content = client.cat('file.txt')

Create a branch or tag

import pysvn
client = pysvn.Client()
log_message = "reason for change"
def get_log_message():
    return True, log_message
client.callback_get_log_message = get_log_message
client.copy('http://svnrepo.com/svn/trunk', 'http://svnrepo.com/svn/tag/%s' % tag_name )

Move or rename files in the repository

import pysvn
client = pysvn.Client()
client.move( 'file_old.txt', 'file_new.txt' )

Lock a file

import pysvn
client = pysvn.Client()
client.lock( 'file.txt', 'reason for locking' )

Lock a file overriding another user or working copies lock

import pysvn
client = pysvn.Client()
client.lock( 'file.txt', 'reason for locking', force=True )

Unlock a file

import pysvn
client = pysvn.Client()
client.unlock( 'file.txt' )

Unlock a file locked by another user or working copy

import pysvn
client = pysvn.Client()
client.unlock( 'file.txt', force=True )

Test for a locked file

Method 1:

all_entries = self.client.info2( path, recurse=False )
for path, info in all_entries:
    if info['lock']:
        if info['lock']['token'] != '':
            print '%s is locked' % path
        print info['lock']['comment']

Method 2:

all_status = self.client.status( path, recurse=False, update=True )
for status in all_status:
    if status.entry is not None:
        if status.entry.lock_token is not None:
            print '%s is locked' % status.path

Copyright © 2004-2007 Barry A. Scott. All rigths reserved.

pysvn-1.7.8/Docs/pysvn_prog_ref.html000644 000771 000771 00000270143 12075600054 020040 0ustar00barrybarry000000 000000 pysvn - Programmer's reference

pysvn - Programmer's reference

This programmer's reference gives complete and detailed infomation on the pysvn API.

The pysvn Programmer's Guide gives an tutorial introduction to the pysvn module.

pysvn features and feature testing

This document covers pysvn version 1.6. Features offered by pysvn depend on the version of SVN that is being used. Full functionality is only available with SVN 1.6.0 or later.

Click one of the buttons below to show the pysvn API as supported by a particular version of the SVN.

Sorry you browser does not support the show API buttons. Try viewing this page in FireFox.

Showing the PySVN API supported by SVN 1.6.0. Unsupported parts of the API are show like: This.

The recommended way to test for a feature is to use the python hasattr() builtin. Working out what is and is not support from the version number information is quite complex and unnessesary. For example to test for lock and unlock support:

client = pysvn.Client()
if hasattr( client, 'lock' ):
    # use lock

pysvn module

The pysvn module has the following variables:

  • pysvn.copyright - the pysvn copyright string
  • pysvn.version - the pysvn version as a tuple, (major, minor, patch, build)
  • pysvn.svn_version - subversion version as a tuple (major, minor, micro, tag)

The pysvn module has six classes:

The following enumerations are provided:

Use python builtin dir() to list all available values in an enumeration:

    print dir( pysvn.wc_notify_action )

pysvn.Client - Subversion client interface

Interface summary:

client = pysvn.Client()
client = pysvn.Client( config_dir )

The default subversion configuration directory is used if the config_dir is omitted or set to ''.

The configuration directory is automatically created if it is missing.

A Client object can only be used on one thread at a time. If two threads attempt to call methods of Client at the same time one of the threads will get a pysvn.ClientError exception with the value 'client in use on another thread'.

Variables Callbacks Methods

Client variables

exception_style allows you to control the style of exception raised by pysvn.

commit_info_style allows you to control the style of commit_info returned by pysvn.

pysvn.Client.exception_style

exception_style is used to control how pysvn raises ClientError exceptions.

The default value, 0, makes pysvn raise exceptions as it did prior to pysvn 1.1.2.

exception_style can be set to 0 or 1, see ClientError for details of effect of the style on the exception raised.

pysvn.Client.commit_info_style

commit_info_style is used to control how pysvn return commit information.

commit_info_style can be set to 0 or 1. The default value, 0, makes pysvn return only the commit revision.

When set to 1 pysvn returns a dictionary of commit information including date, author, revision and post_commit_err.

Client callbacks

pysvn uses callback functions to allow for realtime feedback and credential handling.

callback_cancel allows you to cancel a long running subversion command.

callback_notify gives feedback as commands runs.

callback_get_log_message is called when a log message is required.

callback_get_login is called to get a username and password to access a repository.

callback_ssl_server_trust_prompt is called when using HTTPS to a server whoes certificate needs is trust verifing.

callback_conflict_resolver is called to handle conflicts.

It is possible to use the Client object without setting up any calls backs. Make sure that all nessesary usernames, passwords and SSL certificate information are stored in the subversion configuration directory.

pysvn.Client.callback_cancel

import pysvn

cancel_command = False
def cancel():
    return cancel_command

client = pysvn.Client()
client.callback_cancel = cancel

The callback_cancel function is called frequently during long running commands. Return True to cause the command to cancel, return False to allow the command to continue.

pysvn.Client.callback_get_log_message

import pysvn

log_message = "reason for change"
def get_log_message():
    return rc, log_message

client = pysvn.Client()
client.callback_get_log_message = get_log_message

The callback_get_log_message is called when a log message is required to complete the current command. Return the True in rc and a log message as a string. Returning False in rc will cause the command to be cancelled. An empty log_message is not allowed and may cause the command to be cancelled.

Unicode strings cannot be handled. If you have a unicode string, convert it to UTF-8.

pysvn.Client.callback_get_login

import pysvn

def get_login( realm, username, may_save ):
    return retcode, username, password, save

client = pysvn.Client()
client.callback_get_login = get_login

callback_get_login is called each time subversion needs a username and password in the realm to access a repository and has no cached credentials.

The may_save parameter is true if subversion is willing to save the answers returned by the callback_get_login function.

pysvn expect the callback_get_login to return a tuple of four values (retcode, username, password, save).

  • retcode - boolean, False if no username and password are available. True if subversion is to use the username and password.
  • username - string, the username to use
  • password - string, the password to use
  • save - boolean, return True if you want subversion to remember the username and password in the configuration directory. return False to prevent saving the username and password.

pysvn.Client.callback_notify

import pysvn

def notify( event_dict ):
    return

client = pysvn.Client()
client.callback_notify = notify

The callback_notify is called as a command runs each time an interesting event occurs. The details of the event are passed to the callback_notify function as a dictionary.

The dictionary contains the following values:

  • path - the path of the action refers to
  • action - the events action, one of the wc_notify_action values
  • kind - the node kind, one of the pysvn.node_kind values
  • mime_type - the mime type
  • content_state - one of the pysvn.wc_notify_state values
  • prop_state - one of the pysvn.wc_notify_state values
  • revision - a Revision object

pysvn.Client.callback_ssl_client_cert_password_prompt

import pysvn

def ssl_client_cert_password_prompt( realm, may_save ):
    return retcode, password, save

client = pysvn.Client()
client.callback_ssl_client_cert_password_prompt = ssl_client_cert_password_prompt

callback_ssl_client_cert_password_prompt is called each time subversion needs a password in the realm to use a client certificate and has no cached credentials.

The may_save parameter is true if subversion is willing to save the answers returned by the callback_ssl_client_cert_password_prompt function.

pysvn expect the callback_ssl_client_cert_password_prompt to return a tuple of three values (retcode, password, save).

  • retcode - boolean, False if no password is available. True if subversion is to use password.
  • password - string, the password to use
  • save - boolean, return True if you want subversion to remember the password in the configuration directory. return False to prevent saving the password.

pysvn.Client.callback_ssl_client_cert_prompt

import pysvn

def ssl_client_cert_prompt( realm, may_save ):
    return retcode, certfile, may_save

client = pysvn.Client()
client.callback_ssl_client_cert_prompt = ssl_client_cert_prompt

callback_ssl_client_cert_prompt is called each time subversion needs a client certificate.

pysvn expect the callback_ssl_client_cert_prompt to return a tuple of three values (retcode, certfile, may_save).

  • retcode - boolean, False if no certificate is available. True if subversion is to use the certificate.
  • certfile - string, the certfile to use

pysvn.Client.callback_ssl_server_prompt

import pysvn

def ssl_server_prompt( ):
    return 

client = pysvn.Client()
client.callback_ssl_server_prompt = ssl_server_prompt

NOT IMPLEMENTED - what it used for?

pysvn.Client.callback_ssl_server_trust_prompt

import pysvn

def ssl_server_trust_prompt( trust_dict ):
    return retcode, accepted_failures, save

client = pysvn.Client()
client.callback_ssl_server_trust_prompt = ssl_server_trust_prompt

The callback_ssl_server_trust_prompt is called each time an HTTPS server presents a certificate and subversion is not sure if it should be trusted. callback_ssl_server_trust_prompt is called with information about the certificate in trust dict.

  • failures - int - a bitmask of failures - [What do these bits mean?]
  • hostname - string - the hostname the certificate was presented from
  • finger_print - string - certificate finger print
  • valid_from - string - valid from this ISO8601 date
  • valid_until - string - valid util this ISO8601 date
  • issuer_dname - stirng - the issued dname
  • realm - string - the realm

pysvn expect the callback_ssl_server_trust_prompt to return a tuple of three values (retcode, accepted_failures, save).

  • retcode - boolean, False if no username and password are available. True if subversion is to use the username and password.
  • accepted_failures - int, the accepted failures allowed
  • save - boolean, return True if you want subversion to remember the certificate in the configuration directory. return False to prevent saving the certificate.

pysvn.Client.callback_conflict_resolver

import pysvn

def conflict_resolver( conflict_description ):
    return conflict_choice, merge_file, save_merged

client = pysvn.Client()
client.callback_conflict_resolver = conflict_resolver

The callback_conflict_resolver is called each time a conflict needs resolving. It is passed the conflict_description and must return a conflict_choice, merge_file and save_merged.

The members of the conflict_description dictionary are:

  • path - string - The path that is in conflict (for a tree conflict, it is the victim)
  • node_kind - pysvn.node_kind - The node type of the path being operated on
  • kind - pysvn.conflict_kind - the sort of conflict being described
  • property_name - string or None - The name of the property whose conflict is being described. (Only if kind is 'property'; else undefined.)
  • is_binary - boolean - Whether svn thinks ('my' version of) path is a 'binary' file. (Only if kind is 'text', else undefined.)
  • mime_type - string or None - The svn:mime-type property of ('my' version of) path
  • action - pysvn.wc_conflict_action - the action being attempted on the conflicted node or property
  • reason - pysvn.wc_conflict_reason - The state of the target node or property, relative to its merge-left source, that is the reason for the conflict
  • base_file - string - common ancestor of the two files being merged
  • their_file - string - their version of the file
  • my_file - string - my locally-edited version of the file
  • merged_file - string - merged version; may contain conflict markers
  • operation - pysvn.wc_operation - the operation that exposed the conflict. Used only for tree conflicts
  • src_left_version - pysvn.wc_conflict_version - Info on the "merge-left source" or "older" version of incoming change
  • src_right_version - pysvn.wc_conflict_version - Info on the "merge-right source" or "their" version of incoming change
  • conflict_choice is one of the pysvn.wc_conflict_choice values
  • merge_file is a file name or None
  • save_merged is True or False

Client methods

add add_to_changelist annotate cat checkin checkout
cleanup copy copy2 diff diff_peg diff_summarize
diff_summarize_peg export get_adm_dir get_auth_cache get_auto_props get_changelist
get_default_password get_default_username get_interactive get_store_passwords import_ info
info2 is_adm_dir is_url list log lock
ls merge merge_peg merge_peg2 merge_peg2 mkdir
move copy2 propdel propget proplist propset
relocate remove remove_from_changelists resolved revert revpropdel
revpropget revproplist revpropset root_url_from_path set_adm_dir set_auth_cache
set_auto_props set_default_password set_default_username set_interactive set_store_passwords status
switch unlock update upgrade    

pysvn.Client.add_to_changelist

add_to_changelist( path,
                   changelist,
                   depth=QQQ,
                   changelists=[] )

TBD

depth is one of the pysvn.depth enums.

pysvn.Client.add

add( path,
     recurse=True,
     force=False,
     ignore=False,
     depth=None )
add( [path,path],
     recurse=True,
     force=False,
     ignore=True,
     depth=None )

Schedules all the files or directories specfied in the paths for addition to the repository. Set recurse to True to recursively add a directory's children. Set force to True to force operation to run. Set ignore to False to disregard default and svn:ignore property ignores. Files are added at the next checkin.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

pysvn.Client.annotate

file_annotation = \
annotate( url_or_path,
          revision_start=pysvn.Revision( opt_revision_kind.number, 0 ),
          revision_end=pysvn.Revision( opt_revision_kind.head ),
          peg_revision=pysvn.Revision( opt_revision_kind.unspecified ) )
 )

Return the annotation for each line in the url_or_path from revision_start to revision_end.

peg_revision indicates in which revision url_or_path is valid. If peg_revision.kind is opt_revision_kind.unspecified, then it defaults to opt_revision_kind.head for URLs or opt_revision_kind.working for WC targets.

The file_annotation is a list of dictionaries. Each dictionary contains:

  • author - string - the name of the author who last wrote the line
  • date - string - the date of the last change to the line
  • line - string - the text of the line
  • number - int - the line number
  • revision - pysvn.Revision - the revision that committed the line

pysvn.Client.cat

file_text = \
cat( url_or_path,
     revision=pysvn.Revision( opt_revision_kind.head ),
     peg_revision=pysvn.Revision( opt_revision_kind.unspecified ) )

Return the contents of url_or_path for the specified revision as a string, file_text.

peg_revision indicates in which revision url_or_path is valid. If peg_revision.kind is opt_revision_kind.unspecified, then it defaults to opt_revision_kind.head for URLs or opt_revision_kind.working for WC targets.

pysvn.Client.checkin

revision = \
checkin( path,
        log_message,
        recurse=True,
        keep_locks=False,
        depth,
        keep_changelist,
        changelists,
        revprops )
revision = \
checkin( [path,path],
        log_message,
        recurse=True,
        keep_locks=False,
        depth,
        keep_changelist,
        changelists,
        revprops )

checkin the files in the path_list to the repository with the specifed log_message. Set recurse to True to recursively checkin a directory's children with the same log message. Set keep_locks to True to prevent locks in the path being unlocked.

checkin returns a pysvn.Revision containing the number of the checked in revision.

depth, keep_changelist, changelists, revprops TBD

pysvn.Client.checkout

revision = \
checkout( url,
          path,
          recurse=True,
          revision=pysvn.Revision( opt_revision_kind.head ),
          peg_revision=pysvn.Revision( opt_revision_kind.unspecified ),
          ignore_externals=False )

checkout the repository at url into the location specified by path. Set recurse to True to recursively check out a directory's children. Specify a revision to check out a particular version of the source tree. Set ignore_externals to True to ignore externals definitions.

peg_revision indicates in which revision url is valid. If peg_revision.kind is opt_revision_kind.unspecified, then it defaults to opt_revision_kind.head for URLs or opt_revision_kind.working for WC targets.

checkout returns a pysvn.Revision containing the number of the checked out revision.

Note: Subversion seems to return 0 rather then the actual revision. Use a notify callback and record the revision reported for the pysvn.wc_notify_action.update_completed event. This is what the svn command does.

pysvn.Client.cleanup

cleanup( path )

Clean up any locks in the working copy at path. Usually such locks are the result of a failed or interrupted operation.

pysvn.Client.copy

copy( src_url_or_path,
      dest_url_or_path,
      src_revision=pysvn.Revision( opt_revision_kind.head ))

Duplicate something in working copy or repos, remembering history. The src_revision defaults to pysvn.Revision( opt_revision_kind.head ) if the src_path is a URL otherwise to pysvn.Revision( opt_revision_kind.working ).

src_url_or_path and dest_url_or_path can each be either a working copy (WC) path or URL:

  • WC -> WC: copy and schedule for addition (with history)
  • WC -> URL: immediately commit a copy of WC to URL
  • URL -> WC: check out URL into WC, schedule for addition
  • URL -> URL: complete server-side copy; used to branch and tag

If the destination is a URL the client_get_log_message callback must be implemented to return a log message.

pysvn.Client.copy2

copy2( sources,
       dest_url_or_path,
       copy_as_child=False,
       make_parents=False,
       revprops,
       ignore_externals=False )

Duplicate something in working copy or repos, remembering history. The src_revision defaults to pysvn.Revision( opt_revision_kind.head ) if the src_path is a URL otherwise to pysvn.Revision( opt_revision_kind.working ).

sources is a list of tuples of (url_or_path, rev), you can ommit rev by passing (url_or_path,). TBD better docs here.

revprops TBD

set ignore_externals to True to ignore externals.

src_url_or_path and dest_url_or_path can each be either a working copy (WC) path or URL:

  • WC -> WC: copy and schedule for addition (with history)
  • WC -> URL: immediately commit a copy of WC to URL
  • URL -> WC: check out URL into WC, schedule for addition
  • URL -> URL: complete server-side copy; used to branch and tag

If the destination is a URL the client_get_log_message callback must be implemented to return a log message.

pysvn.Client.diff

diff_text = \
diff( tmp_path,
      url_or_path,
      revision1=pysvn.Revision( opt_revision_kind.base ),
      url_or_path2=url_or_path,
      revision2=pysvn.Revision( opt_revision_kind.working ),
      recurse=True,
      ignore_ancestry=False,
      diff_deleted=True,
      ignore_content_type=False,
      header_encoding="",
      diff_options=[],
      depth=depth,,
      relative_to_dir=None,
      changelists=None )

Return the differences between revision1 of url_or_path and revision2 of url_or_path2. diff_text is a string containing the diff output.

diff uses tmp_path to form the filename when creating any temporary files needed. The names are formed using tmp_path + unique_string + ".tmp". For example tmp_path=/tmp/diff_prefix will create files like /tmp/diff_prefix.tmp and /tmp/diff_prefix1.tmp.

Diff output will not be generated for binary files, unless ignore_content_type is true, in which case diffs will be shown regardless of the content types.

Generated headers are encoded using header_encoding.

The list of diff_options strings are passed to the external diff program that subversion uses. Typical options are -b (ignore space changes) and -w (ignore all white space). The exact options that work depend on the version of subversion used and its configuration.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

If relative_to_dir is not None, the original_path and modified_path will have the relative_to_dir stripped from the front of the respective paths.

If relative_to_dir is not None but relative_to_dir is not a parent path of the target, an error is returned.

pysvn.Client.diff_peg

diff_text = \
diff_peg( tmp_path,
          url_or_path,
          peg_revision=pysvn.Revision( opt_revision_kind.unspecified ),
          revision_start=pysvn.Revision( opt_revision_kind.base ),
          revision_end=pysvn.Revision( opt_revision_kind.working ),
          recurse=True,
          ignore_ancestry=False,
          diff_deleted=True,
          ignore_content_type=False,
          header_encoding="",
          diff_options=[],
          depth=depth )

return the differences between two revisions of the url_or_path. diff_text is a string containing the diff output.

diff uses tmp_path to form the filename when creating any temporary files needed. The names are formed using tmp_path + unique_string + ".tmp". For example tmp_path=/tmp/diff_prefix will create files like /tmp/diff_prefix.tmp and /tmp/diff_prefix1.tmp.

Set recurse to True to recursively diff a directory's children. diff_text is a string containing the diff.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

peg_revision indicates in which revision url_or_path is valid. If peg_revision.kind is opt_revision_kind.unspecified, then it defaults to opt_revision_kind.head for URLs or opt_revision_kind.working for WC targets.

Diff output will not be generated for binary files, unless ignore_content_type is true, in which case diffs will be shown regardless of the content types.

Generated headers are encoded using header_encoding.

The list of diff_options strings are passed to the external diff program that subversion uses. Typical options are -b (ignore space changes) and -w (ignore all white space). The exact options that work depend on the version of subversion used and its configuration.

pysvn.Client.diff_summarize

summary = \
diff_summarize( url_or_path1,
                revision1=pysvn.Revision( opt_revision_kind.base ),
                url_or_path2=url_or_path,
                revision2=pysvn.Revision( opt_revision_kind.working ),
                recurse=True,
                ignore_ancestry=False,
                depth=depth )

Produce a diff summary which lists the changed items between url_or_path1 revision1 and url_or_path2 revision2 without creating text deltas. url_or_path1 and url_or_path2 can be either working-copy paths or URLs.

The function may report false positives if ignore_ancestry is False, since a file might have been modified between two revisions, but still have the same contents.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

pysvn.Client.diff_summarize_peg

diff_text = \
diff_summarize_peg( url_or_path,
                    peg_revision=pysvn.Revision( opt_revision_kind.unspecified ),
                    revision_start=pysvn.Revision( opt_revision_kind.base ),
                    revision_end=pysvn.Revision( opt_revision_kind.working ),
                    recurse=True,
                    ignore_ancestry=False,
                    depth=depth )

Produce a diff summary which lists the changed items between the filesystem object url_or_path in peg revision peg_revision, as it changed between revision_start and revision_end. url_or_path can be either a working-copy path or URL.

If peg_revision is opt_revision_unspecified, behave identically to svn_client_diff_summarize(), using path for both of that function's url_or_path1 and url_or_path2 argments.

The function may report false positives if ignore_ancestry is False, as described in the documentation for diff_summarize().

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

pysvn.Client.export

revision = \
export( src_url_or_path,
        dest_path,
        force=False,
        revision=pysvn.Revision(),
        native_eol=None,
        ignore_externals=False,
        recurse=True,
        peg_revision=pysvn.Revision( opt_revision_kind.unspecified ),
        depth=depth,
        ignore_keywords=False )

Create an unversioned copy of the src_path at revision in dest_path. Set recurse to False to export a single file. Set ignore_externals to True to ignore externals definitions. Set ignore_keywords to True to prevnet keyword replacement.

peg_revision indicates in which revision src_url_or_path is valid. If peg_revision.kind is opt_revision_kind.unspecified, then it defaults to opt_revision_kind.head for URLs or opt_revision_kind.working for WC targets.

  1. Exports a clean directory tree from the repository specified by URL src_url_or_path, at revision if it is given, otherwise at HEAD, into dest_path.
  2. Exports a clean directory tree from the working copy specified by src_path into dest_path. All local changes will be preserved, but files not under revision control will not be copied.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

native_eol parameter allows the line ending of files with svn:eol-style propery set to native to be overriden. Use None to use the eol-style of the Operating System, use "LF" to use "\n", "CR" to use "\r" and "CRLF" to use "\r\n".

export returns a pysvn.Revision containing the number of the checked in revision.

Note: The native_eol parameter is only available for svn 1.1.0 or later.

pysvn.Client.get_auth_cache

enabled = get_auth_cache()

return true if credential caching is enabled, otherwise return false.

pysvn.Client.get_adm_dir

name = get_adm_dir()

Returns the name of the subverion admin directory.

pysvn.Client.get_auto_props

enabled = get_auto_props()

Returns true if svn will automatically set properties when adding files, otherwise returns false.

pysvn.Client.get_changelist

changelist_list = \
get_changelist( path,
                changelist,
                depth=depth,
                changelists=[] )

TBD

The depth is one of the pysvn.depth enums.

pysvn.Client.get_default_password

password = get_default_password()

Returns None if no default is set otherwise returns the password as a string.

pysvn.Client.get_default_username

username = get_default_username()

Returns None if no default is set otherwise returns the username as a string.

pysvn.Client.get_interactive

enabled = get_interactive()

Returns true if svn will prompt for missing credential information, otherwise returns false.

pysvn.Client.get_store_passwords

enabled = get_store_passwords()

Returns true if svn will store passwords after prompting for them, otherwise returns false.

pysvn.Client.import_

revision = \
import_( path,
         url,
         log_message,
         recurse=True,
         ignore=False,
         revprops )

Commit an unversioned file or tree into the repository.

Recursively commit a copy of PATH to URL. Parent directories are created as necessary in the repository. Set ignore to False to disregard default and svn:ignore property ignores.

revprops TBD

import_ returns a pysvn.Revision containing the number of the checked in revision.

pysvn.Client.info

entry = info( path )

return information on path as a Entry object.

pysvn.Client.info2

entry_list = \
info2( url_or_path,
       revision=pysvn.Revision( opt_revision_kind.unspecified ),
       peg_revision=pysvn.Revision( opt_revision_kind.unspecified ),
       recurse=True,
       depth=depth )

return information on url_or_path as a list of (path, info_dict) tuples. To return information about a URL revision must be opt_revision_kind.head or opt_revision_kind.number.

peg_revision indicates in which revision url_or_path is valid. If peg_revision.kind is opt_revision_kind.unspecified, then it defaults to opt_revision_kind.head for URLs or opt_revision_kind.working for WC targets.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

The info_dict contains:

  • URL - URL or path
  • rev - pysvn.Revision or None
  • kind - kind of path
  • repos_root_URL - string
  • repos_UUID - string
  • last_changed_rev - pysvn.Revision or None
  • last_changed_date - time or None
  • last_changed_author - string or None
  • lock - None or dictionary containing:
    • path - string
    • token - string or None
    • owner - string or None
    • comment - string or None
    • is_dav_comment - true if is DAV comment
    • creation_date - time or None
  • wc_info - None if url_or_path is a URL; otherwise a dictionary containing:
    • schedule - pysvn.wc_schedule or None
    • copyfrom_url - string or None
    • copyfrom_rev - pysvn.Revision or None
    • text_time - time or None
    • prop_time - time or None
    • checksum - string or None
    • conflict_old - string or None
    • conflict_new - string or None
    • conflict_wrk - string or None
    • prejfile - string or None

Note: The info2 command is only available with svn 1.2.0 or later.

pysvn.Client.is_adm_dir

rc = \
is_adm_dir( name )

Return True is the name is an subversion admin directory.

pysvn.Client.root_url_from_path

root_url = \
    root_url_from_path( url_or_path )

Return the root URL of the repository given the url_or_path.

pysvn.Client.is_url

rc = \
is_url( url )

return True if the url is a known subversion url.

pysvn.Client.list

entries_list = \
list( url_or_path,
      peg_revision=pysvn.Revision( opt_revision_kind.unspecified ) )
      revision=pysvn.Revision( opt_revision_kind.head ),
      recurse=True,
      dirent_fields=pysvn.SVN_DIRENT_ALL,
      fetch_locks=False,
      depth=depth )

Returns a list with a tuple of information for each file in the given path at the provided revision.

peg_revision indicates in which revision url_or_path is valid. If peg_revision.kind is opt_revision_kind.unspecified, then it defaults to opt_revision_kind.head for URLs or opt_revision_kind.working for WC targets.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

dirent_fields controls which dirent fields will return. Use pysvn.SVN_DIRENT_ALL to return all fields. Bit-wise or one of these values to return only the selected fields:

  • SVN_DIRENT_KIND - return kind field
  • SVN_DIRENT_SIZE - return size field
  • SVN_DIRENT_HAS_PROPS - return has_props field
  • SVN_DIRENT_CREATED_REV - return created_rev field
  • SVN_DIRENT_TIME - return time field
  • SVN_DIRENT_LAST_AUTHOR - return last_author field

The tuple contains:

  • 0 - PysvnList containing the dirent information
  • 1 - PysvnLock containing the lock information or None

The PysvnList object contains the requested dirent fields:

  • created_rev - pysvn.Revision - the revision of the last change
  • has_props - bool - True if the node has properties
  • kind - node_kind - one of the pysvn.node_kind values
  • last_author - string - the author of the last change
  • repos_path - string - (always present) absolute path of file in the repository
  • size - long - size of file
  • time - float - the time of the last change

The PysvnList object obtains the lock information:

  • comment - string - the lock comment
  • token - string - lock token
  • path -
  • owner - string - owner of the lock
  • expiration_date - None or int - time lock will expire
  • is_dav_comment - boolean - true is a commment from DAV
  • creation_date - int - time the lock was created

pysvn.Client.lock

lock( url_or_path,
      lock_comment, 
      force=False )

lock the url_or_path with lock_comment. Set force to True to override any lock held by another user.

pysvn.Client.log

log_messages = \
log( url_or_path,
     revision_start=pysvn.Revision( opt_revision_kind.head ),
     revision_end=pysvn.Revision( opt_revision_kind.number, 0 ),
     discover_changed_paths=False,
     strict_node_history=True,
     limit=0,
     peg_revision=pysvn.Revision( opt_revision_kind.unspecified ),
     include_merged_revisions=False,
     revprops=list_of_revprop_names )

Return the log messages for the specified url_or_path between revisions start and end. Set limit to the maximum number of log messages to be returned, 0 means return all messages.

If discover_changed_paths is set, the changed_paths dictionary entry is filled with a list of changed paths. If strict_node_history is set, log entries will not cross copies.

If url_or_path no longer exists in the repos of WC then pass in a peg_revision of a revision where it did exist.

include_merged_revisions TBD

revprops is a list of strings that name the revprops to be returned.

log returns a list of log entries; each log entry is a dictionary. The dictionary contains:

  • author - string - the name of the author who committed the revision
  • date - float time - the date of the commit
  • message - string - the text of the log message for the commit
  • revision - pysvn.Revision - the revision of the commit
  • changed_paths - list of dictionaries. Each dictionary contains:
    • path - string - the path in the repository
    • action - string
    • copyfrom_path - string - if copied, the original path, else None
    • copyfrom_revision - pysvn.Revision - if copied, the revision of the original, else None

pysvn.Client.ls

entries_list = \
ls( url_or_path,
    revision=pysvn.Revision( opt_revision_kind.head ),
    recurse=True,
    peg_revision=pysvn.Revision( opt_revision_kind.unspecified ) )

Use the list method in new code as it fixes performance and ambiguity problems with the ls method.

Returns a list of dictionaries for each file the given path at the provided revision.

peg_revision indicates in which revision url_or_path is valid. If peg_revision.kind is opt_revision_kind.unspecified, then it defaults to opt_revision_kind.head for URLs or opt_revision_kind.working for WC targets.

The dictionary contains:

  • created_rev - pysvn.Revision - the revision of the last change
  • has_props - bool - True if the node has properties
  • kind - node_kind - one of the pysvn.node_kind values
  • last_author - the author of the last change
  • name - string - name of the file
  • size - long - size of file
  • time - float - the time of the last change

pysvn.Client.merge

merge( url_or_path1,
       revision1,
       url_or_path2,
       revision2,
       local_path,
       force=False,
       recurse=True,
       notice_ancestry=False,
       dry_run=False,,
       depth=depth,
       record_only=False,
       merge_options=[] )

Apply the differences between two sources to a working copy path.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

merge_options (a list of strings), is used to pass additional command line arguments to the merge processes (internal or external).

The internal subversion diff supports the following options:

  • --ignore-space-change, -b
  • --ignore-all-space, -w
  • --ignore-eol-style
  • --unified, -u (for compatibility, does nothing).

pysvn.Client.merge_peg

merge_peg( url_or_path,
           revision1,
           revision2,
           peg_revision,
           local_path,
           recurse=True,
           notice_ancestry,
           force=False,
           dry_run=False,
           depth=depth,
           record_only=False,
           merge_options=[] )

Apply the differences between two sources to a working copy path.

peg_revision indicates in which revision url_or_path is valid. If peg_revision.kind is opt_revision_kind.unspecified, then it defaults to opt_revision_kind.head for URLs or opt_revision_kind.working for WC targets.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

merge_options (a list of strings), is used to pass additional command line arguments to the merge processes (internal or external).

The internal subversion diff supports the following options:

  • --ignore-space-change, -b
  • --ignore-all-space, -w
  • --ignore-eol-style
  • --unified, -u (for compatibility, does nothing).

pysvn.Client.merge_peg2

merge_peg2( sources,
            ranges_to_merge,
            peg_revision,
            tareget_wcpath,
            depth=depth,
            notice_ancestry=False,
            force=False,
            dry_run=False,
            record_only=True,
            merge_options=[] )

Apply the differences between the ranges_to_merge in sources to a working copy path, target_wcpath. ranges_to_merge is a list of tuples with the start and end revisions to be merged.

peg_revision indicates in which revision url_or_path is valid. If peg_revision.kind is opt_revision_kind.unspecified, then it defaults to opt_revision_kind.head for URLs or opt_revision_kind.working for WC targets.

The depth is one of the pysvn.depth enums.

merge_options (a list of strings), is used to pass additional command line arguments to the merge processes (internal or external).

The internal subversion diff supports the following options:

  • --ignore-space-change, -b
  • --ignore-all-space, -w
  • --ignore-eol-style
  • --unified, -u (for compatibility, does nothing).

pysvn.Client.merge_reintegrate

merge_reintegrate( url_or_path,
                   revision,
                   local_path,
                   dry_run=False,
                   merge_options=[] )

Lump-merge all of url_or_path unmerged changes into local_path.

merge_options (a list of strings), is used to pass additional command line arguments to the merge processes (internal or external).

The internal subversion diff supports the following options:

  • --ignore-space-change, -b
  • --ignore-all-space, -w
  • --ignore-eol-style
  • --unified, -u (for compatibility, does nothing).

pysvn.Client.mkdir

mkdir( url_or_path,
       log_message,
       make_parents,
       revprops )
mkdir( [url_or_path,url_or_path],
       log_message,
       make_parents,
       revprops )

Create a new directory under revision control.

url_or_path can be a list of URLs and paths

make_parents and revprops TBD

If url_or_path is a path, each directory is scheduled for addition upon the next commit.

If url_or_path is a URL, the directories are created in the repository via an immediate commit.

In both cases, all the intermediate directories must already exist.

pysvn.Client.move

move( src_url_or_path,
      dest_url_or_path,
      force=False )

Move (rename) something in working copy or HEAD revision of repository.

NOTE: this command is equivalent to a 'copy' and 'delete'.

src_path and dest_path can both be working copy (WC) paths or URLs:

  • WC -> WC: move and schedule for addition (with history)
  • URL -> URL: complete server-side rename.

If src_url_or_path is a path, each item is scheduled for deletion upon the next commit. Files, and directories that have not been committed, are immediately removed from the working copy. The command will not remove PATHs that are, or contain, unversioned or modified items; set force=True to override this behaviour.

If src_url_or_path is a URL, the items are deleted from the repository via an immediate commit.

pysvn.Client.move2

move2( sources,
       dest_url_or_path,
       move_as_child=False,
       make_parents=False,
       revprops )

Duplicate something in working copy or repos, remembering history. The src_revision defaults to pysvn.Revision( opt_revision_kind.head ) if the src_path is a URL otherwise to pysvn.Revision( opt_revision_kind.working ).

revprops TBD

src_url_or_path and dest_url_or_path can each be either a working copy (WC) path or URL:

  • WC -> WC: move and schedule for addition (with history)
  • WC -> URL: immediately commit a move of WC to URL
  • URL -> WC: check out URL into WC, schedule for addition
  • URL -> URL: complete server-side move; used to branch and tag

If the destination is a URL the client_get_log_message callback must be implemented to return a log message.

pysvn.Client.propdel

rev = \
propdel( prop_name,
         url_or_path,
         revision=pysvn.Revision(),
         recurse=False,
         skip_checks=False,
         depth=depth,
         base_revision_for_url=[0 for URL, -1 for path],
         revprops )

Delete the property prop_name from url_or_path.

If skip_checks is true, do no validity checking. But if skip_checks is false, and propname is not a valid property for target, return an error, either SVN_ERR_ILLEGAL_TARGET (if the property is not appropriate for target), or SVN_ERR_BAD_MIME_TYPE (if propname is "svn:mime-type", but propval is not a valid mime-type).

The url_or_path may only be an URL if base_revision_for_url is not -1; in this case, the property will only be set if it has not changed since revision base_revision_for_url. base_revision_for_url must be -1 if url_or_path is not an URL.

The src_revision defaults to pysvn.Revision( opt_revision_kind.head ) if the src_path is a URL otherwise to pysvn.Revision( opt_revision_kind.working ).

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

revprops TBD

pysvn.Client.propget

prop_list = \
propget( prop_name,
         url_or_path,
         revision=pysvn.Revision(),
         recurse=False,
         peg_revision=pysvn.Revision( opt_revision_kind.unspecified ),
         depth=depth )

Returns a dictionary with keys of url_or_path and values of the prop_name.

The src_revision defaults to pysvn.Revision( opt_revision_kind.head ) if the url_or_path is a URL otherwise to pysvn.Revision( opt_revision_kind.working ).

peg_revision indicates in which revision url_or_path is valid. If peg_revision.kind is opt_revision_kind.unspecified, then it defaults to opt_revision_kind.head for URLs or opt_revision_kind.working for WC targets.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

pysvn.Client.proplist

prop_list = \
proplist( url_or_path,
          revision=pysvn.Revision(),
          recurse=False,
          peg_revision=pysvn.Revision( opt_revision_kind.unspecified ),
          depth=depth )

Returns a list of tuples (path, prop_dict). The prop_dict contains the prop_names and their values if set on the path.

The src_revision defaults to pysvn.Revision( opt_revision_kind.head ) if the url_or_path is a URL otherwise to pysvn.Revision( opt_revision_kind.working ).

peg_revision indicates in which revision url_or_path is valid. If peg_revision.kind is opt_revision_kind.unspecified, then it defaults to opt_revision_kind.head for URLs or opt_revision_kind.working for WC targets.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

pysvn.Client.propset

commit_info = \
propset( prop_name,
         prop_value,
         url_or_path,
         revision=pysvn.Revision(),
         recurse=False,
         skip_checks=False,
         depth=depth,
         base_revision_for_url=[0 for URL, -1 for path],
         allow_unver_obstructions=False,
         revprops )

Set the property prop_name to prop_value in url_or_path.

If skip_checks is true, do no validity checking. But if skip_checks is false, and propname is not a valid property for target, return an error, either SVN_ERR_ILLEGAL_TARGET (if the property is not appropriate for target), or SVN_ERR_BAD_MIME_TYPE (if propname is "svn:mime-type", but propval is not a valid mime-type).

The revision defaults to pysvn.Revision( opt_revision_kind.head ) if the url_or_path is a URL otherwise to pysvn.Revision( opt_revision_kind.working ).

The url_or_path may only be an URL if base_revision_for_url is not -1; in this case, the property will only be set if it has not changed since revision base_revision_for_url. base_revision_for_url must be -1 if url_or_path is not an URL.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

If allow_unver_obstructions is False then the update will abort if there are any unversioned obstructing items.

revprops TBD

pysvn.Client.relocate

relocate( from_url,
          to_url,
          path,
          recurse=True,
          depth=depth )

Relocate the working copy from from_url to to_url of path.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

pysvn.Client.remove

remove( url_or_path_list,
        force=False,
        keep_local=False,
        revprops )

If url_or_path is a path, each item is scheduled for deletion upon the next commit. Files, and directories that have not been committed, are immediately removed from the working copy. The command will not remove paths that are, or contain, unversioned or modified items; set force=True to override this behaviour.

Set keep_local to True to prevent the local file from being delete.

revprops TBD

If url_or_path is a URL, the items are deleted from the repository via an immediate commit.

pysvn.Client.remove_from_changelists

remove_from_changelists( path,
                         changelist,
                         depth=pysvn.depth.infinite,
                         changelists=[] )

TBD

pysvn.Client.resolved

resolved( path,
          recurse=True,
          depth=depth )

Mark the conflicted file at path as resolved.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

pysvn.Client.revert

revert( path,
        recurse=False,
        depth=depth )
revert( [path,path],
        recurse=False,
        depth=depth )

Discard any changes in the working copy at path. Set recurse to True to recursively revert a directory's children.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

pysvn.Client.revpropdel

rev = \
revpropdel( prop_name,
            url,
            revision=pysvn.Revision( opt_revision_kind.head ),
            force=False )

Delete the revision property prop_name from url.

pysvn.Client.revpropget

rev_prop = \
revpropget( prop_name,
            url,
            revision=pysvn.Revision( opt_revision_kind.head ) )

Returns a tuple (rev, prop_val) where the prop_val contains the revision property value.

pysvn.Client.revproplist

rev_prop_dict = \
revproplist( url,
             revision=pysvn.Revision( opt_revision_kind.head ) )

Returns a tuple (revision, prop_dict) where the prop_dict contains the revision properies and their values.

pysvn.Client.revpropset

rev = \
revpropset( prop_name,
            prop_value,
            url,
            revision=pysvn.Revision( opt_revision_kind.head ),
            force=False )

set the revision property prop_name to prop_value in path. The revision updated is returned.

pysvn.Client.set_adm_dir

set_adm_dir( name )

Set the name of the subverion admin directory. ".svn" is the normal admin dir use and "_svn" is used on Windows to work around problems with .NET.

pysvn.Client.set_auth_cache

set_auth_cache( enable )

When enable is True subversion will remember authentication credentials in the configuration directory.

pysvn.Client.set_auto_props

set_auto_props( enable )

When enabled, subversion will automatically set properties when adding files; otherwise when disabled it will not.

pysvn.Client.set_default_password

set_default_password( password )

Set the default password to be used if there is no stored password.

pysvn.Client.set_default_username

set_default_username( username )

Set the default username to be used if there is no stored username.

pysvn.Client.set_interactive

set_interactive( enable )

When enable is True subversion will prompt for authentication credentials when there are no valid store credentials.

pysvn.Client.set_store_passwords

set_store_passwords( enable )

When enable is True subversion will store any passwords that subversion prompted for.

pysvn.Client.status

status_list = \
status( path,
        recurse=True,
        get_all=True,
        update=False,
        ignore=False,
        ignore_externals=False,
        depth=depth )

If path is a directory status is returned for all files in the directory in status_list. If path is a single file status is returned for that single file in status_list. Set ignore_externals to True to ignore externals definitions.

The status_list is a list of PysvnStatus objects.

Options:

  • recurse - If recurse is True, recurse fully, else do only immediate children.
  • get_all - If get_all is True, retrieve all entries; otherwise, retrieve only "interesting" entries (local mods and/or out-of-date).
  • update - If update is set, contact the repository and augment the status structures with information about out-of-dateness.
  • ignore - If ignore is False, the item will be added regardless of whether it is ignored.
  • ignore_externals (svn 1.2.0 or later) - If ignore_externals is False, then recurse into externals definitions (if any exist) after handling the main target. This calls the client notification function with the wc_notify_action.external action before handling each externals definition, and with wc_notify_action.completed after each.
  • depth - can be used as in place of recurse. depth is one of the pysvn.depth enums.

pysvn.Client.switch

switch( path,
        url,
        recurse=True,
        revision=pysvn.Revision( opt_revision_kind.head ),
        depth=depth,
        peg_revision=revision,
        depth_is_sticky=False,
        ignore_externals=False,
        allow_unver_obstructions=False )

Update the working copy to a different URL.

The depth can be used as in place of recurse. depth is one of the pysvn.depth enums.

If depth_is_sticky is set and depth is not svn_depth_unknown, then in addition to switching PATH, also set its sticky ambient depth value to @a depth.

If ignore_externals is set, do not process externals definitions as part of this operation.

If allow_unver_obstructions is True then the switch tolerates existing unversioned items that obstruct added paths. Only obstructions of the same type (file or dir) as the added item are tolerated. The text of obstructing files is left as-is, effectively treating it as a user modification after the switch. Working properties of obstructing items are set equal to the base properties.

If allow_unver_obstructions is False then the switch will abort if there are any unversioned obstructing items.

  1. Update the working copy to mirror a new URL. This behaviour is a superset of "svn update". Note: this is the way to move a working copy to a new branch.
  2. Reconnect the working copy when the repository URL has changed.

pysvn.Client.unlock

unlock( url_or_path,
        force=False )

Unlock the url_or_path. Set force to True to unlock any lock held by another user.

pysvn.Client.update

revision = \
update( path,
        recurse=True,
        revision=pysvn.Revision( opt_revision_kind.head ),
        ignore_externals=False,
        depth=depth )

Update the file in the working copy at path to the specified revision. Set recurse to True to recursively update a directory's children. Set ignore_externals to True to ignore externals definitions.

path can be a single path string or a list of path strings.

The depth can be used in place of recurse. depth is one of the pysvn.depth enums. Use pysvn.depth.unknown to update all files and folders in the working copy honoring the current depths. Use pysvn.depth.infinity to upadate all files and folders adding any that are missing ignoring the current depths.

update returns a pysvn.Revision containing the number of the revision the working copy was updated to.

This command is typically used to get the latest changes from the repository.

Note: updating to an older revision does not change the current revision. To make the current version identical to an older revision, use a merge followed by a commit.

pysvn.Client.upgrade

upgrade( path )

Recursively upgrade a working copy from any older format to the current WC metadata storage format. path is the path to the WC root.

pysvn.Transaction - Subversion transaction interface

Interface summary:

transaction = pysvn.Transaction()
transaction = pysvn.Transaction( repos_path, transaction_name, [is_revision=False] )

The Transaction object allows you to implement hook code for the SVN repository. The pre-commit and pre-revprop-change hooks are the only hooks that are currently appropriate in SVN. See the SVN documentation for details on hook scripts.

A Transaction object can only be used on one thread at a time. If two threads attempt to call methods of Transaction at the same time one of the threads will get a pysvn.TransactionError exception with the value 'transaction in use on another thread'.

When the optional parameter is_revision is True, than the transaction_name parameter will be interpreted as a revision number and all subsequent operation will be performed on this revision. Note that the propdel and propset operations will fail than. This option lets you use the Transation object to write post-commit hooks with the same API than pre-commit hooks, and lets you easily test your pre-commit hook on revisions.

Transaction methods

cat changed list    
propdel propget proplist propset
revpropdel revpropget revproplist revpropset

pysvn.Transaction.cat

file_text = \
cat( path )

Return the contents of path as a string, file_text.

pysvn.Transaction.changed

file_text = \
changed( [copy_info=False] )

Return a dict of all changes in the transaction. The keys in the dict are the path names and the values are tuples containing action, kind, text_mod, prop_mod.

The optional copy_info parameter when True will return the copy from revision and copy from path information.

  • action - string - a single letter indicating the action 'A' for add, 'R' for modify, 'D' for delete
  • kind - node_kind - one of the pysvn.node_kind values
  • text_mod - int - is != 0 if the text in this path has been modified
  • prop_mod - int - is != 0 if the properties in this path have been modified
  • copyfrom_rev - int - when path has been copied this is its copy from revision number
  • copyfrom_path - int - when path has been copied this is its copy from path

pysvn.Transaction.list

path_content = list( [path] )

Return a dict of all entries in the directory 'path'. The keys in the dict are the path names and the value contains the kind (one of the pysvn.node_kind values). If 'path' is not given the root of the repository will be examined. This is a same as '' and '/' as path.

pysvn.Transaction.propdel

propdel( prop_name,
         path )

Delete the property prop_name from path in the transaction.

pysvn.Transaction.propget

prop_value = \
propget( prop_name,
         path )

Returns the prop_value as a string or None if the prop_name is not in the transaction.

pysvn.Transaction.proplist

prop_dict = \
proplist( path )

Returns a prop_dict. The prop_dict contains the prop_names and their values if set on the path in the transaction.

pysvn.Transaction.propset

propset( prop_name,
         prop_value,
         path )

Set the property prop_name to prop_value in path in the transaction.

pysvn.Transaction.revpropdel

revpropdel( prop_name )

Delete the revision property prop_name in the transaction.

pysvn.Transaction.revpropget

prop_val = \
revpropget( prop_name )

Returns the prop_val with the revision property value or None if not set in the transaction.

pysvn.Transaction.revproplist

prop_dict = \
revproplist()

Returns a prop_dict where the prop_dict contains the revision properies and their values in the transaction.

pysvn.Transaction.revpropset

rev = \
revpropset( prop_name,
            prop_value )

set the revision property prop_name to prop_value in path in the transaction. The revision updated is returned.

pysvn.Revision - subversion revision

The Revision object has three member variables:

  • kind - the kind of revision, its value is one of the opt_revision_kind enumerations.
  • date - date and time when kind is opt_revision_kind.date, as seconds since the epoch which is compatible with python's time module.
  • number - revision number when kind is opt_revision_kind.number

Interface summary:

import pysvn
import time

revhead = pysvn.Revision( pysvn.opt_revision_kind.head )
revdate = pysvn.Revision( pysvn.opt_revision_kind.date, time.time() )
revnum = pysvn.Revision( pysvn.opt_revision_kind.number, 4721 )

pysvn.ClientError - Exception class raised by client commands on error

ClientError exception is raised when any of the subversion functions called by pysvn return an error.

The Client.exception_style variable controls the information stored in the ClientError object.

exception_style = 0

The args property is set to a single string parameter containing the whole error message. '\n' is used to seperate message parts.

Use str() to get the string description of the exception raised by pysvn.

import pysvn

client = pysvn.Client()
client.exception_style = 0
try:

    client.update( '.' )
except pysvn.ClientError, e:
    # convert to a string
    print str(e)
    # or access the string in args directly
    print e.args

exception_style = 1

The arg property is set to a tuple contain two values.

arg[0] is set to a string parameter containing the whole error message. '\n' is used to seperate message parts.

arg[1] is set to a list of tuples containing the message string and the error code. The error code values are defined by SVN and APR.

import pysvn

client = pysvn.Client()
client.exception_style = 1
try:

    client.update( '' )
except pysvn.ClientError, e:
    # print the whole message
    print e.args[0]
    # or process the error list
    for message, code in e.args[1]:
        print 'Code:',code,'Message:',message

pysvn.PysvnStatus - subversion status object

Each status object has the following fields:

  • path - string - the path name
  • entry - PysvnEntry - entry information
  • is_versioned - Boolean - true if the path is versioned
  • is_locked - Boolean - true if the path is locked
  • is_copied - Boolean - true if the path is copied
  • is_switched - Boolean - true if the path has been switched
  • prop_status - wc_status_kind - the status of the properties of the path
  • text_status - wc_status_kind - the status of the text of the path
  • repos_prop_status - wc_status_kind - the repository status of the properties of the path
  • repos_text_status - wc_status_kind - the repository status of the text of the path
  • repos_lock - dict - the repository lock information

pysvn.PysvnEntry - subversion entry object

  • checksum - string
  • commit_author - string
  • commit_revision - pysvn.Revision
  • commit_time - time
  • conflict_new - string or None - file path
  • conflict_old - string of None - file path
  • conflict_work - string of None - file path
  • copy_from_revision - pysvn.Revision or None
  • copy_from_url - string or None
  • is_absent - boolean
  • is_copied - boolean
  • is_deleted - boolean
  • is_valid - boolean
  • kind - pysvn.node_kind
  • name - string
  • properties_time - time
  • property_reject_file - string or None
  • repos - string
  • revision - pysvn.Revision or None
  • schedule - pysvn.wc_schedule or None
  • text_time - time
  • url - string or None
  • uuid - string or None

pysvn.opt_revision_kind - subversion revision number kind enumeration

  • unspecified - No revision information given.
  • number - revision given as number
  • date - revision given as date
  • committed - rev of most recent change
  • previous - (rev of most recent change) - 1
  • base - .svn/entries current revision
  • working - current, plus local mods
  • head - repository youngest

pysvn.wc_notify_action - subversion notification callback action enumeration

  • add - Adding a path to revision control.
  • copy - Copying a versioned path.
  • delete - Deleting a versioned path.
  • restore - Restoring a missing path from the pristine text-base.
  • revert - Reverting a modified path.
  • failed_revert - A revert operation has failed.
  • resolved - Resolving a conflict.
  • skip - Skipping a path.
  • update_delete - Got a delete in an update.
  • update_add - Got an add in an update.
  • update_update - Got any other action in an update.
  • update_completed - The last notification in an update (including updates of externals).
  • update_external - Updating an external module.
  • status_completed - The last notification in a status (including status on externals).
  • status_external - Running status on an external module.
  • commit_modified - Committing a modification.
  • commit_added - Committing an addition.
  • commit_deleted - Committing a deletion.
  • commit_replaced - Committing a replacement.
  • commit_postfix_txdelta - Transmitting post-fix text-delta data for a file.
  • annotate_revision - Processed a single revision's blame.
  • locked - Locking a path.
  • unlocked - Unlocking a path.
  • failed_lock - Failed to lock a path.
  • failed_unlock - Failed to unlock a path.

pysvn.wc_status_kind - subversion status kind enumeration

  • none - does not exist
  • unversioned - is not a versioned thing in this wc
  • normal - exists, but uninteresting.
  • added - is scheduled for addition
  • missing - under v.c., but is missing
  • deleted - scheduled for deletion
  • replaced - was deleted and then re-added
  • modified - text or props have been modified
  • merged - local mods received repos mods
  • conflicted - local mods received conflicting repos mods
  • ignored - a resource marked as ignored
  • obstructed - an unversioned resource is in the way of the versioned resource
  • external - an unversioned path populated by an svn:external property
  • incomplete - a directory doesn't contain a complete entries list

pysvn.wc_merge_outcome - subversion merge outcome enumeration

  • unchanged - The working copy is (or would be) unchanged. The changes to be merged were already present in the working copy
  • merged - The working copy has been (or would be) changed.
  • conflict - The working copy has been (or would be) changed, but there was (or would be) a conflict
  • no_merge - No merge was performed, probably because the target file was either absent or not under version control.

pysvn.wc_notify_state - subversion notify callback state enumeration

  • inapplicable - inapplicable
  • unknown - Notifier doesn't know or isn't saying.
  • unchanged - The state did not change.
  • missing - The item wasn't present.
  • obstructed - An unversioned item obstructed work.
  • changed - Pristine state was modified.
  • merged - Modified state had mods merged in.
  • conflicted - Modified state got conflicting mods.

pysvn.wc_schedule - subversion status schedule enumeration

  • normal - Nothing special here
  • add - Slated for addition
  • delete - Slated for deletion
  • replace - Slated for replacement (delete + add)

pysvn.node_kind - subversion node kind enumeration

  • none - absent
  • file - regular file
  • dir - directory
  • unknown - something's here, but we don't know what

pysvn.depth - subversion depth enumeration

  • empty - Just the named directory D, no entries. Updates will not pull in any files or subdirectories not already present.
  • exclude - not used yet
  • files - D + its file children, but not subdirs. Updates will pull in any files not already present, but not subdirectories.
  • immediates - D + immediate children (D and its entries). Updates will pull in any files or subdirectories not already present; those subdirectories' this_dir entries will have depth-empty.
  • infinity - D + all descendants (full recursion from D). Updates will pull in any files or subdirectories not already present; those subdirectories' this_dir entries will have depth-infinity. Equivalent to the pre-1.5 default update behavior.
  • unknown - Depth undetermined or ignored

Copyright © 2004-2009 Barry A. Scott. All rigths reserved.

pysvn-1.7.8/Docs/pysvn_prog_ref.js000644 000771 000771 00000004104 10751114535 017503 0ustar00barrybarry000000 000000 // // ==================================================================== // Copyright (c) 2006 Barry A Scott. All rights reserved. // // This software is licensed as described in the file LICENSE.txt, // which you should have received as part of this distribution. // // ==================================================================== // all_versions = new Array( 1001000, 1002000, 1003000, 1004000, 1005000 ) current_version = 1005000; change_style = "hilite"; function changeDisplay( version ) { current_version = version; style_string = "" if( change_style == "hilite" ) { span_style = ""; div_style = ""; } else { span_style = "display: inline"; div_style = "display: block"; } excluded_features = false; for( var i=0; i&1' % (svnversion_image ,os.environ.get( 'PYSVN_EXPORTED_FROM', '..' ))) else: cmd = ('%s -c "%s" 2>&1' % (svnversion_image ,os.environ.get( 'PYSVN_EXPORTED_FROM', '..' ))) print( 'Info: Running %s' % cmd ) build_revision = os.popen( cmd, 'r' ).read().strip() # build_revision is either a range nnn:mmm or mmm # we only want the mmm build_revision = build_revision.split(':')[-1] print( 'Info: revision %s' % build_revision ) if build_revision[0] not in '0123456789': branding_info['BUILD'] = '0' else: revision, modifiers = re.compile( '(\d+)(.*)' ).search( build_revision ).groups() if modifiers: branding_info['BUILD'] = '0' else: branding_info['BUILD'] = revision # read all the input text text = open( input_filename, 'r' ).read() # and write of a branded version open( output_filename, 'w' ).write( text % branding_info ) sys.exit(0) pysvn-1.7.8/Builder/builder_custom_init.cmd000644 000771 000771 00000003524 12164262436 021342 0ustar00barrybarry000000 000000 @echo off rem figure out where we are for %%I in ( %0\..\.. ) do set WORKDIR=%%~fI set PY_MAJ=2 if not "%1" == "" set PY_MAJ=%1 set PY_MIN=7 if not "%2" == "" set PY_MIN=%2 if not "%3" == "" set BUILD_TYPE=%3 if not "%4" == "" set SVN_VER_MAJ_MIN=%4 if "%SVN_VER_MAJ_MIN%" == "" set /p SVN_VER_MAJ_MIN="Build Version (1.8): " if "%SVN_VER_MAJ_MIN%" == "" set SVN_VER_MAJ_MIN=1.8 if "%SVN_VER_MAJ_MIN%" == "1.4" set SVN_VER_MAJ_DASH_MIN=1-4 if "%SVN_VER_MAJ_MIN%" == "1.5" set SVN_VER_MAJ_DASH_MIN=1-5 if "%SVN_VER_MAJ_MIN%" == "1.6" set SVN_VER_MAJ_DASH_MIN=1-6 if "%SVN_VER_MAJ_MIN%" == "1.7" set SVN_VER_MAJ_DASH_MIN=1-7 if "%SVN_VER_MAJ_MIN%" == "1.8" set SVN_VER_MAJ_DASH_MIN=1-8 rem Save CWD pushd . rem in development the version info can be found rem otherwise the builder will have run it already if "%PY_MAJ%.%PY_MIN%" == "2.4" set COMPILER=msvc71 if "%PY_MAJ%.%PY_MIN%" == "2.5" set COMPILER=msvc71 if "%PY_MAJ%.%PY_MIN%" == "2.6" set COMPILER=msvc90 if "%PY_MAJ%.%PY_MIN%" == "2.7" set COMPILER=msvc90 if "%PY_MAJ%.%PY_MIN%" == "3.0" set COMPILER=msvc90 if "%PY_MAJ%.%PY_MIN%" == "3.1" set COMPILER=msvc90 if "%PY_MAJ%.%PY_MIN%" == "3.2" set COMPILER=msvc90 if exist ..\..\ReleaseEngineering\win32-%COMPILER%\software-versions-%SVN_VER_MAJ_MIN%.cmd ( pushd ..\..\ReleaseEngineering\win32-%COMPILER% call software-versions-%SVN_VER_MAJ_MIN%.cmd off popd ) set PYCXX=%WORKDIR%\Import\pycxx-%PYCXX_VER% set PY=c:\python%PY_MAJ%%PY_MIN%.win32 if not exist %PY%\python.exe set PY=c:\python%PY_MAJ%%PY_MIN% set PYTHONPATH=%WORKDIR%\Source set PYTHON=%PY%\python.exe rem Need python and SVN on the path PATH %PY%;%SVN_BIN%;%PATH% rem prove the python version selected python -c "import sys;print( 'Info: Python Version %%s' %% sys.version )" svn --version rem restore original CWD popd pysvn-1.7.8/Builder/builder_custom_init.sh000755 000771 000771 00000001136 11662251477 021216 0ustar00barrybarry000000 000000 #!/bin/echo Usage: . $0 # default to highest version we can find if no value in $1 and $2 if [ ! -z "$1" ] then PREF_VER=$1.$2 else PREF_VER=2.7 fi for PY_VER in ${PREF_VER} 2.7 2.6 do # used in pick python to use in Builder driver makefile export PYTHON=$( which python${PY_VER} ) if [ -e "${PYTHON}" ] then break fi done unset PREF_VER if [ -e "${PYTHON}" ] then # prove the python version selected is as expected ${PYTHON} -c "import sys;print( 'Info: Python Version %r' % sys.version )" else echo "Error: Cannot find python${PREF_VER} on the PATH" fi pysvn-1.7.8/Builder/freebsd.mak000644 000771 000771 00000000551 10411462216 016702 0ustar00barrybarry000000 000000 build: all test kit all: ../Source/Makefile cd ../Source && $(MAKE) clean: ../Source/Makefile cd ../Source && $(MAKE) clean && rm Makefile cd ../Tests && $(MAKE) clean && rm Makefile ../Source/Makefile: ../Source/setup.py cd ../Source && $(PYTHON) setup.py configure kit: cd ../Kit/FreeBSD && $(PYTHON) make_pkg.py test: cd ../Tests && $(MAKE) all pysvn-1.7.8/Builder/linux.mak000644 000771 000771 00000001070 11655237433 016440 0ustar00barrybarry000000 000000 build: all test kit all: ../Source/Makefile cd ../Source && $(MAKE) clean: ../Source/Makefile cd ../Source && $(MAKE) clean && rm Makefile cd ../Tests && $(MAKE) clean && rm Makefile rm -rf ../Kit/Linux/tmp ../Source/Makefile: ../Source/setup.py cd ../Source && $(PYTHON) setup.py configure --platform=linux $(CONFIG_ARGS) kit: cd ../Kit/Linux && $(PYTHON) make_rpm.py install: echo sudo may prompt for your password to allow installation of the pysvn rpm sudo rpm -i ../Kit/Linux/tmp/RPMS/i386/py*_pysvn-*-1.i386.rpm test: cd ../Tests && $(MAKE) all pysvn-1.7.8/Builder/macosx.mak000644 000771 000771 00000000556 11062516532 016573 0ustar00barrybarry000000 000000 build: all test kit all: ../Source/Makefile cd ../Source && $(MAKE) clean: ../Source/Makefile cd ../Source && $(MAKE) clean && rm Makefile cd ../Tests && $(MAKE) clean ../Source/Makefile: ../Source/setup.py cd ../Source && $(PYTHON) -u setup.py configure $(CONFIG_ARGS) kit: cd ../Kit/MacOSX && $(PYTHON) -u make_pkg.py test: cd ../Tests && $(MAKE) all pysvn-1.7.8/Builder/version.info000644 000771 000771 00000000040 12112403425 017126 0ustar00barrybarry000000 000000 MAJOR=1 MINOR=7 PATCH=8 BUILD=0 pysvn-1.7.8/Builder/win32-msvc71.mak000644 000771 000771 00000003717 11264374000 017357 0ustar00barrybarry000000 000000 BUILD_TYPE=Release SVN_VER_MAJ_MIN=1.5 build: all test kit all: all-$(SVN_VER_MAJ_MIN) all-1.4: cd ..\Source & devenv pysvn-for-svn-1-4-msvc71.sln /useenv /build "$(BUILD_TYPE)" /project "pysvn" all-1.5: cd ..\Source & devenv pysvn-for-svn-1-5-msvc71.sln /useenv /build "$(BUILD_TYPE)" /project "pysvn" all-1.6: cd ..\Source & devenv pysvn-for-svn-1-6-msvc71.sln /useenv /build "$(BUILD_TYPE)" /project "pysvn" clean: clean-$(SVN_VER_MAJ_MIN) clean-1.4: cd ..\Source & devenv pysvn-for-svn-1-4-msvc71.sln /useenv /clean "$(BUILD_TYPE)" /project "pysvn" cd ..\Source & del sept cd ..\Tests & $(MAKE) -f win32.mak SVN_VER_MAJ_MIN=1.4 clean cd ..\kit\Win32-1.4 & $(MAKE) clean clean-1.5: cd ..\Source & devenv pysvn-for-svn-1-5-msvc71.sln /useenv /clean "$(BUILD_TYPE)" /project "pysvn" cd ..\Source & del sept cd ..\Tests & $(MAKE) -f win32.mak SVN_VER_MAJ_MIN=1.5 clean cd ..\kit\Win32-1.5 & $(MAKE) clean clean-1.6: cd ..\Source & devenv pysvn-for-svn-1-6-msvc71.sln /useenv /clean "$(BUILD_TYPE)" /project "pysvn" cd ..\Source & del sept cd ..\Tests & $(MAKE) -f win32.mak SVN_VER_MAJ_MIN=1.6 clean cd ..\kit\Win32-1.6 & $(MAKE) clean kit: kit-$(SVN_VER_MAJ_MIN) kit-1.4: cd ..\kit\Win32-1.4 & $(MAKE) all_msvc71 kit-1.5: cd ..\kit\Win32-1.5 & $(MAKE) all_msvc71 kit-1.6: cd ..\kit\Win32-1.6 & $(MAKE) all_msvc71 install: install-$(SVN_VER_MAJ_MIN) install-1.4: ..\kit\Win32\tmp\output\setup.exe install-1.5: ..\kit\Win32\tmp\output\setup.exe install-1.6: ..\kit\Win32\tmp\output\setup.exe test: test-$(SVN_VER_MAJ_MIN) test-1.4: cd ..\Tests & $(MAKE) -f win32.mak SVN_VER_MAJ_MIN=1.4 KNOWN_GOOD_VERSION=py$(PY_MAJ)-svn$(SVN_VER_MAJ_MIN) test-1.5: cd ..\Tests & $(MAKE) -f win32.mak SVN_VER_MAJ_MIN=1.5 KNOWN_GOOD_VERSION=py$(PY_MAJ)-svn$(SVN_VER_MAJ_MIN) test-1.6: cd ..\Tests & $(MAKE) -f win32.mak SVN_VER_MAJ_MIN=1.6 KNOWN_GOOD_VERSION=py$(PY_MAJ)-svn$(SVN_VER_MAJ_MIN) pysvn-1.7.8/Builder/win32-msvc90.mak000644 000771 000771 00000001521 11653316763 017365 0ustar00barrybarry000000 000000 BUILD_TYPE=Release SVN_VER_MAJ_MIN=1.7 VCBUILD_OPT=/useenv /nologo /nocolor "/info:Info: " "/error:Error: " "/warning:Warn: " build: all test kit all: cd ..\Source & $(PYTHON) setup.py configure vcbuild /rebuild $(VCBUILD_OPT) pysvn-for-svn-$(SVN_VER_MAJ_DASH_MIN)-msvc90.sln "Release|Win32" clean: cd ..\Source & vcbuild /clean $(VCBUILD_OPT) pysvn-for-svn-$(SVN_VER_MAJ_DASH_MIN)-msvc90.sln "Release|Win32" cd ..\Source & if exist sept del sept cd ..\Tests & $(MAKE) -f win32.mak SVN_VER_MAJ_MIN=$(SVN_VER_MAJ_MIN) clean cd ..\kit\Win32-$(SVN_VER_MAJ_MIN) & $(MAKE) clean kit: cd ..\kit\Win32-$(SVN_VER_MAJ_MIN) & $(MAKE) all_msvc90 install: ..\kit\Win32\tmp\output\setup.exe test: cd ..\Tests & $(MAKE) -f win32.mak SVN_VER_MAJ_MIN=$(SVN_VER_MAJ_MIN) KNOWN_GOOD_VERSION=py$(PY_MAJ)-svn$(SVN_VER_MAJ_MIN)