Commit d60b8440 authored by SVN-Git Migration's avatar SVN-Git Migration

Imported Upstream version 1.7.8

parent 2c44cabe
......@@ -10,13 +10,14 @@ 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.7): "
if "%SVN_VER_MAJ_MIN%" == "" set SVN_VER_MAJ_MIN=1.7
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
......
MAJOR=1
MINOR=7
PATCH=6
PATCH=8
BUILD=0
......@@ -996,11 +996,15 @@ export( src_url_or_path,
ignore_externals=False,
recurse=True,
peg_revision=pysvn.Revision( opt_revision_kind.unspecified )</span><span class="svn_1005000">,
depth=depth</span> )
depth=depth</span><span class="svn_1007000">,
ignore_keywords=False</span> )
</pre>
<p>Create an unversioned copy of the src_path at revision in dest_path.
<span class="svn_1003000">Set recurse to False to export a single file. Set ignore_externals to
True to ignore externals definitions.</span>
<span class="svn_1007000">
Set ignore_keywords to True to prevnet keyword replacement.
</span>
</p>
<p><span class="svn_1002000">peg_revision indicates in
which revision src_url_or_path is valid. If peg_revision.kind
......
......@@ -29,6 +29,11 @@ if hasattr( 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 )
......@@ -139,7 +144,7 @@ if hasattr( pysvn.wc_notify_action, 'exists' ):
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'
......@@ -151,6 +156,7 @@ if hasattr( pysvn.wc_notify_action, 'property_added' ):
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'
......@@ -177,6 +183,22 @@ if hasattr( pysvn.wc_notify_action, 'update_started' ):
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
......@@ -246,8 +268,13 @@ class SvnCommand:
print( 'callback_conflict_resolver' )
for key in sorted( arg_dict.keys() ):
value = arg_dict[ key ]
if type(value) not in StringTypes:
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
......@@ -367,7 +394,7 @@ class SvnCommand:
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' ) )
print( text.decode( 'utf-8' ).replace( '\r\n', '\n' ) )
def cmd_checkout( self, args ):
recurse = args.getBooleanOption( '--non-recursive', False )
......@@ -451,7 +478,7 @@ class SvnCommand:
diff_text = self.client.diff( tmpdir, positional_args[0], recurse=recurse,
revision1=revision1, revision2=revision2,
diff_options=['-u'] )
print( diff_text )
print( diff_text.replace( '\r\n', '\n' ) )
def cmd_export( self, args ):
force = args.getBooleanOption( '--force', False )
......
......@@ -24,7 +24,7 @@ code {background-color: #dddddd; }
<li>Python pyexpat package
</ul>
</li>
<li><a href="http://subversion.tigris.org">subversion</a> 1.6.x or 1.7.x with these options:
<li><a href="http://subversion.tigris.org">subversion</a> 1.7.x or 1.8.x with these options:
<ul>
<li>Subversion client package
<li>Subversion development package
......@@ -46,7 +46,7 @@ and <a href="http://www.jrsoftware.org/">INNO</a> 5 to create the installation k
<p>You must build with MSVC 2008 (9.0) for Python 2.6 or later and python 3.0 or later.</p>
<ol>
<li>Build subversion (tested with and svn 1.7.1)</li>
<li>Build subversion (tested with and svn 1.7.11 and 1.8.1)</li>
<li>Fetch and expand the pysvn source code into <em>extdir</em></li>
<li>Expand pycxx-6.2.4.tar.gz into <em>extdir</em>\Import if not using a source kit</li>
<li>Edit Builder\builder_custom_init.cmd to match the locations of the sources.</li>
......
......@@ -9,6 +9,9 @@ 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' )
......@@ -28,7 +31,7 @@ elif is_i386:
else:
assert False, 'Unknown processor type'
vendor = os.environ.get( 'BUILDER_VENDOR', 'unknown' )
python_vendor = os.environ.get( 'BUILDER_VENDOR', 'unknown' )
if processor == 'i386':
if hasattr( sys, 'maxsize' ):
......@@ -41,8 +44,6 @@ if processor == 'i386':
else:
processor = 'x86_64'
python_vendor = os.environ[ 'BUILDER_VENDOR' ]
pymaj, pymin, pypat, _, _ = sys.version_info
python_version_string = '%d.%d.%d' % (pymaj, pymin, pypat)
pysvnmaj, pysvnmin, pysvnpat, _ = pysvn.version
......@@ -51,7 +52,7 @@ pysvn_short_version_string = '%d.%d.%d' % (pysvn.version[0], pysvn.version[1], p
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, vendor, svn_version_package_string, pysvn_version_string, processor)
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()
......@@ -66,13 +67,13 @@ 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 vendor == 'apple_com':
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 vendor == 'apple_com':
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'
......@@ -83,6 +84,9 @@ elif pymaj == 3 and pymin == 1:
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' )
......@@ -97,7 +101,7 @@ for kit_dir in [
os.path.join( tmpdir, 'Resources' ),
os.path.join( tmpdir, 'Contents' ),
os.path.join( tmpdir, 'Contents/pysvn' ),
os.path.join( tmpdir, '%s' % pkg_filename),
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),
......@@ -180,15 +184,22 @@ for fixup_path in fixup_path_list:
#print( 'Debug: cmd %r' % cmd )
os.system( cmd )
if vendor == 'apple_com':
if python_vendor == 'apple_com':
readme_vendor_name = "Apple's"
elif vendor == 'python_org':
elif python_vendor == 'python_org':
readme_vendor_name = "Python.org's"
else:
readme_vendor_name = vendor
readme_vendor_name = python_vendor
print( 'Info: Create tmp/Resources/ReadMe.txt' )
f = open('tmp/Resources/ReadMe.txt','w')
if package_maker_kit:
f = open( 'tmp/Resources/ReadMe.txt', 'w' )
else:
f = open( 'tmp/%s/ReadMe.txt' % (pkg_filename,), 'w' )
f.write('''<html>
<body>
<h1>PySVN %(pysvn_version_string)s for Mac OS X, %(readme_vendor_name)s Python %(pymaj)s.%(pymin)s and Subversion %(svn_version_string)s</h1>
......@@ -205,9 +216,10 @@ f.write('''<html>
''' % locals() )
f.close()
print( 'Info: Create tmp/Info.plist' )
f = open('tmp/Info.plist','w')
f.write('''<?xml version="1.0" encoding="UTF-8"?>
if package_maker_kit:
print( 'Info: Create tmp/Info.plist' )
f = open( 'tmp/Info.plist', 'w' )
f.write('''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
......@@ -246,11 +258,11 @@ f.write('''<?xml version="1.0" encoding="UTF-8"?>
</dict>
</plist>
''' % locals() )
f.close()
f.close()
print( 'Info: Create tmp/Description.plist' )
f = open('tmp/Description.plist','w')
f.write('''<?xml version="1.0" encoding="UTF-8"?>
print( 'Info: Create tmp/Description.plist' )
f = open( 'tmp/Description.plist', 'w' )
f.write('''<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
......@@ -262,20 +274,58 @@ f.write('''<?xml version="1.0" encoding="UTF-8"?>
</dict>
</plist>
''' )
f.close()
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 )
print( 'Info: PackageMaker' )
cmd = [ '/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker',
'-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 ) )
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 )
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 )
#
# 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
......@@ -91,6 +91,11 @@ pysvn_module::pysvn_module()
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 );
......
......@@ -201,10 +201,12 @@ void pysvn_context::contextProgress
#if defined( PYSVN_HAS_SVN_CLIENT_CTX_T__CONFLICT_FUNC_1_6 )
Py::Object toConflictVersion( const svn_wc_conflict_version_t *version )
{
Py::Dict ver;
if( version == NULL )
return Py::None();
Py::Dict ver;
ver["repos_url"] = utf8_string_or_none( version->repos_url );
ver["peg_rev"] = asObject( new pysvn_revision( svn_opt_revision_number, 0, version->peg_rev ) );
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 );
......
......@@ -39,6 +39,9 @@ Py::Object pysvn_client::cmd_export( const Py::Tuple &a_args, const Py::Dict &a_
#endif
#if defined( PYSVN_HAS_CLIENT_EXPORT4 )
{ false, name_depth },
#endif
#if defined( PYSVN_HAS_CLIENT_EXPORT5 )
{ false, name_ignore_keywords },
#endif
{ false, NULL }
};
......@@ -88,6 +91,10 @@ Py::Object pysvn_client::cmd_export( const Py::Tuple &a_args, const Py::Dict &a_
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;
......@@ -102,7 +109,23 @@ Py::Object pysvn_client::cmd_export( const Py::Tuple &a_args, const Py::Dict &a_
PythonAllowThreads permission( m_context );
#if defined( PYSVN_HAS_CLIENT_EXPORT4 )
#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,
......
......@@ -8,7 +8,7 @@
// ====================================================================
//
//
// pysvn_client_cmd_prop.cpp
// pysvn_client_cmd_info.cpp
//
#if defined( _MSC_VER )
// disable warning C4786: symbol greater than 255 character,
......
......@@ -59,7 +59,7 @@ Py::Object pysvn_client::cmd_merge( const Py::Tuple &a_args, const Py::Dict &a_k
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_recurse, false );
bool record_only = args.getBoolean( name_record_only, false );
#else
bool recurse = args.getBoolean( name_recurse, true );
#endif
......
......@@ -268,7 +268,45 @@ Py::Object toObject
}
#endif
long is_versioned = (long)(svn_status.text_status > svn_wc_status_unversioned);
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 );
......
......@@ -170,8 +170,19 @@ template <> EnumString< svn_wc_notify_action_t >::EnumString()
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()
......@@ -355,6 +366,10 @@ template <> EnumString< svn_wc_conflict_reason_t >::EnumString()
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
......@@ -375,6 +390,7 @@ template <> EnumString< svn_depth_t >::EnumString()
#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.
......@@ -394,6 +410,7 @@ template <> EnumString< svn_wc_conflict_choice_t >::EnumString()
#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" );
......@@ -666,6 +683,13 @@ template <> void pysvn_enum_value< svn_wc_conflict_reason_t >::init_type(void)
#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");
......
......@@ -52,7 +52,7 @@ std::string svnNormalisedUrl( const std::string &unnormalised, SvnPool &pool )
std::string svnNormalisedPath( const std::string &unnormalised, SvnPool &pool )
{
const char *normalised_path = svn_dirent_canonicalize( unnormalised.c_str(), pool );
const char *normalised_path = svn_dirent_internal_style( unnormalised.c_str(), pool );
return std::string( normalised_path );
}
......
......@@ -69,6 +69,7 @@ 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" )
......
......@@ -16,8 +16,8 @@
#error PyCXX version 5.3.5 is required
#endif
#if PYCXX_VERSION < PYCXX_MAKEVERSION( 5, 3, 5 )
#error PyCXX version 5.3.5 is required
#if PYCXX_VERSION < PYCXX_MAKEVERSION( 6, 2, 4 )
#error PyCXX version 6.2.4 is required
#endif
#include <svn_version.h>
......@@ -163,7 +163,7 @@
#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_16
#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
......@@ -172,13 +172,15 @@
// 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 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
......@@ -197,6 +199,7 @@
#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
......@@ -204,11 +207,19 @@
#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
......
......@@ -795,6 +795,7 @@ static void convertReposTree
is_changed = false;
if( is_changed )
{
if( copy_info )
{
Py::Tuple value( 6 );
......@@ -822,7 +823,8 @@ static void convertReposTree
dict[ Py::String( path, name_utf8 ) ] = value;
}
}
/* Return here if the node has no children. */
node = node->child;
if( node == NULL )
......
......@@ -770,7 +770,6 @@ class Win32CompilerMSVC90(Compiler):
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_neon-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',
......@@ -783,6 +782,11 @@ class Win32CompilerMSVC90(Compiler):
]
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 ) )
......@@ -796,7 +800,9 @@ class Win32CompilerMSVC90(Compiler):
v = {'TN': test_case.test_name
,'KGV': 'py%d-svn%d.%d' %
(sys.version_info[0]
,self.getSvnVersion()[0], self.getSvnVersion()[1])}
,self.getSvnVersion()[0], self.getSvnVersion()[1])
,'SVN_VERSION': '%d.%d.%d' % self.getSvnVersion()
}
rules = []
rules.append( '' )
......@@ -810,7 +816,7 @@ class Win32CompilerMSVC90(Compiler):
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 test-%(TN)s.win32.known_good-%(KGV)s.log 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 )
......@@ -873,7 +879,7 @@ class CompilerGCC(Compiler):
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 )) )
rules.append( '\t@%%(LDSHARED)s -o %s %%(CCCFLAGS)s %s %%(LDLIBS)s' % (target_filename, ' '.join( all_objects )) )
self.makePrint( self.expand( '\n'.join( rules ) ) )
......@@ -915,7 +921,10 @@ class CompilerGCC(Compiler):
v = {'TN': test_case.test_name
,'KGV': 'py%d-svn%d.%d' %
(sys.version_info[0]
,self.getSvnVersion()[0], self.getSvnVersion()[1])}